summaryrefslogtreecommitdiff
path: root/chromium/content/renderer/render_frame_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/renderer/render_frame_impl.cc')
-rw-r--r--chromium/content/renderer/render_frame_impl.cc23
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(),