PassRefPtr<HistoryItem> HistoryController::createItem(bool useOriginal) { DocumentLoader* documentLoader = m_frame->loader()->documentLoader(); KURL unreachableURL = documentLoader ? documentLoader->unreachableURL() : KURL(); KURL url; KURL originalURL; if (!unreachableURL.isEmpty()) { url = unreachableURL; originalURL = unreachableURL; } else { originalURL = documentLoader ? documentLoader->originalURL() : KURL(); if (useOriginal) url = originalURL; else if (documentLoader) url = documentLoader->requestURL(); } LOG(History, "WebCoreHistory: Creating item for %s", url.string().ascii().data()); // Frames that have never successfully loaded any content // may have no URL at all. Currently our history code can't // deal with such things, so we nip that in the bud here. // Later we may want to learn to live with nil for URL. // See bug 3368236 and related bugs for more information. if (url.isEmpty()) url = blankURL(); if (originalURL.isEmpty()) originalURL = blankURL(); Frame* parentFrame = m_frame->tree()->parent(); String parent = parentFrame ? parentFrame->tree()->uniqueName() : ""; String title = documentLoader ? documentLoader->title() : ""; RefPtr<HistoryItem> item = HistoryItem::create(url, m_frame->tree()->uniqueName(), parent, title); item->setOriginalURLString(originalURL.string()); if (!unreachableURL.isEmpty() || !documentLoader || documentLoader->response().httpStatusCode() >= 400) item->setLastVisitWasFailure(true); // Save form state if this is a POST if (documentLoader) { if (useOriginal) item->setFormInfoFromRequest(documentLoader->originalRequest()); else item->setFormInfoFromRequest(documentLoader->request()); } // Set the item for which we will save document state m_frameLoadComplete = false; m_previousItem = m_currentItem; m_currentItem = item; return item.release(); }
void InspectorInstrumentation::loadEventFiredImpl(InstrumentingAgents* instrumentingAgents, Frame* frame, const KURL& url) { DocumentLoader* documentLoader = frame->loader()->documentLoader(); ASSERT(documentLoader); if (InspectorDOMAgent* domAgent = instrumentingAgents->inspectorDOMAgent()) domAgent->loadEventFired(documentLoader->frame()->document()); if (frame->page()->mainFrame() != frame || url != documentLoader->requestURL()) return; if (InspectorTimelineAgent* timelineAgent = instrumentingAgents->inspectorTimelineAgent()) timelineAgent->didMarkLoadEvent(); if (InspectorPageAgent* pageAgent = instrumentingAgents->inspectorPageAgent()) pageAgent->loadEventFired(); }