diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc | 61 |
1 files changed, 30 insertions, 31 deletions
diff --git a/chromium/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc b/chromium/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc index 8667eba3cc0..8a00638779c 100644 --- a/chromium/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc +++ b/chromium/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc @@ -6,6 +6,7 @@ #include "third_party/blink/public/common/features.h" #include "third_party/blink/public/mojom/appcache/appcache.mojom-blink.h" +#include "third_party/blink/renderer/bindings/core/v8/script_source_location_type.h" #include "third_party/blink/renderer/core/dom/dom_implementation.h" #include "third_party/blink/renderer/core/inspector/console_message.h" #include "third_party/blink/renderer/core/workers/installed_scripts_manager.h" @@ -20,20 +21,23 @@ namespace blink { InstalledServiceWorkerModuleScriptFetcher:: InstalledServiceWorkerModuleScriptFetcher( WorkerGlobalScope* global_scope, - util::PassKey<ModuleScriptLoader> pass_key) + base::PassKey<ModuleScriptLoader> pass_key) : ModuleScriptFetcher(pass_key), global_scope_(global_scope) { DCHECK(global_scope_->IsServiceWorkerGlobalScope()); } void InstalledServiceWorkerModuleScriptFetcher::Fetch( FetchParameters& fetch_params, + ModuleType expected_module_type, ResourceFetcher*, ModuleGraphLevel level, ModuleScriptFetcher::Client* client) { + DCHECK_EQ(fetch_params.GetScriptType(), mojom::blink::ScriptType::kModule); DCHECK(global_scope_->IsContextThread()); auto* installed_scripts_manager = global_scope_->GetInstalledScriptsManager(); DCHECK(installed_scripts_manager); DCHECK(installed_scripts_manager->IsScriptInstalled(fetch_params.Url())); + expected_module_type_ = expected_module_type; std::unique_ptr<InstalledScriptsManager::ScriptData> script_data = installed_scripts_manager->GetScriptData(fetch_params.Url()); @@ -45,7 +49,7 @@ void InstalledServiceWorkerModuleScriptFetcher::Fetch( mojom::ConsoleMessageLevel::kError, "Failed to load the script unexpectedly", fetch_params.Url().GetString(), nullptr, 0)); - client->NotifyFetchFinished(base::nullopt, error_messages); + client->NotifyFetchFinishedError(error_messages); return; } @@ -62,33 +66,27 @@ void InstalledServiceWorkerModuleScriptFetcher::Fetch( kDoNotSupportReferrerPolicyLegacyKeywords, &response_referrer_policy); } - // Construct a ContentSecurityPolicy object to convert - // ContentSecurityPolicyResponseHeaders to CSPHeaderAndType. - // TODO(nhiroki): Find an efficient way to do this. - auto* response_content_security_policy = - MakeGarbageCollected<ContentSecurityPolicy>(); - response_content_security_policy->DidReceiveHeaders( - script_data->GetContentSecurityPolicyResponseHeaders()); - - global_scope_->Initialize(response_url, response_referrer_policy, - script_data->GetResponseAddressSpace(), - response_content_security_policy->Headers(), - script_data->CreateOriginTrialTokens().get(), - mojom::blink::kAppCacheNoCacheId); + global_scope_->Initialize( + response_url, response_referrer_policy, + script_data->GetResponseAddressSpace(), + ContentSecurityPolicy::ParseHeaders( + script_data->GetContentSecurityPolicyResponseHeaders()), + script_data->CreateOriginTrialTokens().get(), + mojom::blink::kAppCacheNoCacheId); } - ModuleScriptCreationParams::ModuleType module_type; - // TODO(sasebree) De-duplicate similar logic that lives in // ModuleScriptFetcher::WasModuleLoadSuccessful - if (MIMETypeRegistry::IsSupportedJavaScriptMIMEType( - script_data->GetHttpContentType())) { - module_type = ModuleScriptCreationParams::ModuleType::kJavaScriptModule; - } else if (base::FeatureList::IsEnabled(blink::features::kJSONModules) && - MIMETypeRegistry::IsJSONMimeType( - script_data->GetHttpContentType())) { - module_type = ModuleScriptCreationParams::ModuleType::kJSONModule; - } else { + const bool fetched_javascript_module = + expected_module_type_ == ModuleType::kJavaScript && + MIMETypeRegistry::IsSupportedJavaScriptMIMEType( + script_data->GetHttpContentType()); + const bool fetched_json_module = + base::FeatureList::IsEnabled(blink::features::kJSONModules) && + expected_module_type_ == ModuleType::kJSON && + MIMETypeRegistry::IsJSONMimeType(script_data->GetHttpContentType()); + + if (!fetched_javascript_module && !fetched_json_module) { // This should never happen. // If we reach here, we know we received an incompatible mime type from the // network @@ -98,16 +96,17 @@ void InstalledServiceWorkerModuleScriptFetcher::Fetch( mojom::ConsoleMessageLevel::kError, "Failed to load the script unexpectedly", fetch_params.Url().GetString(), nullptr, 0)); - client->NotifyFetchFinished(base::nullopt, error_messages); + client->NotifyFetchFinishedError(error_messages); return; } - ModuleScriptCreationParams params( - fetch_params.Url(), module_type, + // Create an external module script where base_url == source_url. + // https://html.spec.whatwg.org/multipage/webappapis.html#concept-script-base-url + client->NotifyFetchFinishedSuccess(ModuleScriptCreationParams( + /*source_url=*/fetch_params.Url(), /*base_url=*/fetch_params.Url(), + ScriptSourceLocationType::kExternalFile, expected_module_type_, ParkableString(script_data->TakeSourceText().Impl()), - nullptr /* cache_handler */, - fetch_params.GetResourceRequest().GetCredentialsMode()); - client->NotifyFetchFinished(params, HeapVector<Member<ConsoleMessage>>()); + /*cache_handler=*/nullptr)); } void InstalledServiceWorkerModuleScriptFetcher::Trace(Visitor* visitor) const { |