From 5218a6e6abc7f3df38c079ca18c3533c313de095 Mon Sep 17 00:00:00 2001 From: Wojciech Krol Date: Tue, 2 Jun 2020 07:20:34 +0200 Subject: [PATCH] fix: notify URLLoaderClient about redirect inside intercepted protocol's handler (#23742) * fix: notify URLLoaderClient about redirect inside intercepted protocol's handler * fix: update new_request's site_for_coookies * fix: Unound client, so it an be passed to sub-methods --- .../net/electron_url_loader_factory.cc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/shell/browser/net/electron_url_loader_factory.cc b/shell/browser/net/electron_url_loader_factory.cc index 40a07017bfdae..795a10cf33b48 100644 --- a/shell/browser/net/electron_url_loader_factory.cc +++ b/shell/browser/net/electron_url_loader_factory.cc @@ -236,8 +236,25 @@ void ElectronURLLoaderFactory::StartLoading( // API in WebRequestProxyingURLLoaderFactory. std::string location; if (head->headers->IsRedirect(&location)) { + GURL new_location = GURL(location); + net::SiteForCookies new_site_for_cookies = + net::SiteForCookies::FromUrl(new_location); network::ResourceRequest new_request = request; - new_request.url = GURL(location); + new_request.url = new_location; + new_request.site_for_cookies = new_site_for_cookies; + + net::RedirectInfo redirect_info; + redirect_info.status_code = head->headers->response_code(); + redirect_info.new_method = request.method; + redirect_info.new_url = new_location; + redirect_info.new_site_for_cookies = new_site_for_cookies; + mojo::Remote client_remote( + std::move(client)); + + client_remote->OnReceiveRedirect(redirect_info, std::move(head)); + + // Unound client, so it an be passed to sub-methods + client = client_remote.Unbind(); // When the redirection comes from an intercepted scheme (which has // |proxy_factory| passed), we askes the proxy factory to create a loader // for new URL, otherwise we call |StartLoadingHttp|, which creates