Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2011)

Unified Diff: Source/web/WebLocalFrameImpl.cpp

Issue 1156473002: Refactor FrameLoader loading interface (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fixed issue with inital history navigation in child frames Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/web/WebLocalFrameImpl.cpp
diff --git a/Source/web/WebLocalFrameImpl.cpp b/Source/web/WebLocalFrameImpl.cpp
index 418eb40597c102f668079733dda017fc4a88daad..d7e7585b7876dc7241420e36f609c8bcf0978562 100644
--- a/Source/web/WebLocalFrameImpl.cpp
+++ b/Source/web/WebLocalFrameImpl.cpp
@@ -913,16 +913,49 @@ v8::Local<v8::Context> WebLocalFrameImpl::mainWorldScriptContext() const
return toV8Context(frame(), DOMWrapperWorld::mainWorld());
}
-void WebLocalFrameImpl::reload(bool ignoreCache)
+WebURLRequest WebLocalFrameImpl::RequestFromHistoryItem(const WebHistoryItem& item,
+ WebURLRequest::CachePolicy cachePolicy) const
+{
+ RefPtrWillBeRawPtr<HistoryItem> historyItem = PassRefPtrWillBeRawPtr<HistoryItem>(item);
+ ResourceRequest request = FrameLoader::resourceRequestFromHistoryItem(
+ historyItem.get(), static_cast<ResourceRequestCachePolicy>(cachePolicy));
+ return WrappedResourceRequest(request);
+}
+
+WebURLRequest WebLocalFrameImpl::RequestForReload(const WebHistoryItem& item,
+ WebFrameLoadType loadType, const WebURL& overrideUrl) const
{
ASSERT(frame());
- frame()->loader().reload(ignoreCache ? EndToEndReload : NormalReload);
+ RefPtrWillBeRawPtr<HistoryItem> historyItem = PassRefPtrWillBeRawPtr<HistoryItem>(item);
+ ResourceRequest request = FrameLoader::resourceRequestForReload(
+ historyItem.get(), *frame(), static_cast<FrameLoadType>(loadType), overrideUrl);
+ return WrappedResourceRequest(request);
+}
+
+WebHistoryItem WebLocalFrameImpl::CurrentItem() const
+{
+ return WebHistoryItem(frame()->loader().currentItem());
+}
+
+void WebLocalFrameImpl::reload(bool ignoreCache)
+{
+ // TODO(clamy): Remove this function once RenderFrame calls loadRequest for
+ // all requests.
+ reloadWithOverrideURL(KURL(), ignoreCache);
}
void WebLocalFrameImpl::reloadWithOverrideURL(const WebURL& overrideUrl, bool ignoreCache)
{
+ // TODO(clamy): Remove this function once RenderFrame calls loadRequest for
+ // all requests.
ASSERT(frame());
- frame()->loader().reload(ignoreCache ? EndToEndReload : NormalReload, overrideUrl);
+ WebFrameLoadType loadType = ignoreCache ?
+ WebFrameLoadTypeReloadFromOrigin : WebFrameLoadTypeReload;
+ WebHistoryItem item = CurrentItem();
+ if (item.isNull())
+ return;
+ WebURLRequest request = RequestForReload(item, loadType, overrideUrl);
+ loadRequest(request, loadType, WebHistoryItem());
}
void WebLocalFrameImpl::reloadImage(const WebNode& webNode)
@@ -934,27 +967,38 @@ void WebLocalFrameImpl::reloadImage(const WebNode& webNode)
}
}
-void WebLocalFrameImpl::loadRequest(const WebURLRequest& request)
+void WebLocalFrameImpl::loadRequest(const WebURLRequest& request, WebFrameLoadType webFrameLoadType,
+ const WebHistoryItem& item)
{
ASSERT(frame());
ASSERT(!request.isNull());
const ResourceRequest& resourceRequest = request.toResourceRequest();
- if (resourceRequest.url().protocolIs("javascript")) {
+ if (resourceRequest.url().protocolIs("javascript")
+ && webFrameLoadType == WebFrameLoadTypeStandard) {
loadJavaScriptURL(resourceRequest.url());
return;
}
- frame()->loader().load(FrameLoadRequest(0, resourceRequest));
+ FrameLoadRequest frameRequest = FrameLoadRequest(nullptr, resourceRequest);
+ if (webFrameLoadType == WebFrameLoadTypeReload
+ || webFrameLoadType == WebFrameLoadTypeReloadFromOrigin)
+ frameRequest = FrameLoader::frameRequestForReload(resourceRequest);
+
+ RefPtrWillBeRawPtr<HistoryItem> historyItem = PassRefPtrWillBeRawPtr<HistoryItem>(item);
+ frame()->loader().load(
+ frameRequest, static_cast<FrameLoadType>(webFrameLoadType), historyItem.get());
}
-void WebLocalFrameImpl::loadHistoryItem(const WebHistoryItem& item, WebHistoryLoadType loadType, WebURLRequest::CachePolicy cachePolicy)
+void WebLocalFrameImpl::loadHistoryItem(const WebHistoryItem& item, WebHistoryLoadType loadType,
+ WebURLRequest::CachePolicy cachePolicy)
{
- ASSERT(frame());
- RefPtrWillBeRawPtr<HistoryItem> historyItem = PassRefPtrWillBeRawPtr<HistoryItem>(item);
- ASSERT(historyItem);
- frame()->loader().loadHistoryItem(historyItem.get(), FrameLoadTypeBackForward,
- static_cast<HistoryLoadType>(loadType), static_cast<ResourceRequestCachePolicy>(cachePolicy));
+ // TODO(clamy): Remove this function once RenderFrame calls loadRequest for
+ // all requests.
+ WebURLRequest request = RequestFromHistoryItem(item, cachePolicy);
+ WebFrameLoadType frameLoadType = loadType == WebHistorySameDocumentLoad ?
+ WebFrameLoadTypeHistorySameDocument : WebFrameLoadTypeBackForward;
+ loadRequest(request, frameLoadType, item);
}
void WebLocalFrameImpl::loadData(const WebData& data, const WebString& mimeType, const WebString& textEncoding, const WebURL& baseURL, const WebURL& unreachableURL, bool replace)
@@ -1709,10 +1753,14 @@ PassRefPtrWillBeRawPtr<LocalFrame> WebLocalFrameImpl::createChildFrame(const Fra
if (isBackForwardLoadType(frame()->loader().loadType()) && !frame()->document()->loadEventFinished())
childItem = PassRefPtrWillBeRawPtr<HistoryItem>(webframeChild->client()->historyItemForNewChildFrame(webframeChild));
- if (childItem)
- child->loader().loadHistoryItem(childItem.get(), FrameLoadTypeInitialHistoryLoad);
- else
- child->loader().load(request);
+ FrameLoadRequest newRequest = request;
+ FrameLoadType loadType = FrameLoadTypeStandard;
+ if (childItem) {
+ newRequest = FrameLoadRequest(request.originDocument(),
+ FrameLoader::resourceRequestFromHistoryItem(childItem.get(), UseProtocolCachePolicy));
+ loadType = FrameLoadTypeInitialHistoryLoad;
+ }
+ child->loader().load(newRequest, loadType, childItem.get());
// Note a synchronous navigation (about:blank) would have already processed
// onload, so it is possible for the child frame to have already been

Powered by Google App Engine
This is Rietveld 408576698