diff --git a/shell/browser/api/atom_api_url_request_ns.cc b/shell/browser/api/atom_api_url_request_ns.cc index 29ffd145dc7e..6af1fb9e68d6 100644 --- a/shell/browser/api/atom_api_url_request_ns.cc +++ b/shell/browser/api/atom_api_url_request_ns.cc @@ -6,15 +6,12 @@ #include -#include "content/public/browser/storage_partition.h" #include "mojo/public/cpp/system/string_data_source.h" #include "native_mate/dictionary.h" #include "native_mate/object_template_builder.h" #include "net/http/http_util.h" -#include "services/network/public/cpp/wrapper_shared_url_loader_factory.h" #include "services/network/public/mojom/chunked_data_pipe_getter.mojom.h" #include "shell/browser/api/atom_api_session.h" -#include "shell/browser/atom_browser_client.h" #include "shell/browser/atom_browser_context.h" #include "shell/common/native_mate_converters/gurl_converter.h" #include "shell/common/native_mate_converters/net_converter.h" @@ -181,37 +178,7 @@ URLRequestNS::URLRequestNS(mate::Arguments* args) : weak_factory_(this) { session = Session::FromPartition(args->isolate(), ""); } - auto* browser_context = session->browser_context(); - auto* storage_partition = - content::BrowserContext::GetDefaultStoragePartition(browser_context); - - network::mojom::URLLoaderFactoryPtr network_factory; - mojo::PendingReceiver factory_request = - mojo::MakeRequest(&network_factory); - - // Consult the embedder. - network::mojom::TrustedURLLoaderHeaderClientPtrInfo header_client; - static_cast(AtomBrowserClient::Get()) - ->WillCreateURLLoaderFactory( - browser_context, nullptr, -1, - content::ContentBrowserClient::URLLoaderFactoryType::kNavigation, - url::Origin(), &factory_request, &header_client, nullptr); - - network::mojom::URLLoaderFactoryParamsPtr params = - network::mojom::URLLoaderFactoryParams::New(); - params->header_client = std::move(header_client); - params->process_id = network::mojom::kBrowserProcessId; - params->is_trusted = true; - params->is_corb_enabled = false; - // The tests of net module would fail if this setting is true, it seems that - // the non-NetworkService implementation always has web security enabled. - params->disable_web_security = false; - - storage_partition->GetNetworkContext()->CreateURLLoaderFactory( - std::move(factory_request), std::move(params)); - url_loader_factory_ = - base::MakeRefCounted( - std::move(network_factory)); + url_loader_factory_ = session->browser_context()->GetURLLoaderFactory(); InitWith(args->isolate(), args->GetThis()); } diff --git a/shell/browser/atom_browser_context.cc b/shell/browser/atom_browser_context.cc index 45d82b836b3b..a9827d4f009f 100644 --- a/shell/browser/atom_browser_context.cc +++ b/shell/browser/atom_browser_context.cc @@ -28,6 +28,7 @@ #include "content/public/browser/storage_partition.h" #include "net/base/escape.h" #include "services/network/public/cpp/features.h" +#include "services/network/public/cpp/wrapper_shared_url_loader_factory.h" #include "shell/browser/atom_blob_reader.h" #include "shell/browser/atom_browser_client.h" #include "shell/browser/atom_browser_main_parts.h" @@ -271,6 +272,43 @@ predictors::PreconnectManager* AtomBrowserContext::GetPreconnectManager() { return preconnect_manager_.get(); } +scoped_refptr +AtomBrowserContext::GetURLLoaderFactory() { + if (url_loader_factory_) + return url_loader_factory_; + + network::mojom::URLLoaderFactoryPtr network_factory; + mojo::PendingReceiver factory_request = + mojo::MakeRequest(&network_factory); + + // Consult the embedder. + network::mojom::TrustedURLLoaderHeaderClientPtrInfo header_client; + static_cast(AtomBrowserClient::Get()) + ->WillCreateURLLoaderFactory( + this, nullptr, -1, + content::ContentBrowserClient::URLLoaderFactoryType::kNavigation, + url::Origin(), &factory_request, &header_client, nullptr); + + network::mojom::URLLoaderFactoryParamsPtr params = + network::mojom::URLLoaderFactoryParams::New(); + params->header_client = std::move(header_client); + params->process_id = network::mojom::kBrowserProcessId; + params->is_trusted = true; + params->is_corb_enabled = false; + // The tests of net module would fail if this setting is true, it seems that + // the non-NetworkService implementation always has web security enabled. + params->disable_web_security = false; + + auto* storage_partition = + content::BrowserContext::GetDefaultStoragePartition(this); + storage_partition->GetNetworkContext()->CreateURLLoaderFactory( + std::move(factory_request), std::move(params)); + url_loader_factory_ = + base::MakeRefCounted( + std::move(network_factory)); + return url_loader_factory_; +} + content::PushMessagingService* AtomBrowserContext::GetPushMessagingService() { return nullptr; } diff --git a/shell/browser/atom_browser_context.h b/shell/browser/atom_browser_context.h index 8019869573d3..e8d41d315bf5 100644 --- a/shell/browser/atom_browser_context.h +++ b/shell/browser/atom_browser_context.h @@ -17,12 +17,17 @@ #include "content/public/browser/browser_context.h" #include "content/public/browser/resource_context.h" #include "electron/buildflags/buildflags.h" +#include "services/network/public/mojom/url_loader_factory.mojom.h" #include "shell/browser/media/media_device_id_salt.h" class PrefRegistrySimple; class PrefService; class ValueMapPrefStore; +namespace network { +class SharedURLLoaderFactory; +} + namespace storage { class SpecialStoragePolicy; } @@ -87,8 +92,8 @@ class AtomBrowserContext int GetMaxCacheSize() const; AtomBlobReader* GetBlobReader(); ResolveProxyHelper* GetResolveProxyHelper(); - predictors::PreconnectManager* GetPreconnectManager(); + scoped_refptr GetURLLoaderFactory(); // content::BrowserContext: base::FilePath GetPath() override; @@ -180,6 +185,9 @@ class AtomBrowserContext extensions::AtomExtensionSystem* extension_system_; #endif + // Shared URLLoaderFactory. + scoped_refptr url_loader_factory_; + base::WeakPtrFactory weak_factory_; DISALLOW_COPY_AND_ASSIGN(AtomBrowserContext); diff --git a/shell/browser/net/atom_url_loader_factory.cc b/shell/browser/net/atom_url_loader_factory.cc index 30f8d243e137..fb6e1a627ef0 100644 --- a/shell/browser/net/atom_url_loader_factory.cc +++ b/shell/browser/net/atom_url_loader_factory.cc @@ -396,12 +396,9 @@ void AtomURLLoaderFactory::StartLoadingHttp( } } - scoped_refptr url_loader_factory = - content::BrowserContext::GetDefaultStoragePartition(browser_context.get()) - ->GetURLLoaderFactoryForBrowserProcess(); new URLPipeLoader( - url_loader_factory, std::move(request), std::move(loader), - std::move(client), + browser_context->GetURLLoaderFactory(), std::move(request), + std::move(loader), std::move(client), static_cast(traffic_annotation), std::move(upload_data)); }