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

Side by Side Diff: content/renderer/render_view_impl.cc

Issue 8774050: Pass along the referrer policy (renderer side) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updates Created 9 years 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 | Annotate | Revision Log
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | webkit/glue/context_menu.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/render_view_impl.h" 5 #include "content/renderer/render_view_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerAction. h" 107 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerAction. h"
108 #include "third_party/WebKit/Source/WebKit/chromium/public/WebNodeList.h" 108 #include "third_party/WebKit/Source/WebKit/chromium/public/WebNodeList.h"
109 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPageSerializer.h" 109 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPageSerializer.h"
110 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h" 110 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPlugin.h"
111 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" 111 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h"
112 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginDocument.h" 112 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginDocument.h"
113 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginParams.h" 113 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginParams.h"
114 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPoint.h" 114 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPoint.h"
115 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRange.h" 115 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRange.h"
116 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" 116 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h"
117 #include "third_party/WebKit/Source/WebKit/chromium/public/WebReferrerPolicy.h"
117 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptSource.h" 118 #include "third_party/WebKit/Source/WebKit/chromium/public/WebScriptSource.h"
118 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSearchableFormData .h" 119 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSearchableFormData .h"
119 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" 120 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h"
120 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityPolicy.h" 121 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityPolicy.h"
121 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSettings.h" 122 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSettings.h"
122 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h" 123 #include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h"
123 #include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageNamespace.h " 124 #include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageNamespace.h "
124 #include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageQuotaCallba cks.h" 125 #include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageQuotaCallba cks.h"
125 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" 126 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h"
126 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h" 127 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURL.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
207 using WebKit::WebPageSerializer; 208 using WebKit::WebPageSerializer;
208 using WebKit::WebPageSerializerClient; 209 using WebKit::WebPageSerializerClient;
209 using WebKit::WebPlugin; 210 using WebKit::WebPlugin;
210 using WebKit::WebPluginContainer; 211 using WebKit::WebPluginContainer;
211 using WebKit::WebPluginDocument; 212 using WebKit::WebPluginDocument;
212 using WebKit::WebPluginParams; 213 using WebKit::WebPluginParams;
213 using WebKit::WebPoint; 214 using WebKit::WebPoint;
214 using WebKit::WebPopupMenuInfo; 215 using WebKit::WebPopupMenuInfo;
215 using WebKit::WebRange; 216 using WebKit::WebRange;
216 using WebKit::WebRect; 217 using WebKit::WebRect;
218 using WebKit::WebReferrerPolicy;
217 using WebKit::WebScriptSource; 219 using WebKit::WebScriptSource;
218 using WebKit::WebSearchableFormData; 220 using WebKit::WebSearchableFormData;
219 using WebKit::WebSecurityOrigin; 221 using WebKit::WebSecurityOrigin;
220 using WebKit::WebSecurityPolicy; 222 using WebKit::WebSecurityPolicy;
221 using WebKit::WebSettings; 223 using WebKit::WebSettings;
222 using WebKit::WebSharedWorker; 224 using WebKit::WebSharedWorker;
223 using WebKit::WebSize; 225 using WebKit::WebSize;
224 using WebKit::WebStorageNamespace; 226 using WebKit::WebStorageNamespace;
225 using WebKit::WebStorageQuotaCallbacks; 227 using WebKit::WebStorageQuotaCallbacks;
226 using WebKit::WebStorageQuotaError; 228 using WebKit::WebStorageQuotaError;
(...skipping 13 matching lines...) Expand all
240 using WebKit::WebWorker; 242 using WebKit::WebWorker;
241 using WebKit::WebWorkerClient; 243 using WebKit::WebWorkerClient;
242 using appcache::WebApplicationCacheHostImpl; 244 using appcache::WebApplicationCacheHostImpl;
243 using base::Time; 245 using base::Time;
244 using base::TimeDelta; 246 using base::TimeDelta;
245 using content::DocumentState; 247 using content::DocumentState;
246 using content::NavigationState; 248 using content::NavigationState;
247 using content::RenderThread; 249 using content::RenderThread;
248 using content::RenderViewObserver; 250 using content::RenderViewObserver;
249 using content::RenderViewVisitor; 251 using content::RenderViewVisitor;
252 using content::Referrer;
250 using content::V8ValueConverter; 253 using content::V8ValueConverter;
251 using webkit_glue::AltErrorPageResourceFetcher; 254 using webkit_glue::AltErrorPageResourceFetcher;
252 using webkit_glue::FormField; 255 using webkit_glue::FormField;
253 using webkit_glue::PasswordForm; 256 using webkit_glue::PasswordForm;
254 using webkit_glue::PasswordFormDomManager; 257 using webkit_glue::PasswordFormDomManager;
255 using webkit_glue::ResourceFetcher; 258 using webkit_glue::ResourceFetcher;
256 259
257 //----------------------------------------------------------------------------- 260 //-----------------------------------------------------------------------------
258 261
259 typedef std::map<WebKit::WebView*, RenderViewImpl*> ViewMap; 262 typedef std::map<WebKit::WebView*, RenderViewImpl*> ViewMap;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 document_state->set_alt_error_page_fetcher(NULL); 303 document_state->set_alt_error_page_fetcher(NULL);
301 } 304 }
302 } 305 }
303 306
304 static bool IsReload(const ViewMsg_Navigate_Params& params) { 307 static bool IsReload(const ViewMsg_Navigate_Params& params) {
305 return 308 return
306 params.navigation_type == ViewMsg_Navigate_Type::RELOAD || 309 params.navigation_type == ViewMsg_Navigate_Type::RELOAD ||
307 params.navigation_type == ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE; 310 params.navigation_type == ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE;
308 } 311 }
309 312
313 static WebReferrerPolicy getReferrerPolicyFromRequest(
314 const WebURLRequest& request) {
315 return request.extraData() ?
316 static_cast<RequestExtraData*>(request.extraData())->referrer_policy() :
317 WebKit::WebReferrerPolicyDefault;
318 }
319
310 /////////////////////////////////////////////////////////////////////////////// 320 ///////////////////////////////////////////////////////////////////////////////
311 321
312 int32 RenderViewImpl::next_page_id_ = 1; 322 int32 RenderViewImpl::next_page_id_ = 1;
313 323
314 struct RenderViewImpl::PendingFileChooser { 324 struct RenderViewImpl::PendingFileChooser {
315 PendingFileChooser(const content::FileChooserParams& p, 325 PendingFileChooser(const content::FileChooserParams& p,
316 WebFileChooserCompletion* c) 326 WebFileChooserCompletion* c)
317 : params(p), 327 : params(p),
318 completion(c) { 328 completion(c) {
319 } 329 }
(...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 } else { 812 } else {
803 // Navigate to the given URL. 813 // Navigate to the given URL.
804 WebURLRequest request(params.url); 814 WebURLRequest request(params.url);
805 815
806 // A session history navigation should have been accompanied by state. 816 // A session history navigation should have been accompanied by state.
807 DCHECK_EQ(params.page_id, -1); 817 DCHECK_EQ(params.page_id, -1);
808 818
809 if (main_frame->isViewSourceModeEnabled()) 819 if (main_frame->isViewSourceModeEnabled())
810 request.setCachePolicy(WebURLRequest::ReturnCacheDataElseLoad); 820 request.setCachePolicy(WebURLRequest::ReturnCacheDataElseLoad);
811 821
812 if (params.referrer.is_valid()) { 822 if (params.referrer.url.is_valid()) {
813 if (!WebSecurityPolicy::shouldHideReferrer( 823 WebString referrer = WebSecurityPolicy::generateReferrerHeader(
814 params.url, 824 params.referrer.policy,
815 WebString::fromUTF8(params.referrer.spec()))) { 825 params.url,
816 request.setHTTPHeaderField(WebString::fromUTF8("Referer"), 826 WebString::fromUTF8(params.referrer.url.spec()));
817 WebString::fromUTF8(params.referrer.spec())); 827 if (!referrer.isEmpty())
818 } 828 request.setHTTPHeaderField(WebString::fromUTF8("Referer"), referrer);
819 } 829 }
820 830
821 if (!params.extra_headers.empty()) { 831 if (!params.extra_headers.empty()) {
822 for (net::HttpUtil::HeadersIterator i(params.extra_headers.begin(), 832 for (net::HttpUtil::HeadersIterator i(params.extra_headers.begin(),
823 params.extra_headers.end(), "\n"); 833 params.extra_headers.end(), "\n");
824 i.GetNext(); ) { 834 i.GetNext(); ) {
825 request.addHTTPHeaderField(WebString::fromUTF8(i.name()), 835 request.addHTTPHeaderField(WebString::fromUTF8(i.name()),
826 WebString::fromUTF8(i.values())); 836 WebString::fromUTF8(i.values()));
827 } 837 }
828 } 838 }
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
1174 // MANUAL_SUBFRAME, it will be that same transition type here. 1184 // MANUAL_SUBFRAME, it will be that same transition type here.
1175 // We don't want that, because any navigation that changes the toplevel 1185 // We don't want that, because any navigation that changes the toplevel
1176 // frame should be tracked as a toplevel navigation (this allows us to 1186 // frame should be tracked as a toplevel navigation (this allows us to
1177 // update the URL bar, etc). 1187 // update the URL bar, etc).
1178 params.transition = content::PAGE_TRANSITION_LINK; 1188 params.transition = content::PAGE_TRANSITION_LINK;
1179 } 1189 }
1180 1190
1181 // If we have a valid consumed client redirect source, 1191 // If we have a valid consumed client redirect source,
1182 // the page contained a client redirect (meta refresh, document.loc...), 1192 // the page contained a client redirect (meta refresh, document.loc...),
1183 // so we set the referrer and transition to match. 1193 // so we set the referrer and transition to match.
1184 if (completed_client_redirect_src_.is_valid()) { 1194 if (completed_client_redirect_src_.url.is_valid()) {
1185 DCHECK(completed_client_redirect_src_ == params.redirects[0]); 1195 DCHECK(completed_client_redirect_src_.url == params.redirects[0]);
1186 params.referrer = completed_client_redirect_src_; 1196 params.referrer = completed_client_redirect_src_;
1187 params.transition = static_cast<content::PageTransition>( 1197 params.transition = static_cast<content::PageTransition>(
1188 params.transition | content::PAGE_TRANSITION_CLIENT_REDIRECT); 1198 params.transition | content::PAGE_TRANSITION_CLIENT_REDIRECT);
1189 } else { 1199 } else {
1190 // Bug 654101: the referrer will be empty on https->http transitions. It 1200 // Bug 654101: the referrer will be empty on https->http transitions. It
1191 // would be nice if we could get the real referrer from somewhere. 1201 // would be nice if we could get the real referrer from somewhere.
1192 params.referrer = GURL( 1202 params.referrer = Referrer(GURL(
1193 original_request.httpHeaderField(WebString::fromUTF8("Referer"))); 1203 original_request.httpHeaderField(WebString::fromUTF8("Referer"))),
1204 getReferrerPolicyFromRequest(original_request));
1194 } 1205 }
1195 1206
1196 string16 method = request.httpMethod(); 1207 string16 method = request.httpMethod();
1197 if (EqualsASCII(method, "POST")) 1208 if (EqualsASCII(method, "POST"))
1198 params.is_post = true; 1209 params.is_post = true;
1199 1210
1200 // Save some histogram data so we can compute the average memory used per 1211 // Save some histogram data so we can compute the average memory used per
1201 // page load of the glyphs. 1212 // page load of the glyphs.
1202 UMA_HISTOGRAM_COUNTS_10000("Memory.GlyphPagesPerLoad", 1213 UMA_HISTOGRAM_COUNTS_10000("Memory.GlyphPagesPerLoad",
1203 webkit_glue::GetGlyphPageCount()); 1214 webkit_glue::GetGlyphPageCount());
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1268 webview()->mainFrame()->previousHistoryItem(); 1279 webview()->mainFrame()->previousHistoryItem();
1269 if (item.isNull()) 1280 if (item.isNull())
1270 return; 1281 return;
1271 1282
1272 Send(new ViewHostMsg_UpdateState( 1283 Send(new ViewHostMsg_UpdateState(
1273 routing_id_, page_id_, webkit_glue::HistoryItemToString(item))); 1284 routing_id_, page_id_, webkit_glue::HistoryItemToString(item)));
1274 } 1285 }
1275 1286
1276 void RenderViewImpl::OpenURL(WebFrame* frame, 1287 void RenderViewImpl::OpenURL(WebFrame* frame,
1277 const GURL& url, 1288 const GURL& url,
1278 const GURL& referrer, 1289 const Referrer& referrer,
1279 WebNavigationPolicy policy) { 1290 WebNavigationPolicy policy) {
1280 Send(new ViewHostMsg_OpenURL( 1291 Send(new ViewHostMsg_OpenURL(
1281 routing_id_, 1292 routing_id_,
1282 url, 1293 url,
1283 referrer, 1294 referrer,
1284 NavigationPolicyToDisposition(policy), 1295 NavigationPolicyToDisposition(policy),
1285 frame->identifier())); 1296 frame->identifier()));
1286 } 1297 }
1287 1298
1288 // WebViewDelegate ------------------------------------------------------------ 1299 // WebViewDelegate ------------------------------------------------------------
(...skipping 723 matching lines...) Expand 10 before | Expand all | Expand 10 after
2012 2023
2013 void RenderViewImpl::loadURLExternally( 2024 void RenderViewImpl::loadURLExternally(
2014 WebFrame* frame, const WebURLRequest& request, 2025 WebFrame* frame, const WebURLRequest& request,
2015 WebNavigationPolicy policy, 2026 WebNavigationPolicy policy,
2016 const WebString& suggested_name) { 2027 const WebString& suggested_name) {
2017 GURL referrer(request.httpHeaderField(WebString::fromUTF8("Referer"))); 2028 GURL referrer(request.httpHeaderField(WebString::fromUTF8("Referer")));
2018 if (policy == WebKit::WebNavigationPolicyDownload) { 2029 if (policy == WebKit::WebNavigationPolicyDownload) {
2019 Send(new ViewHostMsg_DownloadUrl(routing_id_, request.url(), referrer, 2030 Send(new ViewHostMsg_DownloadUrl(routing_id_, request.url(), referrer,
2020 suggested_name)); 2031 suggested_name));
2021 } else { 2032 } else {
2022 OpenURL(frame, request.url(), referrer, policy); 2033 OpenURL(frame, request.url(),
2034 Referrer(referrer, getReferrerPolicyFromRequest(request)), policy);
2023 } 2035 }
2024 } 2036 }
2025 2037
2026 WebNavigationPolicy RenderViewImpl::decidePolicyForNavigation( 2038 WebNavigationPolicy RenderViewImpl::decidePolicyForNavigation(
2027 WebFrame* frame, const WebURLRequest& request, WebNavigationType type, 2039 WebFrame* frame, const WebURLRequest& request, WebNavigationType type,
2028 const WebNode&, WebNavigationPolicy default_policy, bool is_redirect) { 2040 const WebNode&, WebNavigationPolicy default_policy, bool is_redirect) {
2029 // TODO(creis): Remove this when we fix OnSwapOut to not need a navigation. 2041 // TODO(creis): Remove this when we fix OnSwapOut to not need a navigation.
2030 if (is_swapped_out_) { 2042 if (is_swapped_out_) {
2031 DCHECK(request.url() == GURL("about:swappedout")); 2043 DCHECK(request.url() == GURL("about:swappedout"));
2032 return default_policy; 2044 return default_policy;
(...skipping 16 matching lines...) Expand all
2049 // boundaries. This is currently expected to break some script calls and 2061 // boundaries. This is currently expected to break some script calls and
2050 // navigations, such as form submissions. 2062 // navigations, such as form submissions.
2051 const CommandLine& command_line = *CommandLine::ForCurrentProcess(); 2063 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
2052 if (command_line.HasSwitch(switches::kEnableStrictSiteIsolation) && 2064 if (command_line.HasSwitch(switches::kEnableStrictSiteIsolation) &&
2053 !frame->parent() && (is_content_initiated || is_redirect)) { 2065 !frame->parent() && (is_content_initiated || is_redirect)) {
2054 WebString origin_str = frame->document().securityOrigin().toString(); 2066 WebString origin_str = frame->document().securityOrigin().toString();
2055 GURL frame_url(origin_str.utf8().data()); 2067 GURL frame_url(origin_str.utf8().data());
2056 // TODO(cevans): revisit whether this origin check is still necessary once 2068 // TODO(cevans): revisit whether this origin check is still necessary once
2057 // crbug.com/101395 is fixed. 2069 // crbug.com/101395 is fixed.
2058 if (frame_url.GetOrigin() != url.GetOrigin()) { 2070 if (frame_url.GetOrigin() != url.GetOrigin()) {
2059 GURL referrer(request.httpHeaderField(WebString::fromUTF8("Referer"))); 2071 Referrer referrer(
2072 GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))),
2073 getReferrerPolicyFromRequest(request));
2060 OpenURL(frame, url, referrer, default_policy); 2074 OpenURL(frame, url, referrer, default_policy);
2061 return WebKit::WebNavigationPolicyIgnore; 2075 return WebKit::WebNavigationPolicyIgnore;
2062 } 2076 }
2063 } 2077 }
2064 2078
2065 // If the browser is interested, then give it a chance to look at top level 2079 // If the browser is interested, then give it a chance to look at top level
2066 // navigations. 2080 // navigations.
2067 if (is_content_initiated && 2081 if (is_content_initiated &&
2068 renderer_preferences_.browser_handles_top_level_requests && 2082 renderer_preferences_.browser_handles_top_level_requests &&
2069 IsNonLocalTopLevelNavigation(url, frame, type)) { 2083 IsNonLocalTopLevelNavigation(url, frame, type)) {
2070 GURL referrer(request.httpHeaderField(WebString::fromUTF8("Referer"))); 2084 Referrer referrer(
2085 GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))),
2086 getReferrerPolicyFromRequest(request));
2071 // Reset these counters as the RenderView could be reused for the next 2087 // Reset these counters as the RenderView could be reused for the next
2072 // navigation. 2088 // navigation.
2073 page_id_ = -1; 2089 page_id_ = -1;
2074 last_page_id_sent_to_browser_ = -1; 2090 last_page_id_sent_to_browser_ = -1;
2075 OpenURL(frame, url, referrer, default_policy); 2091 OpenURL(frame, url, referrer, default_policy);
2076 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. 2092 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here.
2077 } 2093 }
2078 2094
2079 // Detect when we're crossing a permission-based boundary (e.g. into or out of 2095 // Detect when we're crossing a permission-based boundary (e.g. into or out of
2080 // an extension or app origin, leaving a WebUI page, etc). We only care about 2096 // an extension or app origin, leaving a WebUI page, etc). We only care about
(...skipping 27 matching lines...) Expand all
2108 2124
2109 if (!should_fork) { 2125 if (!should_fork) {
2110 // Give the embedder a chance. 2126 // Give the embedder a chance.
2111 bool is_initial_navigation = page_id_ == -1; 2127 bool is_initial_navigation = page_id_ == -1;
2112 should_fork = content::GetContentClient()->renderer()->ShouldFork( 2128 should_fork = content::GetContentClient()->renderer()->ShouldFork(
2113 frame, url, is_content_initiated, is_initial_navigation, 2129 frame, url, is_content_initiated, is_initial_navigation,
2114 &send_referrer); 2130 &send_referrer);
2115 } 2131 }
2116 2132
2117 if (should_fork) { 2133 if (should_fork) {
2118 GURL referrer(request.httpHeaderField(WebString::fromUTF8("Referer"))); 2134 Referrer referrer(
2119 OpenURL(frame, url, send_referrer ? referrer : GURL(), default_policy); 2135 GURL(request.httpHeaderField(WebString::fromUTF8("Referer"))),
2136 getReferrerPolicyFromRequest(request));
2137 OpenURL(
2138 frame, url, send_referrer ? referrer : Referrer(), default_policy);
2120 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here. 2139 return WebKit::WebNavigationPolicyIgnore; // Suppress the load here.
2121 } 2140 }
2122 } 2141 }
2123 2142
2124 // Use the frame's original request's URL rather than the document's URL for 2143 // Use the frame's original request's URL rather than the document's URL for
2125 // this check. For a popup, the document's URL may become the opener window's 2144 // this check. For a popup, the document's URL may become the opener window's
2126 // URL if the opener has called document.write. See http://crbug.com/93517. 2145 // URL if the opener has called document.write. See http://crbug.com/93517.
2127 GURL old_url(frame->dataSource()->request().url()); 2146 GURL old_url(frame->dataSource()->request().url());
2128 2147
2129 // Detect when a page is "forking" a new tab that can be safely rendered in 2148 // Detect when a page is "forking" a new tab that can be safely rendered in
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
2179 frame->name().isNull() && 2198 frame->name().isNull() &&
2180 // Another frame (with a non-empty creator) should have initiated the 2199 // Another frame (with a non-empty creator) should have initiated the
2181 // request, targeted at this frame. 2200 // request, targeted at this frame.
2182 !creator_url_.is_empty() && 2201 !creator_url_.is_empty() &&
2183 is_content_initiated && 2202 is_content_initiated &&
2184 default_policy == WebKit::WebNavigationPolicyCurrentTab && 2203 default_policy == WebKit::WebNavigationPolicyCurrentTab &&
2185 type == WebKit::WebNavigationTypeOther; 2204 type == WebKit::WebNavigationTypeOther;
2186 2205
2187 if (is_fork || is_noreferrer_and_blank_target) { 2206 if (is_fork || is_noreferrer_and_blank_target) {
2188 // Open the URL via the browser, not via WebKit. 2207 // Open the URL via the browser, not via WebKit.
2189 OpenURL(frame, url, GURL(), default_policy); 2208 OpenURL(frame, url, Referrer(), default_policy);
2190 return WebKit::WebNavigationPolicyIgnore; 2209 return WebKit::WebNavigationPolicyIgnore;
2191 } 2210 }
2192 2211
2193 return default_policy; 2212 return default_policy;
2194 } 2213 }
2195 2214
2196 bool RenderViewImpl::canHandleRequest( 2215 bool RenderViewImpl::canHandleRequest(
2197 WebFrame* frame, const WebURLRequest& request) { 2216 WebFrame* frame, const WebURLRequest& request) {
2198 // We allow WebKit to think that everything can be handled even though 2217 // We allow WebKit to think that everything can be handled even though
2199 // browser-side we limit what we load. 2218 // browser-side we limit what we load.
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
2277 WillPerformClientRedirect(frame, from, to, interval, fire_time)); 2296 WillPerformClientRedirect(frame, from, to, interval, fire_time));
2278 } 2297 }
2279 2298
2280 void RenderViewImpl::didCancelClientRedirect(WebFrame* frame) { 2299 void RenderViewImpl::didCancelClientRedirect(WebFrame* frame) {
2281 FOR_EACH_OBSERVER( 2300 FOR_EACH_OBSERVER(
2282 RenderViewObserver, observers_, DidCancelClientRedirect(frame)); 2301 RenderViewObserver, observers_, DidCancelClientRedirect(frame));
2283 } 2302 }
2284 2303
2285 void RenderViewImpl::didCompleteClientRedirect( 2304 void RenderViewImpl::didCompleteClientRedirect(
2286 WebFrame* frame, const WebURL& from) { 2305 WebFrame* frame, const WebURL& from) {
2287 if (!frame->parent()) 2306 if (!frame->parent()) {
2288 completed_client_redirect_src_ = from; 2307 WebDataSource* ds = frame->provisionalDataSource();
2308 // If there's no provisional data source, it's a reference fragment
2309 // navigation.
2310 completed_client_redirect_src_ = Referrer(
2311 from, ds ? getReferrerPolicyFromRequest(ds->request()) :
darin (slow to review) 2011/12/02 22:22:40 if the provisionalDataSource is null, then you sho
jochen (gone - plz use gerrit) 2011/12/02 22:24:39 Since it's an in-page navigation, we can use frame
2312 WebKit::WebReferrerPolicyDefault);
2313 }
2289 FOR_EACH_OBSERVER( 2314 FOR_EACH_OBSERVER(
2290 RenderViewObserver, observers_, DidCompleteClientRedirect(frame, from)); 2315 RenderViewObserver, observers_, DidCompleteClientRedirect(frame, from));
2291 } 2316 }
2292 2317
2293 void RenderViewImpl::didCreateDataSource(WebFrame* frame, WebDataSource* ds) { 2318 void RenderViewImpl::didCreateDataSource(WebFrame* frame, WebDataSource* ds) {
2294 DocumentState* document_state = DocumentState::FromDataSource(ds); 2319 DocumentState* document_state = DocumentState::FromDataSource(ds);
2295 if (!document_state) { 2320 if (!document_state) {
2296 document_state = new DocumentState; 2321 document_state = new DocumentState;
2297 ds->setExtraData(document_state); 2322 ds->setExtraData(document_state);
2298 } 2323 }
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
2408 2433
2409 // Start time is only set after request time. 2434 // Start time is only set after request time.
2410 document_state->set_start_load_time(Time::Now()); 2435 document_state->set_start_load_time(Time::Now());
2411 2436
2412 bool is_top_most = !frame->parent(); 2437 bool is_top_most = !frame->parent();
2413 if (is_top_most) { 2438 if (is_top_most) {
2414 navigation_gesture_ = frame->isProcessingUserGesture() ? 2439 navigation_gesture_ = frame->isProcessingUserGesture() ?
2415 NavigationGestureUser : NavigationGestureAuto; 2440 NavigationGestureUser : NavigationGestureAuto;
2416 2441
2417 // Make sure redirect tracking state is clear for the new load. 2442 // Make sure redirect tracking state is clear for the new load.
2418 completed_client_redirect_src_ = GURL(); 2443 completed_client_redirect_src_ = Referrer();
2419 } else if (frame->parent()->isLoading()) { 2444 } else if (frame->parent()->isLoading()) {
2420 // Take note of AUTO_SUBFRAME loads here, so that we can know how to 2445 // Take note of AUTO_SUBFRAME loads here, so that we can know how to
2421 // load an error page. See didFailProvisionalLoad. 2446 // load an error page. See didFailProvisionalLoad.
2422 document_state->navigation_state()->set_transition_type( 2447 document_state->navigation_state()->set_transition_type(
2423 content::PAGE_TRANSITION_AUTO_SUBFRAME); 2448 content::PAGE_TRANSITION_AUTO_SUBFRAME);
2424 } 2449 }
2425 2450
2426 FOR_EACH_OBSERVER( 2451 FOR_EACH_OBSERVER(
2427 RenderViewObserver, observers_, DidStartProvisionalLoad(frame)); 2452 RenderViewObserver, observers_, DidStartProvisionalLoad(frame));
2428 2453
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
2598 // the session history again. We do this regardless of whether this is 2623 // the session history again. We do this regardless of whether this is
2599 // a session history navigation, because if we attempted a session history 2624 // a session history navigation, because if we attempted a session history
2600 // navigation without valid HistoryItem state, WebCore will think it is a 2625 // navigation without valid HistoryItem state, WebCore will think it is a
2601 // new navigation. 2626 // new navigation.
2602 navigation_state->set_request_committed(true); 2627 navigation_state->set_request_committed(true);
2603 2628
2604 UpdateURL(frame); 2629 UpdateURL(frame);
2605 2630
2606 // If this committed load was initiated by a client redirect, we're 2631 // If this committed load was initiated by a client redirect, we're
2607 // at the last stop now, so clear it. 2632 // at the last stop now, so clear it.
2608 completed_client_redirect_src_ = GURL(); 2633 completed_client_redirect_src_ = Referrer();
2609 2634
2610 // Check whether we have new encoding name. 2635 // Check whether we have new encoding name.
2611 UpdateEncoding(frame, frame->view()->pageEncoding().utf8()); 2636 UpdateEncoding(frame, frame->view()->pageEncoding().utf8());
2612 } 2637 }
2613 2638
2614 void RenderViewImpl::didClearWindowObject(WebFrame* frame) { 2639 void RenderViewImpl::didClearWindowObject(WebFrame* frame) {
2615 FOR_EACH_OBSERVER(RenderViewObserver, observers_, 2640 FOR_EACH_OBSERVER(RenderViewObserver, observers_,
2616 DidClearWindowObject(frame)); 2641 DidClearWindowObject(frame));
2617 2642
2618 GURL frame_url = frame->document().url(); 2643 GURL frame_url = frame->document().url();
(...skipping 1348 matching lines...) Expand 10 before | Expand all | Expand 10 after
3967 void RenderViewImpl::OnGetAllSavableResourceLinksForCurrentPage( 3992 void RenderViewImpl::OnGetAllSavableResourceLinksForCurrentPage(
3968 const GURL& page_url) { 3993 const GURL& page_url) {
3969 // Prepare list to storage all savable resource links. 3994 // Prepare list to storage all savable resource links.
3970 std::vector<GURL> resources_list; 3995 std::vector<GURL> resources_list;
3971 std::vector<GURL> referrers_list; 3996 std::vector<GURL> referrers_list;
3972 std::vector<GURL> frames_list; 3997 std::vector<GURL> frames_list;
3973 webkit_glue::SavableResourcesResult result(&resources_list, 3998 webkit_glue::SavableResourcesResult result(&resources_list,
3974 &referrers_list, 3999 &referrers_list,
3975 &frames_list); 4000 &frames_list);
3976 4001
4002 // FIXME(rdsmith): When GetAllSavableResourceLinksForCurrentPage starts to
4003 // return referrers, it should also return the referrer policies.
3977 if (!webkit_glue::GetAllSavableResourceLinksForCurrentPage( 4004 if (!webkit_glue::GetAllSavableResourceLinksForCurrentPage(
3978 webview(), 4005 webview(),
3979 page_url, 4006 page_url,
3980 &result, 4007 &result,
3981 chrome::GetSavableSchemes())) { 4008 chrome::GetSavableSchemes())) {
3982 // If something is wrong when collecting all savable resource links, 4009 // If something is wrong when collecting all savable resource links,
3983 // send empty list to embedder(browser) to tell it failed. 4010 // send empty list to embedder(browser) to tell it failed.
3984 referrers_list.clear(); 4011 referrers_list.clear();
3985 resources_list.clear(); 4012 resources_list.clear();
3986 frames_list.clear(); 4013 frames_list.clear();
(...skipping 868 matching lines...) Expand 10 before | Expand all | Expand 10 after
4855 return !!RenderThreadImpl::current()->compositor_thread(); 4882 return !!RenderThreadImpl::current()->compositor_thread();
4856 } 4883 }
4857 4884
4858 void RenderViewImpl::OnJavaBridgeInit( 4885 void RenderViewImpl::OnJavaBridgeInit(
4859 const IPC::ChannelHandle& channel_handle) { 4886 const IPC::ChannelHandle& channel_handle) {
4860 DCHECK(!java_bridge_dispatcher_.get()); 4887 DCHECK(!java_bridge_dispatcher_.get());
4861 #if defined(ENABLE_JAVA_BRIDGE) 4888 #if defined(ENABLE_JAVA_BRIDGE)
4862 java_bridge_dispatcher_.reset(new JavaBridgeDispatcher(this, channel_handle)); 4889 java_bridge_dispatcher_.reset(new JavaBridgeDispatcher(this, channel_handle));
4863 #endif 4890 #endif
4864 } 4891 }
OLDNEW
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | webkit/glue/context_menu.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698