Index: third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
diff --git a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
index 1943a85561a0a1532dd6762f7aa613ffa32afffd..ab2c03469fa1d826345ccf90bc240c4a1051d601 100644 |
--- a/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
+++ b/third_party/WebKit/Source/web/WebLocalFrameImpl.cpp |
@@ -1677,10 +1677,9 @@ LocalFrame* WebLocalFrameImpl::createChildFrame( |
FrameLoadRequest newRequest = request; |
FrameLoadType loadType = FrameLoadTypeStandard; |
if (childItem) { |
- newRequest = FrameLoadRequest( |
- request.originDocument(), |
- FrameLoader::resourceRequestFromHistoryItem( |
- childItem, WebCachePolicy::UseProtocolCachePolicy)); |
+ newRequest = FrameLoadRequest(request.originDocument(), |
+ childItem->generateResourceRequest( |
+ WebCachePolicy::UseProtocolCachePolicy)); |
loadType = FrameLoadTypeInitialHistoryLoad; |
} |
webframeChild->frame()->loader().load(newRequest, loadType, childItem); |
@@ -1994,9 +1993,8 @@ WebURLRequest WebLocalFrameImpl::requestFromHistoryItem( |
const WebHistoryItem& item, |
WebCachePolicy cachePolicy) const { |
HistoryItem* historyItem = item; |
- ResourceRequest request = |
- FrameLoader::resourceRequestFromHistoryItem(historyItem, cachePolicy); |
- return WrappedResourceRequest(request); |
+ return WrappedResourceRequest( |
+ historyItem->generateResourceRequest(cachePolicy)); |
} |
WebURLRequest WebLocalFrameImpl::requestForReload( |
@@ -2051,9 +2049,19 @@ void WebLocalFrameImpl::loadData(const WebData& data, |
// unreachableURL informs FrameLoader::reload to load unreachableURL |
// instead of the currently loaded URL. |
ResourceRequest request; |
- if (replace && !unreachableURL.isEmpty() && |
- frame()->loader().provisionalDocumentLoader()) |
- request = frame()->loader().provisionalDocumentLoader()->originalRequest(); |
+ HistoryItem* historyItem = item; |
+ DocumentLoader* provisionalDocumentLoader = |
+ frame()->loader().provisionalDocumentLoader(); |
+ if (replace && !unreachableURL.isEmpty() && provisionalDocumentLoader) { |
+ request = provisionalDocumentLoader->originalRequest(); |
+ // When replacing a failed back/forward provisional navigation with an error |
+ // page, retain the HistoryItem for the failed provisional navigation |
+ // and reuse it for the error page navigation. |
+ if (provisionalDocumentLoader->loadType() == FrameLoadTypeBackForward) { |
+ historyItem = provisionalDocumentLoader->historyItem(); |
+ webFrameLoadType = WebFrameLoadType::BackForward; |
+ } |
+ } |
request.setURL(baseURL); |
request.setCheckForBrowserSideNavigation(false); |
@@ -2064,7 +2072,6 @@ void WebLocalFrameImpl::loadData(const WebData& data, |
if (isClientRedirect) |
frameRequest.setClientRedirect(ClientRedirectPolicy::ClientRedirect); |
- HistoryItem* historyItem = item; |
frame()->loader().load( |
frameRequest, static_cast<FrameLoadType>(webFrameLoadType), historyItem, |
static_cast<HistoryLoadType>(webHistoryLoadType)); |
@@ -2077,9 +2084,8 @@ bool WebLocalFrameImpl::maybeRenderFallbackContent( |
if (!frame()->owner() || !frame()->owner()->canRenderFallbackContent()) |
return false; |
- FrameLoader& frameloader = frame()->loader(); |
- DCHECK(frameloader.provisionalDocumentLoader()); |
- frameloader.loadFailed(frameloader.provisionalDocumentLoader(), error); |
+ DCHECK(frame()->loader().provisionalDocumentLoader()); |
+ frame()->loader().provisionalDocumentLoader()->loadFailed(error); |
return true; |
} |