Commit 08c3c6d4 authored by Hiroki Nakagawa's avatar Hiroki Nakagawa Committed by Commit Bot

SharedWorker: Consolidate default loader factory creation for cleanup

Default loader factories for shared workers have been created in different
places depending on the configurations of S13nServiceWorker and NetworkService.
This has been impaired code readability.

To improve it, this CL consolidates default loader factory creation.

Bug: 715632
Change-Id: Ic06cd6ab4d9f0c3ab40b45f8f8c94d26bf5b7b15
Reviewed-on: https://chromium-review.googlesource.com/1195171
Commit-Queue: Hiroki Nakagawa <nhiroki@chromium.org>
Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#587489}
parent 5804cbc2
...@@ -173,24 +173,30 @@ void SharedWorkerHost::Start( ...@@ -173,24 +173,30 @@ void SharedWorkerHost::Start(
mojom::kNavigation_SharedWorkerSpec, process_id_, mojom::kNavigation_SharedWorkerSpec, process_id_,
mojo::MakeRequest(&interface_provider))); mojo::MakeRequest(&interface_provider)));
// Add the network factory to the bundle for subresource loading to pass to // Add the default factory to the bundle for subresource loading to pass to
// the renderer. The bundle is only provided if // the renderer. The bundle is only provided if
// NetworkService/S13nServiceWorker is enabled. // NetworkService/S13nServiceWorker is enabled.
// TODO(nhiroki): We might need to set the default factory to AppCache
// instead, as we do for frames, if requests from this shared worker are
// supposed to go through AppCache. Currently, we set the default factory to a
// direct network.
if (blink::ServiceWorkerUtils::IsServicificationEnabled()) { if (blink::ServiceWorkerUtils::IsServicificationEnabled()) {
DCHECK(subresource_loader_factories); DCHECK(subresource_loader_factories);
// The default factory is not provided if NetworkService is on.
if (base::FeatureList::IsEnabled(network::features::kNetworkService)) {
DCHECK(!subresource_loader_factories->default_factory_info()); DCHECK(!subresource_loader_factories->default_factory_info());
if (base::FeatureList::IsEnabled(network::features::kNetworkService)) {
network::mojom::URLLoaderFactoryPtrInfo network_factory_info; network::mojom::URLLoaderFactoryPtrInfo network_factory_info;
CreateNetworkFactory(mojo::MakeRequest(&network_factory_info)); CreateNetworkFactory(mojo::MakeRequest(&network_factory_info));
subresource_loader_factories->default_factory_info() = subresource_loader_factories->default_factory_info() =
std::move(network_factory_info); std::move(network_factory_info);
} else {
// TODO(falken): We might need to set the default factory to AppCache // Use the non-NetworkService network factory for the process when
// instead, as we do for frames, if requests from this shared worker are // NetworkService is off.
// supposed to go through AppCache. network::mojom::URLLoaderFactoryPtr default_factory;
RenderProcessHost::FromID(process_id_)
->CreateURLLoaderFactory(mojo::MakeRequest(&default_factory));
subresource_loader_factories->default_factory_info() =
default_factory.PassInterface();
} }
DCHECK(subresource_loader_factories->default_factory_info());
} }
// Send the CreateSharedWorker message. // Send the CreateSharedWorker message.
......
...@@ -67,8 +67,8 @@ class SharedWorkerHostTest : public testing::Test { ...@@ -67,8 +67,8 @@ class SharedWorkerHostTest : public testing::Test {
void StartWorker(SharedWorkerHost* host, void StartWorker(SharedWorkerHost* host,
mojom::SharedWorkerFactoryPtr factory) { mojom::SharedWorkerFactoryPtr factory) {
host->Start(std::move(factory), nullptr /* service_worker_provider_info */, host->Start(std::move(factory), nullptr /* service_worker_provider_info */,
{} /* script_loader_factory_info */, {} /* main_script_loader_factory */,
nullptr /* factory_bundle */); nullptr /* subresource_loader_factories */);
} }
MessagePortChannel AddClient(SharedWorkerHost* host, MessagePortChannel AddClient(SharedWorkerHost* host,
...@@ -198,8 +198,8 @@ TEST_F(SharedWorkerHostTest, TerminateAfterStarting) { ...@@ -198,8 +198,8 @@ TEST_F(SharedWorkerHostTest, TerminateAfterStarting) {
// Start the worker. // Start the worker.
host->Start(std::move(factory), nullptr /* service_worker_provider_info */, host->Start(std::move(factory), nullptr /* service_worker_provider_info */,
{} /* script_loader_factory_info */, {} /* main_script_loader_factory */,
nullptr /* factory_bundle */); nullptr /* subresource_loader_factories */);
// Add a client. // Add a client.
MockSharedWorkerClient client; MockSharedWorkerClient client;
......
...@@ -84,16 +84,6 @@ std::unique_ptr<URLLoaderFactoryBundleInfo> CreateFactoryBundle( ...@@ -84,16 +84,6 @@ std::unique_ptr<URLLoaderFactoryBundleInfo> CreateFactoryBundle(
file_factory_ptr.PassInterface()); file_factory_ptr.PassInterface());
} }
// Use RenderProcessHost's network factory as the default factory if
// NetworkService is off. If NetworkService is on the default factory is
// set in CreateScriptLoaderOnIO().
if (!base::FeatureList::IsEnabled(network::features::kNetworkService)) {
network::mojom::URLLoaderFactoryPtr default_factory;
RenderProcessHost::FromID(process_id)
->CreateURLLoaderFactory(mojo::MakeRequest(&default_factory));
factory_bundle->default_factory_info() = default_factory.PassInterface();
}
return factory_bundle; return factory_bundle;
} }
...@@ -126,26 +116,24 @@ void CreateScriptLoaderOnIO( ...@@ -126,26 +116,24 @@ void CreateScriptLoaderOnIO(
url_loader_factory = network::SharedURLLoaderFactory::Create( url_loader_factory = network::SharedURLLoaderFactory::Create(
std::move(blob_url_loader_factory_info)); std::move(blob_url_loader_factory_info));
} else { } else {
// Add the network factory to the bundle. If NetworkService is off the // Add the default factory to the bundle for browser.
// default factory was already set in CreateFactoryBundle(). DCHECK(!factory_bundle_for_browser_info->default_factory_info());
DCHECK(base::FeatureList::IsEnabled(network::features::kNetworkService) ||
factory_bundle_for_browser_info->default_factory_info());
// Create a factory bundle to use. // Create a factory bundle to use.
scoped_refptr<URLLoaderFactoryBundle> factory_bundle = scoped_refptr<URLLoaderFactoryBundle> factory_bundle =
base::MakeRefCounted<URLLoaderFactoryBundle>( base::MakeRefCounted<URLLoaderFactoryBundle>(
std::move(factory_bundle_for_browser_info)); std::move(factory_bundle_for_browser_info));
url_loader_factory = factory_bundle;
if (base::FeatureList::IsEnabled(network::features::kNetworkService)) { // Get the direct network factory from |loader_factory_getter|. When
// The factory from CloneNetworkFactory() doesn't support reconnection to // NetworkService is enabled, it returns a factory that doesn't support
// the network service after a crash, but it's OK since it's used for a // reconnection to the network service after a crash, but it's OK since it's
// single shared worker startup. // used for a single shared worker startup.
network::mojom::URLLoaderFactoryPtr network_factory_ptr; network::mojom::URLLoaderFactoryPtr network_factory_ptr;
loader_factory_getter->CloneNetworkFactory( loader_factory_getter->CloneNetworkFactory(
mojo::MakeRequest(&network_factory_ptr)); mojo::MakeRequest(&network_factory_ptr));
factory_bundle->SetDefaultFactory(std::move(network_factory_ptr)); factory_bundle->SetDefaultFactory(std::move(network_factory_ptr));
}
url_loader_factory = factory_bundle;
} }
// It's safe for |appcache_handle_core| to be a raw pointer. The core is owned // It's safe for |appcache_handle_core| to be a raw pointer. The core is owned
......
...@@ -74,7 +74,8 @@ class CONTENT_EXPORT SharedWorkerServiceImpl : public SharedWorkerService { ...@@ -74,7 +74,8 @@ class CONTENT_EXPORT SharedWorkerServiceImpl : public SharedWorkerService {
int frame_id, int frame_id,
const blink::MessagePortChannel& message_port, const blink::MessagePortChannel& message_port,
scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory); scoped_refptr<network::SharedURLLoaderFactory> blob_url_loader_factory);
void StartWorker(std::unique_ptr<SharedWorkerInstance> instance, void StartWorker(
std::unique_ptr<SharedWorkerInstance> instance,
base::WeakPtr<SharedWorkerHost> host, base::WeakPtr<SharedWorkerHost> host,
mojom::SharedWorkerClientPtr client, mojom::SharedWorkerClientPtr client,
int process_id, int process_id,
...@@ -83,8 +84,8 @@ class CONTENT_EXPORT SharedWorkerServiceImpl : public SharedWorkerService { ...@@ -83,8 +84,8 @@ class CONTENT_EXPORT SharedWorkerServiceImpl : public SharedWorkerService {
mojom::ServiceWorkerProviderInfoForSharedWorkerPtr mojom::ServiceWorkerProviderInfoForSharedWorkerPtr
service_worker_provider_info, service_worker_provider_info,
network::mojom::URLLoaderFactoryAssociatedPtrInfo network::mojom::URLLoaderFactoryAssociatedPtrInfo
main_script_loader_factory_info, main_script_loader_factory,
std::unique_ptr<URLLoaderFactoryBundleInfo> factory_bundle); std::unique_ptr<URLLoaderFactoryBundleInfo> subresource_loader_factories);
// Returns nullptr if there is no such host. // Returns nullptr if there is no such host.
SharedWorkerHost* FindSharedWorkerHost(int process_id, int route_id); SharedWorkerHost* FindSharedWorkerHost(int process_id, int route_id);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment