diff options
Diffstat (limited to 'chromium/content/browser/download/download_resource_handler.cc')
-rw-r--r-- | chromium/content/browser/download/download_resource_handler.cc | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/chromium/content/browser/download/download_resource_handler.cc b/chromium/content/browser/download/download_resource_handler.cc index 7863fc30a69..54323eebcda 100644 --- a/chromium/content/browser/download/download_resource_handler.cc +++ b/chromium/content/browser/download/download_resource_handler.cc @@ -205,17 +205,20 @@ void DownloadResourceHandler::OnRequestRedirected( url::Origin new_origin(url::Origin::Create(redirect_info.new_url)); if (!follow_cross_origin_redirects_ && !first_origin_.IsSameOriginWith(new_origin)) { - base::PostTaskWithTraits( - FROM_HERE, {BrowserThread::UI}, - base::BindOnce( - &NavigateOnUIThread, redirect_info.new_url, request()->url_chain(), - Referrer(GURL(redirect_info.new_referrer), - Referrer::NetReferrerPolicyToBlinkReferrerPolicy( - redirect_info.new_referrer_policy)), - GetRequestInfo()->HasUserGesture(), - true /* from_download_cross_origin_redirect */, - GetRequestInfo()->GetWebContentsGetterForRequest(), - GetRequestInfo()->frame_tree_node_id())); + if (redirect_info.new_url.SchemeIsHTTPOrHTTPS() || + GetContentClient()->browser()->IsHandledURL(redirect_info.new_url)) { + base::PostTaskWithTraits( + FROM_HERE, {BrowserThread::UI}, + base::BindOnce( + &NavigateOnUIThread, redirect_info.new_url, request()->url_chain(), + Referrer(GURL(redirect_info.new_referrer), + Referrer::NetReferrerPolicyToBlinkReferrerPolicy( + redirect_info.new_referrer_policy)), + GetRequestInfo()->HasUserGesture(), + true /* from_download_cross_origin_redirect */, + GetRequestInfo()->GetWebContentsGetterForRequest(), + GetRequestInfo()->frame_tree_node_id())); + } controller->Cancel(); return; } |