summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/core/loader/modulescript/installed_service_worker_module_script_fetcher.cc
diff options
context:
space:
mode:
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.cc61
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 {