void HistoryController::initializeItem(HistoryItem& item) { DocumentLoader* documentLoader = m_frame.loader().documentLoader(); ASSERT(documentLoader); URL unreachableURL = documentLoader->unreachableURL(); URL url; URL originalURL; if (!unreachableURL.isEmpty()) { url = unreachableURL; originalURL = unreachableURL; } else { url = documentLoader->url(); originalURL = documentLoader->originalURL(); } // 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(); StringWithDirection title = documentLoader->title(); item.setURL(url); item.setTarget(m_frame.tree().uniqueName()); // FIXME: should store title directionality in history as well. item.setTitle(title.string()); item.setOriginalURLString(originalURL.string()); if (!unreachableURL.isEmpty() || documentLoader->response().httpStatusCode() >= 400) item.setLastVisitWasFailure(true); item.setShouldOpenExternalURLsPolicy(documentLoader->shouldOpenExternalURLsPolicyToPropagate()); // Save form state if this is a POST item.setFormInfoFromRequest(documentLoader->request()); }