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

Side by Side 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 895 matching lines...) Expand 10 before | Expand all | Expand 10 after
906 if (!frame()->script().callFunction(function, receiver, argc, static_cast<v8 ::Local<v8::Value>*>(argv)).ToLocal(&result)) 906 if (!frame()->script().callFunction(function, receiver, argc, static_cast<v8 ::Local<v8::Value>*>(argv)).ToLocal(&result))
907 return v8::Local<v8::Value>(); 907 return v8::Local<v8::Value>();
908 return result; 908 return result;
909 } 909 }
910 910
911 v8::Local<v8::Context> WebLocalFrameImpl::mainWorldScriptContext() const 911 v8::Local<v8::Context> WebLocalFrameImpl::mainWorldScriptContext() const
912 { 912 {
913 return toV8Context(frame(), DOMWrapperWorld::mainWorld()); 913 return toV8Context(frame(), DOMWrapperWorld::mainWorld());
914 } 914 }
915 915
916 WebURLRequest WebLocalFrameImpl::RequestFromHistoryItem(const WebHistoryItem& it em,
917 WebURLRequest::CachePolicy cachePolicy) const
918 {
919 RefPtrWillBeRawPtr<HistoryItem> historyItem = PassRefPtrWillBeRawPtr<History Item>(item);
920 ResourceRequest request = FrameLoader::resourceRequestFromHistoryItem(
921 historyItem.get(), static_cast<ResourceRequestCachePolicy>(cachePolicy)) ;
922 return WrappedResourceRequest(request);
923 }
924
925 WebURLRequest WebLocalFrameImpl::RequestForReload(const WebHistoryItem& item,
926 WebFrameLoadType loadType, const WebURL& overrideUrl) const
927 {
928 ASSERT(frame());
929 RefPtrWillBeRawPtr<HistoryItem> historyItem = PassRefPtrWillBeRawPtr<History Item>(item);
930 ResourceRequest request = FrameLoader::resourceRequestForReload(
931 historyItem.get(), *frame(), static_cast<FrameLoadType>(loadType), overr ideUrl);
932 return WrappedResourceRequest(request);
933 }
934
935 WebHistoryItem WebLocalFrameImpl::CurrentItem() const
936 {
937 return WebHistoryItem(frame()->loader().currentItem());
938 }
939
916 void WebLocalFrameImpl::reload(bool ignoreCache) 940 void WebLocalFrameImpl::reload(bool ignoreCache)
917 { 941 {
918 ASSERT(frame()); 942 // TODO(clamy): Remove this function once RenderFrame calls loadRequest for
919 frame()->loader().reload(ignoreCache ? EndToEndReload : NormalReload); 943 // all requests.
944 reloadWithOverrideURL(KURL(), ignoreCache);
920 } 945 }
921 946
922 void WebLocalFrameImpl::reloadWithOverrideURL(const WebURL& overrideUrl, bool ig noreCache) 947 void WebLocalFrameImpl::reloadWithOverrideURL(const WebURL& overrideUrl, bool ig noreCache)
923 { 948 {
949 // TODO(clamy): Remove this function once RenderFrame calls loadRequest for
950 // all requests.
924 ASSERT(frame()); 951 ASSERT(frame());
925 frame()->loader().reload(ignoreCache ? EndToEndReload : NormalReload, overri deUrl); 952 WebFrameLoadType loadType = ignoreCache ?
953 WebFrameLoadTypeReloadFromOrigin : WebFrameLoadTypeReload;
954 WebHistoryItem item = CurrentItem();
955 if (item.isNull())
956 return;
957 WebURLRequest request = RequestForReload(item, loadType, overrideUrl);
958 loadRequest(request, loadType, WebHistoryItem());
926 } 959 }
927 960
928 void WebLocalFrameImpl::reloadImage(const WebNode& webNode) 961 void WebLocalFrameImpl::reloadImage(const WebNode& webNode)
929 { 962 {
930 const Node* node = webNode.constUnwrap<Node>(); 963 const Node* node = webNode.constUnwrap<Node>();
931 if (isHTMLImageElement(*node)) { 964 if (isHTMLImageElement(*node)) {
932 const HTMLImageElement& imageElement = toHTMLImageElement(*node); 965 const HTMLImageElement& imageElement = toHTMLImageElement(*node);
933 imageElement.forceReload(); 966 imageElement.forceReload();
934 } 967 }
935 } 968 }
936 969
937 void WebLocalFrameImpl::loadRequest(const WebURLRequest& request) 970 void WebLocalFrameImpl::loadRequest(const WebURLRequest& request, WebFrameLoadTy pe webFrameLoadType,
971 const WebHistoryItem& item)
938 { 972 {
939 ASSERT(frame()); 973 ASSERT(frame());
940 ASSERT(!request.isNull()); 974 ASSERT(!request.isNull());
941 const ResourceRequest& resourceRequest = request.toResourceRequest(); 975 const ResourceRequest& resourceRequest = request.toResourceRequest();
942 976
943 if (resourceRequest.url().protocolIs("javascript")) { 977 if (resourceRequest.url().protocolIs("javascript")
978 && webFrameLoadType == WebFrameLoadTypeStandard) {
944 loadJavaScriptURL(resourceRequest.url()); 979 loadJavaScriptURL(resourceRequest.url());
945 return; 980 return;
946 } 981 }
947 982
948 frame()->loader().load(FrameLoadRequest(0, resourceRequest)); 983 FrameLoadRequest frameRequest = FrameLoadRequest(nullptr, resourceRequest);
984 if (webFrameLoadType == WebFrameLoadTypeReload
985 || webFrameLoadType == WebFrameLoadTypeReloadFromOrigin)
986 frameRequest = FrameLoader::frameRequestForReload(resourceRequest);
987
988 RefPtrWillBeRawPtr<HistoryItem> historyItem = PassRefPtrWillBeRawPtr<History Item>(item);
989 frame()->loader().load(
990 frameRequest, static_cast<FrameLoadType>(webFrameLoadType), historyItem. get());
949 } 991 }
950 992
951 void WebLocalFrameImpl::loadHistoryItem(const WebHistoryItem& item, WebHistoryLo adType loadType, WebURLRequest::CachePolicy cachePolicy) 993 void WebLocalFrameImpl::loadHistoryItem(const WebHistoryItem& item, WebHistoryLo adType loadType,
994 WebURLRequest::CachePolicy cachePolicy)
952 { 995 {
953 ASSERT(frame()); 996 // TODO(clamy): Remove this function once RenderFrame calls loadRequest for
954 RefPtrWillBeRawPtr<HistoryItem> historyItem = PassRefPtrWillBeRawPtr<History Item>(item); 997 // all requests.
955 ASSERT(historyItem); 998 WebURLRequest request = RequestFromHistoryItem(item, cachePolicy);
956 frame()->loader().loadHistoryItem(historyItem.get(), FrameLoadTypeBackForwar d, 999 WebFrameLoadType frameLoadType = loadType == WebHistorySameDocumentLoad ?
957 static_cast<HistoryLoadType>(loadType), static_cast<ResourceRequestCache Policy>(cachePolicy)); 1000 WebFrameLoadTypeHistorySameDocument : WebFrameLoadTypeBackForward;
1001 loadRequest(request, frameLoadType, item);
958 } 1002 }
959 1003
960 void WebLocalFrameImpl::loadData(const WebData& data, const WebString& mimeType, const WebString& textEncoding, const WebURL& baseURL, const WebURL& unreachable URL, bool replace) 1004 void WebLocalFrameImpl::loadData(const WebData& data, const WebString& mimeType, const WebString& textEncoding, const WebURL& baseURL, const WebURL& unreachable URL, bool replace)
961 { 1005 {
962 ASSERT(frame()); 1006 ASSERT(frame());
963 1007
964 // If we are loading substitute data to replace an existing load, then 1008 // If we are loading substitute data to replace an existing load, then
965 // inherit all of the properties of that original request. This way, 1009 // inherit all of the properties of that original request. This way,
966 // reload will re-attempt the original request. It is essential that 1010 // reload will re-attempt the original request. It is essential that
967 // we only do this when there is an unreachableURL since a non-empty 1011 // we only do this when there is an unreachableURL since a non-empty
(...skipping 734 matching lines...) Expand 10 before | Expand all | Expand 10 after
1702 // it may dispatch a load event in the parent. 1746 // it may dispatch a load event in the parent.
1703 if (!child->tree().parent()) 1747 if (!child->tree().parent())
1704 return nullptr; 1748 return nullptr;
1705 1749
1706 // If we're moving in the back/forward list, we might want to replace the co ntent 1750 // If we're moving in the back/forward list, we might want to replace the co ntent
1707 // of this child frame with whatever was there at that point. 1751 // of this child frame with whatever was there at that point.
1708 RefPtrWillBeRawPtr<HistoryItem> childItem = nullptr; 1752 RefPtrWillBeRawPtr<HistoryItem> childItem = nullptr;
1709 if (isBackForwardLoadType(frame()->loader().loadType()) && !frame()->documen t()->loadEventFinished()) 1753 if (isBackForwardLoadType(frame()->loader().loadType()) && !frame()->documen t()->loadEventFinished())
1710 childItem = PassRefPtrWillBeRawPtr<HistoryItem>(webframeChild->client()- >historyItemForNewChildFrame(webframeChild)); 1754 childItem = PassRefPtrWillBeRawPtr<HistoryItem>(webframeChild->client()- >historyItemForNewChildFrame(webframeChild));
1711 1755
1712 if (childItem) 1756 FrameLoadRequest newRequest = request;
1713 child->loader().loadHistoryItem(childItem.get(), FrameLoadTypeInitialHis toryLoad); 1757 FrameLoadType loadType = FrameLoadTypeStandard;
1714 else 1758 if (childItem) {
1715 child->loader().load(request); 1759 newRequest = FrameLoadRequest(request.originDocument(),
1760 FrameLoader::resourceRequestFromHistoryItem(childItem.get(), UseProt ocolCachePolicy));
1761 loadType = FrameLoadTypeInitialHistoryLoad;
1762 }
1763 child->loader().load(newRequest, loadType, childItem.get());
1716 1764
1717 // Note a synchronous navigation (about:blank) would have already processed 1765 // Note a synchronous navigation (about:blank) would have already processed
1718 // onload, so it is possible for the child frame to have already been 1766 // onload, so it is possible for the child frame to have already been
1719 // detached by script in the page. 1767 // detached by script in the page.
1720 if (!child->tree().parent()) 1768 if (!child->tree().parent())
1721 return nullptr; 1769 return nullptr;
1722 return child; 1770 return child;
1723 } 1771 }
1724 1772
1725 void WebLocalFrameImpl::didChangeContentsSize(const IntSize& size) 1773 void WebLocalFrameImpl::didChangeContentsSize(const IntSize& size)
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
2088 { 2136 {
2089 m_frameWidget = frameWidget; 2137 m_frameWidget = frameWidget;
2090 } 2138 }
2091 2139
2092 WebFrameWidgetImpl* WebLocalFrameImpl::frameWidget() const 2140 WebFrameWidgetImpl* WebLocalFrameImpl::frameWidget() const
2093 { 2141 {
2094 return m_frameWidget; 2142 return m_frameWidget;
2095 } 2143 }
2096 2144
2097 } // namespace blink 2145 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698