diff options
Diffstat (limited to 'chromium/content/renderer/render_frame_impl.cc')
-rw-r--r-- | chromium/content/renderer/render_frame_impl.cc | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/chromium/content/renderer/render_frame_impl.cc b/chromium/content/renderer/render_frame_impl.cc index f70bfda38ef..dcda7c548f4 100644 --- a/chromium/content/renderer/render_frame_impl.cc +++ b/chromium/content/renderer/render_frame_impl.cc @@ -490,7 +490,25 @@ WebURLRequest CreateURLRequestForNavigation( return request; } +NavigationDownloadPolicy GetDownloadPolicy( + bool is_opener_navigation, + const blink::WebURLRequest& request, + const WebSecurityOrigin& current_origin) { + if (!is_opener_navigation) + return NavigationDownloadPolicy::kAllow; + bool gesture = request.HasUserGesture(); + bool cross_origin = request.RequestorOrigin().CanAccess(current_origin); + if (!gesture && cross_origin) + return NavigationDownloadPolicy::kAllowOpenerCrossOriginNoGesture; + if (!gesture) + return NavigationDownloadPolicy::kAllowOpenerNoGesture; + if (cross_origin) + return NavigationDownloadPolicy::kAllowOpenerCrossOrigin; + return NavigationDownloadPolicy::kAllowOpener; +} + CommonNavigationParams MakeCommonNavigationParams( + const WebSecurityOrigin& current_origin, const blink::WebLocalFrameClient::NavigationPolicyInfo& info, int load_flags) { Referrer referrer( @@ -528,9 +546,8 @@ CommonNavigationParams MakeCommonNavigationParams( const RequestExtraData* extra_data = static_cast<RequestExtraData*>(info.url_request.GetExtraData()); DCHECK(extra_data); - NavigationDownloadPolicy download_policy = - info.is_opener_navigation ? NavigationDownloadPolicy::kAllowOpener - : NavigationDownloadPolicy::kAllow; + NavigationDownloadPolicy download_policy = GetDownloadPolicy( + info.is_opener_navigation, info.url_request, current_origin); return CommonNavigationParams( info.url_request.Url(), referrer, extra_data->transition_type(), navigation_type, download_policy, info.replaces_current_history_item, GURL(), GURL(), |