diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc | 62 |
1 files changed, 39 insertions, 23 deletions
diff --git a/chromium/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc b/chromium/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc index 5bcb80cdff8..519d1b4627e 100644 --- a/chromium/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc +++ b/chromium/third_party/blink/renderer/modules/exported/web_embedded_worker_impl.cc @@ -64,7 +64,9 @@ #include "third_party/blink/renderer/modules/service_worker/service_worker_thread.h" #include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/instrumentation/tracing/trace_event.h" -#include "third_party/blink/renderer/platform/loader/fetch/substitute_data.h" +#include "third_party/blink/renderer/platform/loader/fetch/fetch_client_settings_object_snapshot.h" +#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher.h" +#include "third_party/blink/renderer/platform/loader/fetch/resource_fetcher_properties.h" #include "third_party/blink/renderer/platform/network/network_utils.h" #include "third_party/blink/renderer/platform/shared_buffer.h" #include "third_party/blink/renderer/platform/weborigin/kurl.h" @@ -177,11 +179,15 @@ void WebEmbeddedWorkerImpl::StartWorkerContext( pause_after_download_state_ = kDoPauseAfterDownload; devtools_worker_token_ = data.devtools_worker_token; - // |loader_factory| is null since all loads for new scripts go through - // ServiceWorkerNetworkProvider::script_loader_factory() rather than the - // shadow page's loader. This is different to shared workers, which use the - // script loader factory for the main script only, and the shadow page loader - // for importScripts(). + // S13nServiceWorker: |loader_factory| is null since all loads for new scripts + // go through ServiceWorkerNetworkProvider::script_loader_factory() rather + // than the shadow page's loader. This is different to shared workers, which + // use script_loader_factory() for the main script only, and the shadow page + // loader for importScripts(). + // + // Non-S13nServiceWorker: |loader_factory| is null since the main script load + // goes through the shadow page loader which uses the default loader that goes + // to ResourceDispatcherHost. shadow_page_ = std::make_unique<WorkerShadowPage>( this, nullptr /* loader_factory */, std::move(worker_start_data_.privacy_preferences)); @@ -245,16 +251,16 @@ void WebEmbeddedWorkerImpl::AddMessageToConsole( const WebConsoleMessage& message) { MessageLevel web_core_message_level; switch (message.level) { - case WebConsoleMessage::kLevelVerbose: + case mojom::ConsoleMessageLevel::kVerbose: web_core_message_level = kVerboseMessageLevel; break; - case WebConsoleMessage::kLevelInfo: + case mojom::ConsoleMessageLevel::kInfo: web_core_message_level = kInfoMessageLevel; break; - case WebConsoleMessage::kLevelWarning: + case mojom::ConsoleMessageLevel::kWarning: web_core_message_level = kWarningMessageLevel; break; - case WebConsoleMessage::kLevelError: + case mojom::ConsoleMessageLevel::kError: web_core_message_level = kErrorMessageLevel; break; default: @@ -316,12 +322,11 @@ void WebEmbeddedWorkerImpl::OnShadowPageInitialized() { DCHECK(!main_script_loader_); main_script_loader_ = MakeGarbageCollected<WorkerClassicScriptLoader>(); main_script_loader_->LoadTopLevelScriptAsynchronously( - *shadow_page_->GetDocument(), worker_start_data_.script_url, - mojom::RequestContextType::SERVICE_WORKER, + *shadow_page_->GetDocument(), shadow_page_->GetDocument()->Fetcher(), + worker_start_data_.script_url, mojom::RequestContextType::SERVICE_WORKER, network::mojom::FetchRequestMode::kSameOrigin, network::mojom::FetchCredentialsMode::kSameOrigin, - worker_start_data_.address_space, false /* is_nested_worker */, - base::OnceClosure(), + worker_start_data_.address_space, base::OnceClosure(), Bind(&WebEmbeddedWorkerImpl::OnScriptLoaderFinished, WTF::Unretained(this))); // Do nothing here since OnScriptLoaderFinished() might have been already @@ -389,7 +394,14 @@ void WebEmbeddedWorkerImpl::StartWorkerThread() { std::unique_ptr<GlobalScopeCreationParams> global_scope_creation_params; String source_code; - std::unique_ptr<Vector<char>> cached_meta_data; + std::unique_ptr<Vector<uint8_t>> cached_meta_data; + + // TODO(nhiroki): Implement off-the-main-thread worker script fetch for + // service workers (https://crbug.com/835717). + const OffMainThreadWorkerScriptFetchOption off_main_thread_fetch_option = + worker_start_data_.script_type == mojom::ScriptType::kModule + ? OffMainThreadWorkerScriptFetchOption::kEnabled + : OffMainThreadWorkerScriptFetchOption::kDisabled; // |main_script_loader_| isn't created if the InstalledScriptsManager had the // script. @@ -405,7 +417,8 @@ void WebEmbeddedWorkerImpl::StartWorkerThread() { } global_scope_creation_params = std::make_unique<GlobalScopeCreationParams>( worker_start_data_.script_url, worker_start_data_.script_type, - worker_start_data_.user_agent, std::move(web_worker_fetch_context), + off_main_thread_fetch_option, worker_start_data_.user_agent, + std::move(web_worker_fetch_context), content_security_policy ? content_security_policy->Headers() : Vector<CSPHeaderAndType>(), referrer_policy, starter_origin, starter_secure_context, @@ -424,12 +437,12 @@ void WebEmbeddedWorkerImpl::StartWorkerThread() { // served by the installed scripts manager on the worker thread. global_scope_creation_params = std::make_unique<GlobalScopeCreationParams>( worker_start_data_.script_url, worker_start_data_.script_type, - worker_start_data_.user_agent, std::move(web_worker_fetch_context), - Vector<CSPHeaderAndType>(), network::mojom::ReferrerPolicy::kDefault, - starter_origin, starter_secure_context, starter_https_state, - worker_clients, worker_start_data_.address_space, - nullptr /* OriginTrialTokens */, devtools_worker_token_, - std::move(worker_settings), + off_main_thread_fetch_option, worker_start_data_.user_agent, + std::move(web_worker_fetch_context), Vector<CSPHeaderAndType>(), + network::mojom::ReferrerPolicy::kDefault, starter_origin, + starter_secure_context, starter_https_state, worker_clients, + worker_start_data_.address_space, nullptr /* OriginTrialTokens */, + devtools_worker_token_, std::move(worker_settings), static_cast<V8CacheOptions>(worker_start_data_.v8_cache_options), nullptr /* worklet_module_respones_map */, std::move(interface_provider_info_)); @@ -474,7 +487,10 @@ void WebEmbeddedWorkerImpl::StartWorkerThread() { // called navigator.ServiceWorker.register(). To do it, we need to make a // way to pass the settings object over mojo IPCs. auto* outside_settings_object = - document->CreateFetchClientSettingsObjectSnapshot(); + MakeGarbageCollected<FetchClientSettingsObjectSnapshot>( + document->Fetcher() + ->GetProperties() + .GetFetchClientSettingsObject()); network::mojom::FetchCredentialsMode credentials_mode = network::mojom::FetchCredentialsMode::kOmit; worker_thread_->ImportModuleScript(worker_start_data_.script_url, |