commit 13ff5f1bada52dccf5951f3873dc815bfcf3895e
parent b8c19c83ae706c6c53304e9c0f557db6c5b06700
Author: Atila Butkovits <abutkovits@mozilla.com>
Date: Wed, 22 Oct 2025 08:37:56 +0300
Revert "Bug 1991607 - Part 12: Reorder ScriptLoadRequest/ModuleLoadRequest fields. r=bthrall" for causing bustages at LoadedScript.cpp.
This reverts commit 30499d5cdcb99af41b410b0970e1f74c4f2b34bc.
Revert "Bug 1991607 - Part 11: Remove ScriptLoadRequest::mBaseURL. r=bthrall,dom-worker-reviewers,edenchuang"
This reverts commit 85324622ab5f4b2443e92b29b247d293b75c55e0.
Revert "Bug 1991607 - Part 10: Remove ScriptLoadRequest::mURI. r=bthrall,dom-worker-reviewers,edenchuang"
This reverts commit 3b1afd5ca0a2cc02581ee863977de7c143706d42.
Revert "Bug 1991607 - Part 9: Pass URI to LoadedScript ctor from ScriptLoadRequest ctor callsites. r=bthrall,dom-worker-reviewers,edenchuang"
This reverts commit 10dc4e2bc0cfecaa995c6653c50f7e7f8f13e6dc.
Revert "Bug 1991607 - Part 8: Remove ScriptLoadRequest::mFetchOptions. r=bthrall,dom-worker-reviewers,edenchuang"
This reverts commit b4c09eb6e19fe3aae6d283f359cfd85d529fc275.
Revert "Bug 1991607 - Part 7: Pass FetchOptions to LoadedScript ctor from ScriptLoadRequest ctor callsites. r=bthrall,dom-worker-reviewers,edenchuang"
This reverts commit f48d2160e1bf8364350954fb28d5a8559d0356de.
Revert "Bug 1991607 - Part 6: Remove ScriptLoadRequest::mReferrerPolicy. r=bthrall,dom-worker-reviewers,edenchuang"
This reverts commit a6901c3f1d520a3893be49cea4da6ee031f72a72.
Revert "Bug 1991607 - Part 5: Pass ReferrerPolicy to LoadedScript ctor from ScriptLoadRequest ctor callsites. r=bthrall,dom-worker-reviewers,edenchuang"
This reverts commit c2b5cb885aaa3a83843c8f8e983efe63f8cf4068.
Revert "Bug 1991607 - Part 4: Add ImportMapScript subclass for LoadedScript. r=bthrall"
This reverts commit 09b8ae44b8709f29ce02f69a7b181f4c2e576a20.
Revert "Bug 1991607 - Part 3: Make LoadedScript::mKind field const. r=bthrall"
This reverts commit 3eebccc479c4a13bd12dc9be33a4956d5f1bf53b.
Revert "Bug 1991607 - Part 2: Let ScriptLoader::CheckContentPolicy receive LoadedScript-related parameters separately. r=bthrall"
This reverts commit dd8530cb712421183ae28572cad60551445be0bb.
Revert "Bug 1991607 - Part 1: Let ScriptHashKey and ScriptLoadData receive LoadedScript-related parameters separately. r=bthrall"
This reverts commit b4a4f94096c14d0602a2c4007046e84559e169cb.
Diffstat:
21 files changed, 308 insertions(+), 318 deletions(-)
diff --git a/dom/script/ModuleLoader.cpp b/dom/script/ModuleLoader.cpp
@@ -73,7 +73,7 @@ bool ModuleLoader::CanStartLoad(ModuleLoadRequest* aRequest, nsresult* aRvOut) {
if (BasePrincipal::Cast(principal)->ContentScriptAddonPolicy()) {
// To prevent dynamic code execution, content scripts can only
// load moz-extension URLs.
- if (!aRequest->URI()->SchemeIs("moz-extension")) {
+ if (!aRequest->mURI->SchemeIs("moz-extension")) {
*aRvOut = NS_ERROR_DOM_WEBEXT_CONTENT_SCRIPT_URI;
return false;
}
@@ -87,7 +87,7 @@ bool ModuleLoader::CanStartLoad(ModuleLoadRequest* aRequest, nsresult* aRvOut) {
if (LOG_ENABLED()) {
nsAutoCString url;
- aRequest->URI()->GetAsciiSpec(url);
+ aRequest->mURI->GetAsciiSpec(url);
LOG(("ScriptLoadRequest (%p): Start Module Load (url = %s)", aRequest,
url.get()));
}
@@ -402,7 +402,7 @@ nsresult ModuleLoader::CompileCssModule(
// https://github.com/whatwg/html/issues/11629).
dom::CSSStyleSheetInit options;
RefPtr<StyleSheet> sheet = StyleSheet::CreateConstructedSheet(
- *constructorDocument, aRequest->BaseURL(), options, error);
+ *constructorDocument, aRequest->mBaseURL, options, error);
if (error.Failed()) {
return;
}
@@ -450,12 +450,13 @@ already_AddRefed<ModuleLoadRequest> ModuleLoader::CreateTopLevel(
ScriptFetchOptions* aFetchOptions, const SRIMetadata& aIntegrity,
nsIURI* aReferrer, ScriptLoadContext* aContext,
ScriptLoadRequestType aRequestType) {
- RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest(
- JS::ModuleType::JavaScript, aIntegrity, aReferrer, aContext,
- ModuleLoadRequest::Kind::TopLevel, this, nullptr);
+ RefPtr<ModuleLoadRequest> request =
+ new ModuleLoadRequest(aURI, JS::ModuleType::JavaScript, aReferrerPolicy,
+ aFetchOptions, aIntegrity, aReferrer, aContext,
+ ModuleLoadRequest::Kind::TopLevel, this, nullptr);
- GetScriptLoader()->TryUseCache(aReferrerPolicy, aFetchOptions, aURI, request,
- aElement, aFetchOptions->mNonce, aRequestType);
+ GetScriptLoader()->TryUseCache(request, aElement, aFetchOptions->mNonce,
+ aRequestType);
return request.forget();
}
@@ -483,10 +484,11 @@ already_AddRefed<ModuleLoadRequest> ModuleLoader::CreateRequest(
}
JS::ModuleType moduleType = GetModuleRequestType(aCx, aModuleRequest);
- RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest(
- moduleType, aSriMetadata, aBaseURL, context, kind, this, root);
+ RefPtr<ModuleLoadRequest> request =
+ new ModuleLoadRequest(aURI, moduleType, aReferrerPolicy, aOptions,
+ aSriMetadata, aBaseURL, context, kind, this, root);
- GetScriptLoader()->TryUseCache(aReferrerPolicy, aOptions, aURI, request);
+ GetScriptLoader()->TryUseCache(request);
return request.forget();
}
diff --git a/dom/script/ScriptLoadContext.cpp b/dom/script/ScriptLoadContext.cpp
@@ -225,8 +225,8 @@ void ScriptLoadContext::GetProfilerLabel(nsACString& aOutString) {
}
nsAutoCString url;
- if (mRequest->URI()) {
- mRequest->URI()->GetAsciiSpec(url);
+ if (mRequest->mURI) {
+ mRequest->mURI->GetAsciiSpec(url);
} else {
url = "<unknown>";
}
diff --git a/dom/script/ScriptLoadHandler.cpp b/dom/script/ScriptLoadHandler.cpp
@@ -135,7 +135,7 @@ NS_IMETHODIMP
ScriptLoadHandler::OnStartRequest(nsIRequest* aRequest) {
mRequest->SetMinimumExpirationTime(
nsContentUtils::GetSubresourceCacheExpirationTime(aRequest,
- mRequest->URI()));
+ mRequest->mURI));
return NS_OK;
}
@@ -368,7 +368,7 @@ ScriptLoadHandler::OnStreamComplete(nsIIncrementalStreamLoader* aLoader,
nsresult rv = NS_OK;
if (LOG_ENABLED()) {
nsAutoCString url;
- mRequest->URI()->GetAsciiSpec(url);
+ mRequest->mURI->GetAsciiSpec(url);
LOG(("ScriptLoadRequest (%p): Stream complete (url = %s)", mRequest.get(),
url.get()));
}
@@ -499,7 +499,7 @@ nsresult ScriptLoadHandler::AsyncOnChannelRedirect(
nsIChannel* aOld, nsIChannel* aNew, uint32_t aFlags,
nsIAsyncVerifyRedirectCallback* aCallback) {
mRequest->SetMinimumExpirationTime(
- nsContentUtils::GetSubresourceCacheExpirationTime(aOld, mRequest->URI()));
+ nsContentUtils::GetSubresourceCacheExpirationTime(aOld, mRequest->mURI));
aCallback->OnRedirectVerifyCallback(NS_OK);
diff --git a/dom/script/ScriptLoader.cpp b/dom/script/ScriptLoader.cpp
@@ -463,25 +463,21 @@ nsContentPolicyType ScriptLoadRequestToContentPolicyType(
}
RequestMode ComputeRequestModeForContentPolicy(
- const ScriptLoadRequest* aRequest, ScriptFetchOptions* aFetchOptions) {
+ const ScriptLoadRequest* aRequest) {
auto corsMapping =
aRequest->IsModuleRequest()
? nsContentSecurityManager::REQUIRE_CORS_CHECKS
: nsContentSecurityManager::CORS_NONE_MAPS_TO_DISABLED_CORS_CHECKS;
return nsContentSecurityManager::SecurityModeToRequestMode(
nsContentSecurityManager::ComputeSecurityMode(
- nsContentSecurityManager::ComputeSecurityFlags(
- aFetchOptions->mCORSMode, corsMapping)));
+ nsContentSecurityManager::ComputeSecurityFlags(aRequest->CORSMode(),
+ corsMapping)));
}
nsresult ScriptLoader::CheckContentPolicy(nsIScriptElement* aElement,
const nsAString& aNonce,
- ScriptLoadRequest* aRequest,
- ScriptFetchOptions* aFetchOptions,
- nsIURI* aURI) {
+ ScriptLoadRequest* aRequest) {
MOZ_ASSERT(aRequest);
- MOZ_ASSERT(aFetchOptions);
- MOZ_ASSERT(aURI);
nsContentPolicyType contentPolicyType =
ScriptLoadRequestToContentPolicyType(aRequest);
@@ -499,7 +495,7 @@ nsresult ScriptLoader::CheckContentPolicy(nsIScriptElement* aElement,
aElement->GetParserCreated() !=
mozilla::dom::NOT_FROM_PARSER);
Maybe<RequestMode> requestMode =
- Some(ComputeRequestModeForContentPolicy(aRequest, aFetchOptions));
+ Some(ComputeRequestModeForContentPolicy(aRequest));
secCheckLoadInfo->SetRequestMode(requestMode);
// Use nonce of the current element, instead of the preload, because those
// are allowed to differ.
@@ -508,8 +504,9 @@ nsresult ScriptLoader::CheckContentPolicy(nsIScriptElement* aElement,
aRequest->mIntegrity.GetIntegrityString());
int16_t shouldLoad = nsIContentPolicy::ACCEPT;
- nsresult rv = NS_CheckContentLoadPolicy(aURI, secCheckLoadInfo, &shouldLoad,
- nsContentUtils::GetContentPolicy());
+ nsresult rv =
+ NS_CheckContentLoadPolicy(aRequest->mURI, secCheckLoadInfo, &shouldLoad,
+ nsContentUtils::GetContentPolicy());
if (NS_FAILED(rv) || NS_CP_REJECTED(shouldLoad)) {
if (NS_FAILED(rv) || shouldLoad != nsIContentPolicy::REJECT_TYPE) {
return NS_ERROR_CONTENT_BLOCKED;
@@ -524,7 +521,7 @@ nsresult ScriptLoader::CheckContentPolicy(nsIScriptElement* aElement,
bool ScriptLoader::IsAboutPageLoadingChromeURI(ScriptLoadRequest* aRequest,
Document* aDocument) {
// if the uri to be loaded is not of scheme chrome:, there is nothing to do.
- if (!aRequest->URI()->SchemeIs("chrome")) {
+ if (!aRequest->mURI->SchemeIs("chrome")) {
return false;
}
@@ -655,7 +652,7 @@ nsresult ScriptLoader::StartClassicLoad(
if (LOG_ENABLED()) {
nsAutoCString url;
- aRequest->URI()->GetAsciiSpec(url);
+ aRequest->mURI->GetAsciiSpec(url);
LOG(("ScriptLoadRequest (%p): Start Classic Load (url = %s)", aRequest,
url.get()));
}
@@ -709,7 +706,7 @@ static nsresult CreateChannelForScriptLoading(nsIChannel** aOutChannel,
context = aDocument;
}
- return CreateChannelForScriptLoading(aOutChannel, aDocument, aRequest->URI(),
+ return CreateChannelForScriptLoading(aOutChannel, aDocument, aRequest->mURI,
context, aRequest->TriggeringPrincipal(),
aSecurityFlags, contentPolicyType);
}
@@ -1003,7 +1000,7 @@ nsresult ScriptLoader::StartLoadInternal(
NS_ENSURE_SUCCESS(rv, rv);
mozilla::net::PredictorLearn(
- aRequest->URI(), mDocument->GetDocumentURI(),
+ aRequest->mURI, mDocument->GetDocumentURI(),
nsINetworkPredictor::LEARN_LOAD_SUBRESOURCE,
mDocument->NodePrincipal()->OriginAttributesRef());
@@ -1013,7 +1010,7 @@ nsresult ScriptLoader::StartLoadInternal(
NS_ENSURE_SUCCESS(rv, rv);
auto key = PreloadHashKey::CreateAsScript(
- aRequest->URI(), aRequest->CORSMode(), aRequest->mKind);
+ aRequest->mURI, aRequest->CORSMode(), aRequest->mKind);
aRequest->GetScriptLoadContext()->NotifyOpen(
key, channel, mDocument,
aRequest->GetScriptLoadContext()->IsLinkPreloadScript(),
@@ -1036,7 +1033,7 @@ nsresult ScriptLoader::StartLoadInternal(
bool ScriptLoader::PreloadURIComparator::Equals(const PreloadInfo& aPi,
nsIURI* const& aURI) const {
bool same;
- return NS_SUCCEEDED(aPi.mRequest->URI()->Equals(aURI, &same)) && same;
+ return NS_SUCCEEDED(aPi.mRequest->mURI->Equals(aURI, &same)) && same;
}
static bool CSPAllowsInlineScript(nsIScriptElement* aElement,
@@ -1142,84 +1139,72 @@ already_AddRefed<ScriptLoadRequest> ScriptLoader::CreateLoadRequest(
MOZ_ASSERT(aKind == ScriptKind::eClassic || aKind == ScriptKind::eImportMap);
RefPtr<ScriptLoadRequest> request =
- new ScriptLoadRequest(aKind, aIntegrity, referrer, context);
+ new ScriptLoadRequest(aKind, aURI, aReferrerPolicy, fetchOptions,
+ aIntegrity, referrer, context);
- TryUseCache(aReferrerPolicy, fetchOptions, aURI, request, aElement, aNonce,
- aRequestType);
+ TryUseCache(request, aElement, aNonce, aRequestType);
return request.forget();
}
-void ScriptLoader::TryUseCache(ReferrerPolicy aReferrerPolicy,
- ScriptFetchOptions* aFetchOptions, nsIURI* aURI,
- ScriptLoadRequest* aRequest,
+void ScriptLoader::TryUseCache(ScriptLoadRequest* aRequest,
nsIScriptElement* aElement,
const nsAString& aNonce,
ScriptLoadRequestType aRequestType) {
if (aRequestType == ScriptLoadRequestType::Inline) {
- aRequest->NoCacheEntryFound(aReferrerPolicy, aFetchOptions, aURI);
+ aRequest->NoCacheEntryFound();
LOG(
("ScriptLoader (%p): Created LoadedScript (%p) for "
"ScriptLoadRequest(%p) %s.",
this, aRequest->getLoadedScript(), aRequest,
- aRequest->URI()->GetSpecOrDefault().get()));
+ aRequest->mURI->GetSpecOrDefault().get()));
return;
}
if (!mCache) {
- aRequest->NoCacheEntryFound(aReferrerPolicy, aFetchOptions, aURI);
+ aRequest->NoCacheEntryFound();
LOG(
("ScriptLoader (%p): Created LoadedScript (%p) for "
"ScriptLoadRequest(%p) %s.",
this, aRequest->getLoadedScript(), aRequest,
- aRequest->URI()->GetSpecOrDefault().get()));
+ aRequest->mURI->GetSpecOrDefault().get()));
return;
}
- // NOTE: Some ScriptLoadRequest fields aren't yet accessible until
- // either NoCacheEntryFound or CacheEntryFound is called,
- // which constructs LoadedScript.
- // aRequest->FetchOptions() and aRequest->URI() are backed by
- // LoadedScript, and we cannot use them here.
- ScriptHashKey key(this, aRequest, aFetchOptions, aURI);
+ ScriptHashKey key(this, aRequest);
auto cacheResult = mCache->Lookup(*this, key, /* aSyncLoad = */ true);
if (cacheResult.mState != CachedSubResourceState::Complete) {
- aRequest->NoCacheEntryFound(aReferrerPolicy, aFetchOptions, aURI);
+ aRequest->NoCacheEntryFound();
LOG(
("ScriptLoader (%p): Created LoadedScript (%p) for "
"ScriptLoadRequest(%p) %s.",
this, aRequest->getLoadedScript(), aRequest,
- aRequest->URI()->GetSpecOrDefault().get()));
+ aRequest->mURI->GetSpecOrDefault().get()));
return;
}
if (aRequestType == ScriptLoadRequestType::External) {
// NOTE: The preload case checks the same after the
// LookupPreloadRequest call.
- if (NS_FAILED(CheckContentPolicy(aElement, aNonce, aRequest, aFetchOptions,
- aURI))) {
- aRequest->NoCacheEntryFound(aReferrerPolicy, aFetchOptions, aURI);
+ if (NS_FAILED(CheckContentPolicy(aElement, aNonce, aRequest))) {
+ aRequest->NoCacheEntryFound();
LOG(
("ScriptLoader (%p): Created LoadedScript (%p) for "
"ScriptLoadRequest(%p) %s.",
this, aRequest->getLoadedScript(), aRequest,
- aRequest->URI()->GetSpecOrDefault().get()));
+ aRequest->mURI->GetSpecOrDefault().get()));
return;
}
}
aRequest->mNetworkMetadata = cacheResult.mNetworkMetadata;
- MOZ_ASSERT(cacheResult.mCompleteValue->ReferrerPolicy() == aReferrerPolicy);
- MOZ_ASSERT(aFetchOptions->IsCompatible(
- cacheResult.mCompleteValue->GetFetchOptions()));
-
aRequest->CacheEntryFound(cacheResult.mCompleteValue);
LOG(
("ScriptLoader (%p): Found in-memory cache LoadedScript (%p) for "
"ScriptLoadRequest(%p) %s.",
this, aRequest->getLoadedScript(), aRequest,
- aRequest->URI()->GetSpecOrDefault().get()));
+ aRequest->mURI->GetSpecOrDefault().get()));
if (cacheResult.mCompleteValue->mFetchCount < UINT8_MAX) {
cacheResult.mCompleteValue->mFetchCount++;
@@ -1241,14 +1226,14 @@ void ScriptLoader::EmulateNetworkEvents(ScriptLoadRequest* aRequest) {
}
NotifyObserversForCachedScript(
- aRequest->URI(), context, aRequest->FetchOptions()->mTriggeringPrincipal,
- CORSModeToSecurityFlags(aRequest->FetchOptions()->mCORSMode),
+ aRequest->mURI, context, aRequest->mFetchOptions->mTriggeringPrincipal,
+ CORSModeToSecurityFlags(aRequest->mFetchOptions->mCORSMode),
nsIContentPolicy::TYPE_INTERNAL_SCRIPT, aRequest->mNetworkMetadata);
{
nsAutoCString name;
nsString entryName;
- aRequest->URI()->GetSpec(name);
+ aRequest->mURI->GetSpec(name);
CopyUTF8toUTF16(name, entryName);
auto now = TimeStamp::Now();
@@ -1361,9 +1346,7 @@ bool ScriptLoader::ProcessExternalScript(nsIScriptElement* aElement,
RefPtr<ScriptLoadRequest> request =
LookupPreloadRequest(aElement, aScriptKind, sriMetadata);
if (request) {
- if (NS_FAILED(CheckContentPolicy(aElement, nonce, request,
- request->FetchOptions(),
- request->URI()))) {
+ if (NS_FAILED(CheckContentPolicy(aElement, nonce, request))) {
LOG(("ScriptLoader (%p): content policy check failed for preload", this));
// Probably plans have changed; even though the preload was allowed seems
@@ -1669,7 +1652,7 @@ bool ScriptLoader::ProcessInlineScript(nsIScriptElement* aElement,
LOG(("ScriptLoadRequest (%p): Created request for inline script",
request.get()));
- request->SetBaseURL(mDocument->GetDocBaseURI());
+ request->mBaseURL = mDocument->GetDocBaseURI();
if (request->IsModuleRequest()) {
// https://html.spec.whatwg.org/multipage/webappapis.html#fetch-an-inline-module-script-graph
@@ -2341,7 +2324,7 @@ nsresult ScriptLoader::CreateOffThreadTask(
LOG(
("ScriptLoadRequest (%p): non-on-demand-only (omt) Parsing Enabled "
"for url=%s mTotalFullParseSize=%u",
- aRequest, aRequest->URI()->GetSpecOrDefault().get(),
+ aRequest, aRequest->mURI->GetSpecOrDefault().get(),
mTotalFullParseSize));
}
@@ -2531,7 +2514,7 @@ void ScriptLoader::FireScriptAvailable(nsresult aResult,
obs->ScriptAvailable(
aResult,
aRequest->GetScriptLoadContext()->GetScriptElementForObserver(),
- aRequest->GetScriptLoadContext()->mIsInline, aRequest->URI(),
+ aRequest->GetScriptLoadContext()->mIsInline, aRequest->mURI,
aRequest->GetScriptLoadContext()->mLineNo);
}
@@ -2540,7 +2523,7 @@ void ScriptLoader::FireScriptAvailable(nsresult aResult,
RefPtr<nsIScriptElement> scriptElement =
aRequest->GetScriptLoadContext()->GetScriptElementForObserver();
scriptElement->ScriptAvailable(aResult, scriptElement, isInlineClassicScript,
- aRequest->URI(),
+ aRequest->mURI,
aRequest->GetScriptLoadContext()->mLineNo);
}
@@ -2624,9 +2607,9 @@ static void ApplyEagerBaselineStrategy(JS::CompileOptions* aOptions) {
nsresult ScriptLoader::FillCompileOptionsForRequest(
JSContext* aCx, ScriptLoadRequest* aRequest, JS::CompileOptions* aOptions,
JS::MutableHandle<JSScript*> aIntroductionScript) {
- // It's very important to use aRequest->URI(), not the final URI of the
- // channel aRequest ended up getting script data from, as the script filename.
- nsresult rv = aRequest->URI()->GetSpec(aRequest->mURL);
+ // It's very important to use aRequest->mURI, not the final URI of the channel
+ // aRequest ended up getting script data from, as the script filename.
+ nsresult rv = aRequest->mURI->GetSpec(aRequest->mURL);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
@@ -3227,8 +3210,7 @@ ScriptLoader::CacheBehavior ScriptLoader::GetCacheBehavior(
return CacheBehavior::DoNothing;
}
- if (!aRequest->URI()->SchemeIs("http") &&
- !aRequest->URI()->SchemeIs("https")) {
+ if (!aRequest->mURI->SchemeIs("http") && !aRequest->mURI->SchemeIs("https")) {
// Internal resources can be exposed to the web content, but they don't
// have to be cached.
return CacheBehavior::DoNothing;
@@ -3251,7 +3233,7 @@ ScriptLoader::CacheBehavior ScriptLoader::GetCacheBehavior(
return CacheBehavior::Insert;
}
- ScriptHashKey key(this, aRequest, aRequest->getLoadedScript());
+ ScriptHashKey key(this, aRequest);
auto cacheResult = mCache->Lookup(*this, key,
/* aSyncLoad = */ true);
if (cacheResult.mState == CachedSubResourceState::Complete) {
@@ -3283,17 +3265,16 @@ void ScriptLoader::TryCacheRequest(ScriptLoadRequest* aRequest) {
aRequest->ConvertToCachedStencil();
if (cacheBehavior == CacheBehavior::Insert) {
- auto loadData =
- MakeRefPtr<ScriptLoadData>(this, aRequest, aRequest->getLoadedScript());
+ auto loadData = MakeRefPtr<ScriptLoadData>(this, aRequest);
mCache->Insert(*loadData);
LOG(("ScriptLoader (%p): Inserting in-memory cache for %s.", this,
- aRequest->URI()->GetSpecOrDefault().get()));
+ aRequest->mURI->GetSpecOrDefault().get()));
} else {
MOZ_ASSERT(cacheBehavior == CacheBehavior::Evict);
- ScriptHashKey key(this, aRequest, aRequest->getLoadedScript());
+ ScriptHashKey key(this, aRequest);
mCache->Evict(key);
LOG(("ScriptLoader (%p): Evicting in-memory cache for %s.", this,
- aRequest->URI()->GetSpecOrDefault().get()));
+ aRequest->mURI->GetSpecOrDefault().get()));
if (!aRequest->PassedConditionForEitherCache()) {
aRequest->ClearStencil();
@@ -3392,6 +3373,30 @@ nsresult ScriptLoader::EvaluateScript(nsIGlobalObject* aGlobalObject,
// Create a ClassicScript object and associate it with the JSScript.
MOZ_ASSERT(aRequest->mLoadedScript->IsClassicScript());
+ MOZ_ASSERT(aRequest->mLoadedScript->GetFetchOptions()->IsCompatible(
+ aRequest->mFetchOptions));
+
+#ifdef DEBUG
+ {
+ bool equals;
+ (void)aRequest->mLoadedScript->GetURI()->Equals(aRequest->mURI, &equals);
+ MOZ_ASSERT(equals);
+ }
+#endif
+
+ if (aRequest->IsCachedStencil()) {
+#ifdef DEBUG
+ // A request with cache might not have mBaseURL.
+ if (aRequest->mBaseURL) {
+ bool equals;
+ (void)aRequest->mLoadedScript->BaseURL()->Equals(aRequest->mBaseURL,
+ &equals);
+ MOZ_ASSERT(equals);
+ }
+#endif
+ } else {
+ aRequest->mLoadedScript->SetBaseURL(aRequest->mBaseURL);
+ }
RefPtr<ClassicScript> classicScript =
aRequest->mLoadedScript->AsClassicScript();
@@ -3419,7 +3424,7 @@ nsresult ScriptLoader::EvaluateScript(nsIGlobalObject* aGlobalObject,
LOG(
("ScriptLoadRequest (%p): non-on-demand-only (non-omt) Parsing Enabled "
"for url=%s mTotalFullParseSize=%u",
- aRequest, aRequest->URI()->GetSpecOrDefault().get(),
+ aRequest, aRequest->mURI->GetSpecOrDefault().get(),
mTotalFullParseSize));
}
@@ -4126,7 +4131,7 @@ void ScriptLoader::ReportErrorToConsole(ScriptLoadRequest* aRequest,
}
AutoTArray<nsString, 1> params;
- CopyUTF8toUTF16(aRequest->URI()->GetSpecOrDefault(), *params.AppendElement());
+ CopyUTF8toUTF16(aRequest->mURI->GetSpecOrDefault(), *params.AppendElement());
Maybe<SourceLocation> loc;
if (!isScript && !aRequest->IsTopLevel()) {
@@ -4324,7 +4329,7 @@ bool ScriptLoader::ShouldApplyDelazifyStrategy(ScriptLoadRequest* aRequest) {
}
if (LOG_ENABLED()) {
- nsCString url = aRequest->URI()->GetSpecOrDefault();
+ nsCString url = aRequest->mURI->GetSpecOrDefault();
LOG(
("ScriptLoadRequest (%p): non-on-demand-only Parsing Disabled for (%s) "
"with size=%u because mTotalFullParseSize=%u would exceed max_size=%u",
diff --git a/dom/script/ScriptLoader.h b/dom/script/ScriptLoader.h
@@ -487,9 +487,8 @@ class ScriptLoader final : public JS::loader::ScriptLoaderInterface {
* request if any.
*/
void TryUseCache(
- ReferrerPolicy aReferrerPolicy, ScriptFetchOptions* aFetchOptions,
- nsIURI* aURI, ScriptLoadRequest* aRequest,
- nsIScriptElement* aElement = nullptr, const nsAString& aNonce = u""_ns,
+ ScriptLoadRequest* aRequest, nsIScriptElement* aElement = nullptr,
+ const nsAString& aNonce = u""_ns,
ScriptLoadRequestType aRequestType = ScriptLoadRequestType::External);
/**
@@ -548,8 +547,7 @@ class ScriptLoader final : public JS::loader::ScriptLoaderInterface {
*/
nsresult CheckContentPolicy(nsIScriptElement* aElement,
const nsAString& aNonce,
- ScriptLoadRequest* aRequest,
- ScriptFetchOptions* aFetchOptions, nsIURI* aURI);
+ ScriptLoadRequest* aRequest);
/**
* Helper function to determine whether an about: page loads a chrome: URI.
diff --git a/dom/script/SharedScriptCache.cpp b/dom/script/SharedScriptCache.cpp
@@ -19,18 +19,16 @@
namespace mozilla::dom {
-ScriptHashKey::ScriptHashKey(
- ScriptLoader* aLoader, const JS::loader::ScriptLoadRequest* aRequest,
- const JS::loader::ScriptFetchOptions* aFetchOptions,
- const nsCOMPtr<nsIURI> aURI)
+ScriptHashKey::ScriptHashKey(ScriptLoader* aLoader,
+ const JS::loader::ScriptLoadRequest* aRequest)
: PLDHashEntryHdr(),
- mURI(aURI),
+ mURI(aRequest->mURI),
mLoaderPrincipal(aLoader->LoaderPrincipal()),
mPartitionPrincipal(aLoader->PartitionedPrincipal()),
- mCORSMode(aFetchOptions->mCORSMode),
+ mCORSMode(aRequest->CORSMode()),
mSRIMetadata(aRequest->mIntegrity),
mKind(aRequest->mKind),
- mNonce(aFetchOptions->mNonce),
+ mNonce(aRequest->Nonce()),
mIsLinkRelPreload(aRequest->GetScriptLoadContext()->IsPreload()) {
if (mKind == JS::loader::ScriptKind::eClassic) {
if (aRequest->GetScriptLoadContext()->HasScriptElement()) {
@@ -41,12 +39,6 @@ ScriptHashKey::ScriptHashKey(
MOZ_COUNT_CTOR(ScriptHashKey);
}
-ScriptHashKey::ScriptHashKey(ScriptLoader* aLoader,
- const JS::loader::ScriptLoadRequest* aRequest,
- const JS::loader::LoadedScript* aLoadedScript)
- : ScriptHashKey(aLoader, aRequest, aLoadedScript->GetFetchOptions(),
- aLoadedScript->GetURI()) {}
-
ScriptHashKey::ScriptHashKey(const ScriptLoadData& aLoadData)
: ScriptHashKey(aLoadData.CacheKey()) {}
@@ -92,12 +84,11 @@ bool ScriptHashKey::KeyEquals(const ScriptHashKey& aKey) const {
NS_IMPL_ISUPPORTS(ScriptLoadData, nsISupports)
ScriptLoadData::ScriptLoadData(ScriptLoader* aLoader,
- JS::loader::ScriptLoadRequest* aRequest,
- JS::loader::LoadedScript* aLoadedScript)
+ JS::loader::ScriptLoadRequest* aRequest)
: mExpirationTime(aRequest->ExpirationTime()),
mLoader(aLoader),
- mKey(aLoader, aRequest, aLoadedScript),
- mLoadedScript(aLoadedScript),
+ mKey(aLoader, aRequest),
+ mLoadedScript(aRequest->getLoadedScript()),
mNetworkMetadata(aRequest->mNetworkMetadata) {}
NS_IMPL_ISUPPORTS(SharedScriptCache, nsIMemoryReporter)
diff --git a/dom/script/SharedScriptCache.h b/dom/script/SharedScriptCache.h
@@ -9,7 +9,6 @@
#include "PLDHashTable.h" // PLDHashEntryHdr
#include "js/loader/LoadedScript.h" // JS::loader::LoadedScript
-#include "js/loader/ScriptFetchOptions.h" // JS::loader::ScriptFetchOptions
#include "js/loader/ScriptKind.h" // JS::loader::ScriptKind
#include "js/loader/ScriptLoadRequest.h" // JS::loader::ScriptLoadRequest
#include "mozilla/CORSMode.h" // mozilla::CORSMode
@@ -66,12 +65,7 @@ class ScriptHashKey : public PLDHashEntryHdr {
}
ScriptHashKey(ScriptLoader* aLoader,
- const JS::loader::ScriptLoadRequest* aRequest,
- const JS::loader::LoadedScript* aLoadedScript);
- ScriptHashKey(ScriptLoader* aLoader,
- const JS::loader::ScriptLoadRequest* aRequest,
- const JS::loader::ScriptFetchOptions* aFetchOptions,
- const nsCOMPtr<nsIURI> aURI);
+ const JS::loader::ScriptLoadRequest* aRequest);
explicit ScriptHashKey(const ScriptLoadData& aLoadData);
MOZ_COUNTED_DTOR(ScriptHashKey)
@@ -128,8 +122,8 @@ class ScriptLoadData final
~ScriptLoadData() {}
public:
- ScriptLoadData(ScriptLoader* aLoader, JS::loader::ScriptLoadRequest* aRequest,
- JS::loader::LoadedScript* aLoadedScript);
+ ScriptLoadData(ScriptLoader* aLoader,
+ JS::loader::ScriptLoadRequest* aRequest);
NS_DECL_ISUPPORTS
diff --git a/dom/workers/ScriptLoader.cpp b/dom/workers/ScriptLoader.cpp
@@ -699,7 +699,8 @@ already_AddRefed<ScriptLoadRequest> WorkerScriptLoader::CreateScriptLoadRequest(
// Bug 1817259 - For now the debugger scripts are always loaded a Classic.
if (mWorkerRef->Private()->WorkerType() == WorkerType::Classic ||
IsDebuggerScript()) {
- request = new ScriptLoadRequest(ScriptKind::eClassic, SRIMetadata(),
+ request = new ScriptLoadRequest(ScriptKind::eClassic, uri, referrerPolicy,
+ fetchOptions, SRIMetadata(),
nullptr, // mReferrer
loadContext);
} else {
@@ -728,14 +729,15 @@ already_AddRefed<ScriptLoadRequest> WorkerScriptLoader::CreateScriptLoadRequest(
// Part of Step 2. This sets the Top-level flag to true
request = new ModuleLoadRequest(
- JS::ModuleType::JavaScript, SRIMetadata(), referrer, loadContext,
- ModuleLoadRequest::Kind::TopLevel, moduleLoader, nullptr);
+ uri, JS::ModuleType::JavaScript, referrerPolicy, fetchOptions,
+ SRIMetadata(), referrer, loadContext, ModuleLoadRequest::Kind::TopLevel,
+ moduleLoader, nullptr);
}
// Set the mURL, it will be used for error handling and debugging.
request->mURL = NS_ConvertUTF16toUTF8(aScriptURL);
- request->NoCacheEntryFound(referrerPolicy, fetchOptions, uri);
+ request->NoCacheEntryFound();
return request.forget();
}
@@ -989,7 +991,7 @@ nsresult WorkerScriptLoader::LoadScript(
: mWorkerRef->Private()->WorkerCredentials();
rv = GetModuleSecFlags(loadContext->IsTopLevel(), principal,
- mWorkerScriptType, request->URI(), credentials,
+ mWorkerScriptType, request->mURI, credentials,
secFlags);
} else {
referrerInfo = ReferrerInfo::CreateForFetch(principal, nullptr);
@@ -998,7 +1000,7 @@ nsresult WorkerScriptLoader::LoadScript(
static_cast<ReferrerInfo*>(referrerInfo.get())
->CloneWithNewPolicy(parentWorker->GetReferrerPolicy());
}
- rv = GetClassicSecFlags(loadContext->IsTopLevel(), request->URI(),
+ rv = GetClassicSecFlags(loadContext->IsTopLevel(), request->mURI,
principal, mWorkerScriptType, secFlags);
}
@@ -1010,7 +1012,7 @@ nsresult WorkerScriptLoader::LoadScript(
rv = ChannelFromScriptURL(
principal, parentDoc, mWorkerRef->Private(), loadGroup, ios, secMan,
- request->URI(), loadContext->mClientInfo, mController,
+ request->mURI, loadContext->mClientInfo, mController,
loadContext->IsTopLevel(), mWorkerScriptType, contentPolicyType,
loadFlags, secFlags, mWorkerRef->Private()->CookieJarSettings(),
referrerInfo, getter_AddRefs(channel));
@@ -1257,9 +1259,11 @@ bool WorkerScriptLoader::EvaluateScript(JSContext* aCx,
if (loadContext->mMutedErrorFlag.valueOr(false)) {
NS_NewURI(getter_AddRefs(requestBaseURI), "about:blank"_ns);
} else {
- requestBaseURI = aRequest->BaseURL();
+ requestBaseURI = aRequest->mBaseURL;
}
MOZ_ASSERT(aRequest->mLoadedScript->IsClassicScript());
+ MOZ_ASSERT(aRequest->mLoadedScript->GetFetchOptions() ==
+ aRequest->mFetchOptions);
aRequest->mLoadedScript->SetBaseURL(requestBaseURI);
classicScript = aRequest->mLoadedScript->AsClassicScript();
}
diff --git a/dom/workers/loader/CacheLoadHandler.cpp b/dom/workers/loader/CacheLoadHandler.cpp
@@ -558,8 +558,8 @@ nsresult CacheLoadHandler::DataReceivedFromCache(
nsCOMPtr<nsIURI> finalURI;
rv = NS_NewURI(getter_AddRefs(finalURI), loadContext->mFullURL);
- if (!loadContext->mRequest->BaseURL()) {
- loadContext->mRequest->SetBaseURL(finalURI);
+ if (!loadContext->mRequest->mBaseURL) {
+ loadContext->mRequest->mBaseURL = finalURI;
}
if (loadContext->IsTopLevel()) {
if (NS_SUCCEEDED(rv)) {
diff --git a/dom/workers/loader/WorkerModuleLoader.cpp b/dom/workers/loader/WorkerModuleLoader.cpp
@@ -97,10 +97,11 @@ already_AddRefed<ModuleLoadRequest> WorkerModuleLoader::CreateRequest(
JS::ModuleType moduleType = JS::GetModuleRequestType(aCx, aModuleRequest);
RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest(
- moduleType, SRIMetadata(), aBaseURL, loadContext, kind, this, root);
+ aURI, moduleType, aReferrerPolicy, aOptions, SRIMetadata(), aBaseURL,
+ loadContext, kind, this, root);
- request->mURL = aURI->GetSpecOrDefault();
- request->NoCacheEntryFound(aReferrerPolicy, aOptions, aURI);
+ request->mURL = request->mURI->GetSpecOrDefault();
+ request->NoCacheEntryFound();
return request.forget();
}
diff --git a/dom/worklet/WorkletFetchHandler.cpp b/dom/worklet/WorkletFetchHandler.cpp
@@ -114,11 +114,12 @@ NS_IMETHODIMP StartModuleLoadRunnable::RunOnWorkletThread() {
// Part of Step 2. This sets the Top-level flag to true
RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest(
- JS::ModuleType::JavaScript, SRIMetadata(), mReferrer, loadContext,
- ModuleLoadRequest::Kind::TopLevel, moduleLoader, nullptr);
+ mURI, JS::ModuleType::JavaScript, ReferrerPolicy::_empty, fetchOptions,
+ SRIMetadata(), mReferrer, loadContext, ModuleLoadRequest::Kind::TopLevel,
+ moduleLoader, nullptr);
- request->mURL = mURI->GetSpecOrDefault();
- request->NoCacheEntryFound(ReferrerPolicy::_empty, fetchOptions, mURI);
+ request->mURL = request->mURI->GetSpecOrDefault();
+ request->NoCacheEntryFound();
return request->StartModuleLoad();
}
@@ -217,7 +218,7 @@ NS_IMETHODIMP FetchCompleteRunnable::RunOnWorkletThread() {
NS_ENSURE_SUCCESS(rv, rv);
}
- request->SetBaseURL(mURI);
+ request->mBaseURL = mURI;
request->OnFetchComplete(mResult);
moduleLoader->RemoveRequest(mURI);
return NS_OK;
diff --git a/dom/worklet/loader/WorkletModuleLoader.cpp b/dom/worklet/loader/WorkletModuleLoader.cpp
@@ -78,12 +78,12 @@ already_AddRefed<ModuleLoadRequest> WorkletModuleLoader::CreateRequest(
const nsMainThreadPtrHandle<WorkletFetchHandler>& handlerRef =
context->GetHandlerRef();
RefPtr<WorkletLoadContext> loadContext = new WorkletLoadContext(handlerRef);
- RefPtr<ModuleLoadRequest> request =
- new ModuleLoadRequest(moduleType, SRIMetadata(), aBaseURL, loadContext,
- ModuleLoadRequest::Kind::StaticImport, this, root);
+ RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest(
+ aURI, moduleType, aReferrerPolicy, aOptions, SRIMetadata(), aBaseURL,
+ loadContext, ModuleLoadRequest::Kind::StaticImport, this, root);
- request->mURL = aURI->GetSpecOrDefault();
- request->NoCacheEntryFound(aReferrerPolicy, aOptions, aURI);
+ request->mURL = request->mURI->GetSpecOrDefault();
+ request->NoCacheEntryFound();
return request.forget();
}
@@ -93,11 +93,11 @@ bool WorkletModuleLoader::CanStartLoad(ModuleLoadRequest* aRequest,
}
nsresult WorkletModuleLoader::StartFetch(ModuleLoadRequest* aRequest) {
- InsertRequest(aRequest->URI(), aRequest);
+ InsertRequest(aRequest->mURI, aRequest);
RefPtr<StartFetchRunnable> runnable =
new StartFetchRunnable(aRequest->GetWorkletLoadContext()->GetHandlerRef(),
- aRequest->URI(), aRequest->mReferrer);
+ aRequest->mURI, aRequest->mReferrer);
NS_DispatchToMainThread(runnable.forget());
return NS_OK;
}
diff --git a/js/loader/LoadedScript.cpp b/js/loader/LoadedScript.cpp
@@ -28,19 +28,8 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(LoadedScript)
NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_END
-// LoadedScript can be accessed from multiple threads.
-//
-// For instance, worker script loader passes the ScriptLoadRequest and
-// the associated LoadedScript to the main thread to perform the actual load.
-// Even while it's handled by the main thread, the LoadedScript is
-// the target of the worker thread's cycle collector.
-//
-// Fields that can be modified by other threads shouldn't be touched by
-// the cycle collection.
-//
-// NOTE: nsIURI doesn't have to be touched here because it cannot be a part
-// of cycle.
-NS_IMPL_CYCLE_COLLECTION(LoadedScript, mFetchOptions, mCacheInfo)
+NS_IMPL_CYCLE_COLLECTION(LoadedScript, mFetchOptions, mURI, mBaseURL,
+ mCacheInfo)
NS_IMPL_CYCLE_COLLECTING_ADDREF(LoadedScript)
NS_IMPL_CYCLE_COLLECTING_RELEASE(LoadedScript)
@@ -210,22 +199,6 @@ nsresult LoadedScript::GetScriptSource(JSContext* aCx,
return NS_OK;
}
-static bool IsInternalURIScheme(nsIURI* uri) {
- return uri->SchemeIs("moz-extension") || uri->SchemeIs("resource") ||
- uri->SchemeIs("moz-src") || uri->SchemeIs("chrome");
-}
-
-void LoadedScript::SetBaseURLFromChannelAndOriginalURI(nsIChannel* aChannel,
- nsIURI* aOriginalURI) {
- // Fixup moz-extension: and resource: URIs, because the channel URI will
- // point to file:, which won't be allowed to load.
- if (aOriginalURI && IsInternalURIScheme(aOriginalURI)) {
- mBaseURL = aOriginalURI;
- } else {
- aChannel->GetURI(getter_AddRefs(mBaseURL));
- }
-}
-
inline void CheckModuleScriptPrivate(LoadedScript* script,
const Value& aPrivate) {
#ifdef DEBUG
@@ -278,16 +251,6 @@ ClassicScript::ClassicScript(mozilla::dom::ReferrerPolicy aReferrerPolicy,
}
//////////////////////////////////////////////////////////////
-// ImportMapScript
-//////////////////////////////////////////////////////////////
-
-ImportMapScript::ImportMapScript(mozilla::dom::ReferrerPolicy aReferrerPolicy,
- ScriptFetchOptions* aFetchOptions,
- nsIURI* aURI)
- : LoadedScript(ScriptKind::eImportMap, aReferrerPolicy, aFetchOptions,
- aURI) {}
-
-//////////////////////////////////////////////////////////////
// ModuleScript
//////////////////////////////////////////////////////////////
diff --git a/js/loader/LoadedScript.h b/js/loader/LoadedScript.h
@@ -84,10 +84,10 @@ class LoadedScript : public nsIMemoryReporter {
bool IsClassicScript() const { return mKind == ScriptKind::eClassic; }
bool IsModuleScript() const { return mKind == ScriptKind::eModule; }
bool IsEventScript() const { return mKind == ScriptKind::eEvent; }
- bool IsImportMapScript() const { return mKind == ScriptKind::eImportMap; }
inline ClassicScript* AsClassicScript();
inline ModuleScript* AsModuleScript();
+ inline EventScript* AsEventScript();
// Used to propagate Fetch Options to child modules
ScriptFetchOptions* GetFetchOptions() const { return mFetchOptions; }
@@ -97,7 +97,10 @@ class LoadedScript : public nsIMemoryReporter {
}
nsIURI* GetURI() const { return mURI; }
- void SetBaseURL(nsIURI* aBaseURL) { mBaseURL = aBaseURL; }
+ void SetBaseURL(nsIURI* aBaseURL) {
+ MOZ_ASSERT(!mBaseURL);
+ mBaseURL = aBaseURL;
+ }
nsIURI* BaseURL() const { return mBaseURL; }
void AssociateWithScript(JSScript* aScript);
@@ -275,13 +278,6 @@ class LoadedScript : public nsIMemoryReporter {
// Drop the reference to the cache info channel.
void DropDiskCacheReference() { mCacheInfo = nullptr; }
- /*
- * Set the mBaseURL, based on aChannel.
- * aOriginalURI is the result of aChannel->GetOriginalURI.
- */
- void SetBaseURLFromChannelAndOriginalURI(nsIChannel* aChannel,
- nsIURI* aOriginalURI);
-
public:
// Fields.
@@ -296,11 +292,9 @@ class LoadedScript : public nsIMemoryReporter {
uint8_t mFetchCount = 0;
private:
- const ScriptKind mKind;
+ ScriptKind mKind;
protected:
- // The referrer policy used for the initial fetch and for fetching any
- // imported modules
mozilla::dom::ReferrerPolicy mReferrerPolicy;
public:
@@ -310,8 +304,6 @@ class LoadedScript : public nsIMemoryReporter {
private:
RefPtr<ScriptFetchOptions> mFetchOptions;
nsCOMPtr<nsIURI> mURI;
-
- // The base URL used for resolving relative module imports.
nsCOMPtr<nsIURI> mBaseURL;
public:
@@ -366,30 +358,6 @@ class LoadedScriptDelegate {
bool IsModuleScript() const { return GetLoadedScript()->IsModuleScript(); }
bool IsEventScript() const { return GetLoadedScript()->IsEventScript(); }
- bool IsImportMapScript() const {
- return GetLoadedScript()->IsImportMapScript();
- }
-
- mozilla::dom::ReferrerPolicy ReferrerPolicy() const {
- return GetLoadedScript()->ReferrerPolicy();
- }
- void UpdateReferrerPolicy(mozilla::dom::ReferrerPolicy aReferrerPolicy) {
- GetLoadedScript()->AsModuleScript()->UpdateReferrerPolicy(aReferrerPolicy);
- }
-
- ScriptFetchOptions* FetchOptions() const {
- return GetLoadedScript()->GetFetchOptions();
- }
-
- nsIURI* URI() const { return GetLoadedScript()->GetURI(); }
-
- nsIURI* BaseURL() const { return GetLoadedScript()->BaseURL(); }
- void SetBaseURL(nsIURI* aBaseURL) { GetLoadedScript()->SetBaseURL(aBaseURL); }
- void SetBaseURLFromChannelAndOriginalURI(nsIChannel* aChannel,
- nsIURI* aOriginalURI) {
- GetLoadedScript()->SetBaseURLFromChannelAndOriginalURI(aChannel,
- aOriginalURI);
- }
bool IsUnknownDataType() const {
return GetLoadedScript()->IsUnknownDataType();
@@ -485,14 +453,6 @@ class EventScript final : public LoadedScript {
ScriptFetchOptions* aFetchOptions, nsIURI* aURI);
};
-class ImportMapScript final : public LoadedScript {
- ~ImportMapScript() = default;
-
- public:
- ImportMapScript(mozilla::dom::ReferrerPolicy aReferrerPolicy,
- ScriptFetchOptions* aFetchOptions, nsIURI* aURI);
-};
-
// A single module script. May be used to satisfy multiple load requests.
class ModuleScript final : public LoadedScript {
diff --git a/js/loader/ModuleLoadRequest.cpp b/js/loader/ModuleLoadRequest.cpp
@@ -45,13 +45,16 @@ NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(ModuleLoadRequest,
NS_IMPL_CYCLE_COLLECTION_TRACE_END
ModuleLoadRequest::ModuleLoadRequest(
- ModuleType aModuleType, const mozilla::dom::SRIMetadata& aIntegrity,
- nsIURI* aReferrer, LoadContextBase* aContext, Kind aKind,
- ModuleLoaderBase* aLoader, ModuleLoadRequest* aRootModule)
- : ScriptLoadRequest(ScriptKind::eModule, aIntegrity, aReferrer, aContext),
+ nsIURI* aURI, ModuleType aModuleType,
+ mozilla::dom::ReferrerPolicy aReferrerPolicy,
+ ScriptFetchOptions* aFetchOptions,
+ const mozilla::dom::SRIMetadata& aIntegrity, nsIURI* aReferrer,
+ LoadContextBase* aContext, Kind aKind, ModuleLoaderBase* aLoader,
+ ModuleLoadRequest* aRootModule)
+ : ScriptLoadRequest(ScriptKind::eModule, aURI, aReferrerPolicy,
+ aFetchOptions, aIntegrity, aReferrer, aContext),
mKind(aKind),
mModuleType(aModuleType),
- mIsDynamicImport(aKind == Kind::DynamicImport),
mErroredLoadingImports(false),
mLoader(aLoader),
mRootModule(aRootModule) {
@@ -96,7 +99,7 @@ void ModuleLoadRequest::ModuleLoaded() {
MOZ_ASSERT(IsFetching());
- mModuleScript = mLoader->GetFetchedModule(ModuleMapKey(URI(), mModuleType));
+ mModuleScript = mLoader->GetFetchedModule(ModuleMapKey(mURI, mModuleType));
}
void ModuleLoadRequest::LoadFailed() {
diff --git a/js/loader/ModuleLoadRequest.h b/js/loader/ModuleLoadRequest.h
@@ -50,8 +50,11 @@ class ModuleLoadRequest final : public ScriptLoadRequest {
DynamicImport,
};
- ModuleLoadRequest(ModuleType aModuleType, const SRIMetadata& aIntegrity,
- nsIURI* aReferrer, LoadContextBase* aContext, Kind aKind,
+ ModuleLoadRequest(nsIURI* aURI, ModuleType aModuleType,
+ mozilla::dom::ReferrerPolicy aReferrerPolicy,
+ ScriptFetchOptions* aFetchOptions,
+ const SRIMetadata& aIntegrity, nsIURI* aReferrer,
+ LoadContextBase* aContext, Kind aKind,
ModuleLoaderBase* aLoader, ModuleLoadRequest* aRootModule);
bool IsTopLevel() const override { return mKind == Kind::TopLevel; }
@@ -104,22 +107,21 @@ class ModuleLoadRequest final : public ScriptLoadRequest {
void LoadFinished();
+ void UpdateReferrerPolicy(mozilla::dom::ReferrerPolicy aReferrerPolicy) {
+ mReferrerPolicy = aReferrerPolicy;
+ }
+
+ const Kind mKind;
+
void SetErroredLoadingImports() {
MOZ_ASSERT(IsDynamicImport());
MOZ_ASSERT(IsFetching() || IsCompiling());
mErroredLoadingImports = true;
}
- public:
- // Fields.
- const Kind mKind;
-
// Type of module (JavaScript, JSON)
const ModuleType mModuleType;
- // Is this the top level request for a dynamic module import?
- const bool mIsDynamicImport;
-
// A flag (for dynamic import) that indicates the module script is
// successfully fetched and compiled, but its dependencies are failed to load.
bool mErroredLoadingImports;
diff --git a/js/loader/ModuleLoaderBase.cpp b/js/loader/ModuleLoaderBase.cpp
@@ -553,7 +553,7 @@ nsresult ModuleLoaderBase::StartOrRestartModuleLoad(ModuleLoadRequest* aRequest,
if (LOG_ENABLED()) {
nsAutoCString url;
- aRequest->URI()->GetAsciiSpec(url);
+ aRequest->mURI->GetAsciiSpec(url);
LOG(("ScriptLoadRequest (%p): Start module load %s", aRequest, url.get()));
}
@@ -561,7 +561,7 @@ nsresult ModuleLoaderBase::StartOrRestartModuleLoad(ModuleLoadRequest* aRequest,
// "fetching" map.
MOZ_ASSERT_IF(
aRestart == RestartRequest::Yes,
- IsModuleFetching(ModuleMapKey(aRequest->URI(), aRequest->mModuleType)));
+ IsModuleFetching(ModuleMapKey(aRequest->mURI, aRequest->mModuleType)));
// Check with the derived class whether we should load this module.
nsresult rv = NS_OK;
@@ -573,7 +573,7 @@ nsresult ModuleLoaderBase::StartOrRestartModuleLoad(ModuleLoadRequest* aRequest,
// and if so wait for it rather than starting a new fetch.
if (aRestart == RestartRequest::No &&
ModuleMapContainsURL(
- ModuleMapKey(aRequest->URI(), aRequest->mModuleType))) {
+ ModuleMapKey(aRequest->mURI, aRequest->mModuleType))) {
LOG(("ScriptLoadRequest (%p): Waiting for module fetch", aRequest));
WaitForModuleFetch(aRequest);
return NS_OK;
@@ -584,7 +584,7 @@ nsresult ModuleLoaderBase::StartOrRestartModuleLoad(ModuleLoadRequest* aRequest,
if (isCachedStencil) {
MOZ_ASSERT(
- IsModuleFetched(ModuleMapKey(aRequest->URI(), aRequest->mModuleType)));
+ IsModuleFetched(ModuleMapKey(aRequest->mURI, aRequest->mModuleType)));
return NS_OK;
}
@@ -626,7 +626,7 @@ nsresult ModuleLoaderBase::GetFetchedModuleURLs(nsTArray<nsCString>& aURLs) {
void ModuleLoaderBase::SetModuleFetchStarted(ModuleLoadRequest* aRequest) {
// Update the module map to indicate that a module is currently being fetched.
- ModuleMapKey moduleMapKey(aRequest->URI(), aRequest->mModuleType);
+ ModuleMapKey moduleMapKey(aRequest->mURI, aRequest->mModuleType);
MOZ_ASSERT(aRequest->IsFetching());
MOZ_ASSERT(!ModuleMapContainsURL(moduleMapKey));
@@ -651,7 +651,7 @@ ModuleLoaderBase::SetModuleFetchFinishedAndGetWaitingRequests(
"%u)",
aRequest, aRequest->mModuleScript.get(), unsigned(aResult)));
- ModuleMapKey moduleMapKey(aRequest->URI(), aRequest->mModuleType);
+ ModuleMapKey moduleMapKey(aRequest->mURI, aRequest->mModuleType);
auto entry = mFetchingModules.Lookup(moduleMapKey);
if (!entry) {
@@ -707,7 +707,7 @@ void ModuleLoaderBase::ResumeWaitingRequest(ModuleLoadRequest* aRequest,
}
void ModuleLoaderBase::WaitForModuleFetch(ModuleLoadRequest* aRequest) {
- ModuleMapKey moduleMapKey(aRequest->URI(), aRequest->mModuleType);
+ ModuleMapKey moduleMapKey(aRequest->mURI, aRequest->mModuleType);
MOZ_ASSERT(ModuleMapContainsURL(moduleMapKey));
if (auto entry = mFetchingModules.Lookup(moduleMapKey)) {
@@ -866,7 +866,7 @@ void ModuleLoaderBase::OnFetchFailed(ModuleLoadRequest* aRequest) {
// cases.
if (aRequest->GetRootModule()->IsDynamicImport()) {
nsAutoCString url;
- aRequest->URI()->GetSpec(url);
+ aRequest->mURI->GetSpec(url);
JS_ReportErrorNumberASCII(cx, js::GetErrorMessage, nullptr,
JSMSG_DYNAMIC_IMPORT_FAILED, url.get());
FinishLoadingImportedModuleFailedWithPendingException(cx, payload);
@@ -962,7 +962,7 @@ void ModuleLoaderBase::DispatchModuleErrored(ModuleLoadRequest* aRequest) {
nsresult ModuleLoaderBase::CreateModuleScript(ModuleLoadRequest* aRequest) {
MOZ_ASSERT(!aRequest->mModuleScript);
- MOZ_ASSERT(aRequest->BaseURL());
+ MOZ_ASSERT(aRequest->mBaseURL);
LOG(("ScriptLoadRequest (%p): Create module script", aRequest));
@@ -1002,6 +1002,29 @@ nsresult ModuleLoaderBase::CreateModuleScript(ModuleLoadRequest* aRequest) {
}
MOZ_ASSERT(aRequest->mLoadedScript->IsModuleScript());
+ MOZ_ASSERT(aRequest->mFetchOptions->IsCompatible(
+ aRequest->mLoadedScript->GetFetchOptions()));
+#ifdef DEBUG
+ {
+ bool equals = false;
+ aRequest->mURI->Equals(aRequest->mLoadedScript->GetURI(), &equals);
+ MOZ_ASSERT(equals);
+ }
+#endif
+
+ if (!aRequest->mLoadedScript->BaseURL()) {
+ // If this script is not cached, the BaseURL should be copied from
+ // request to script for later use.
+ aRequest->mLoadedScript->SetBaseURL(aRequest->mBaseURL);
+ } else {
+ // If this script is cached, the BaseURL should match, which is
+ // checked when looking for the cache.
+#ifdef DEBUG
+ bool equals = false;
+ aRequest->mBaseURL->Equals(aRequest->mLoadedScript->BaseURL(), &equals);
+ MOZ_ASSERT(equals);
+#endif
+ }
RefPtr<ModuleScript> moduleScript =
aRequest->mLoadedScript->AsModuleScript();
@@ -1219,8 +1242,8 @@ void ModuleLoaderBase::StartFetchingModuleDependencies(
// destroyed. As a result, the promise returned by LoadRequestedModules may
// neither resolve nor reject. To ensure module loading completes reliably in
// chrome pages, we use the synchronous variant of LoadRequestedModules.
- bool isSync = aRequest->URI()->SchemeIs("chrome") ||
- aRequest->URI()->SchemeIs("resource");
+ bool isSync = aRequest->mURI->SchemeIs("chrome") ||
+ aRequest->mURI->SchemeIs("resource");
// TODO: Bug1973660: Use Promise version of LoadRequestedModules on Workers.
if (aRequest->HasScriptLoadContext() && !isSync) {
@@ -1342,7 +1365,7 @@ bool ModuleLoaderBase::OnLoadRequestedModulesRejected(
FinishLoadingImportedModuleFailed(aCx, payload, error);
} else {
nsAutoCString url;
- aRequest->URI()->GetSpec(url);
+ aRequest->mURI->GetSpec(url);
JS_ReportErrorNumberASCII(aCx, js::GetErrorMessage, nullptr,
JSMSG_DYNAMIC_IMPORT_FAILED, url.get());
FinishLoadingImportedModuleFailedWithPendingException(aCx, payload);
@@ -1685,7 +1708,7 @@ UniquePtr<ImportMap> ModuleLoaderBase::ParseImportMap(
// supported, therefore parsing and registering import-maps will be executed
// consecutively. To simplify the implementation, we didn't create the 'error
// to rethow' item and report the exception immediately(done in ~AutoJSAPI).
- return ImportMap::ParseString(jsapi.cx(), text, aRequest->BaseURL(), warning);
+ return ImportMap::ParseString(jsapi.cx(), text, aRequest->mBaseURL, warning);
}
void ModuleLoaderBase::RegisterImportMap(UniquePtr<ImportMap> aImportMap) {
diff --git a/js/loader/ScriptLoadRequest.cpp b/js/loader/ScriptLoadRequest.cpp
@@ -80,23 +80,29 @@ NS_IMPL_CYCLE_COLLECTING_RELEASE(ScriptLoadRequest)
//
// NOTE: nsIURI and nsIPrincipal doesn't have to be touched here because
// they cannot be a part of cycle.
-NS_IMPL_CYCLE_COLLECTION(ScriptLoadRequest, mLoadedScript, mLoadContext)
+NS_IMPL_CYCLE_COLLECTION(ScriptLoadRequest, mFetchOptions, mLoadedScript,
+ mLoadContext)
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(ScriptLoadRequest)
NS_IMPL_CYCLE_COLLECTION_TRACE_END
-ScriptLoadRequest::ScriptLoadRequest(ScriptKind aKind,
- const SRIMetadata& aIntegrity,
- nsIURI* aReferrer,
- LoadContextBase* aContext)
+ScriptLoadRequest::ScriptLoadRequest(
+ ScriptKind aKind, nsIURI* aURI,
+ mozilla::dom::ReferrerPolicy aReferrerPolicy,
+ ScriptFetchOptions* aFetchOptions, const SRIMetadata& aIntegrity,
+ nsIURI* aReferrer, LoadContextBase* aContext)
: mKind(aKind),
mState(State::CheckingCache),
mFetchSourceOnly(false),
mHasSourceMapURL_(false),
+ mReferrerPolicy(aReferrerPolicy),
+ mFetchOptions(aFetchOptions),
mIntegrity(aIntegrity),
mReferrer(aReferrer),
+ mURI(aURI),
mLoadContext(aContext),
mEarlyHintPreloaderId(0) {
+ MOZ_ASSERT(mFetchOptions);
if (mLoadContext) {
mLoadContext->SetRequest(this);
}
@@ -170,9 +176,13 @@ bool ScriptLoadRequest::IsCacheable() const {
void ScriptLoadRequest::CacheEntryFound(LoadedScript* aLoadedScript) {
MOZ_ASSERT(IsCheckingCache());
+ MOZ_ASSERT(mURI);
+
+ MOZ_ASSERT(mFetchOptions->IsCompatible(aLoadedScript->GetFetchOptions()));
switch (mKind) {
case ScriptKind::eClassic:
+ case ScriptKind::eImportMap:
MOZ_ASSERT(aLoadedScript->IsClassicScript());
mLoadedScript = aLoadedScript;
@@ -180,13 +190,6 @@ void ScriptLoadRequest::CacheEntryFound(LoadedScript* aLoadedScript) {
// Classic scripts can be set ready once the script itself is ready.
mState = State::Ready;
break;
- case ScriptKind::eImportMap:
- MOZ_ASSERT(aLoadedScript->IsImportMapScript());
-
- mLoadedScript = aLoadedScript;
-
- mState = State::Ready;
- break;
case ScriptKind::eModule:
// NOTE: The cache entry has "module" kind, but it's not ModuleScript
// instance, given ModuleScript has GC pointers.
@@ -194,6 +197,16 @@ void ScriptLoadRequest::CacheEntryFound(LoadedScript* aLoadedScript) {
mLoadedScript = ModuleScript::FromCache(*aLoadedScript);
+#ifdef DEBUG
+ {
+ bool equals = false;
+ mURI->Equals(mLoadedScript->GetURI(), &equals);
+ MOZ_ASSERT(equals);
+ }
+#endif
+
+ mBaseURL = mLoadedScript->BaseURL();
+
// Modules need to wait for fetching dependencies before setting to
// Ready.
mState = State::Fetching;
@@ -204,24 +217,19 @@ void ScriptLoadRequest::CacheEntryFound(LoadedScript* aLoadedScript) {
}
}
-void ScriptLoadRequest::NoCacheEntryFound(
- mozilla::dom::ReferrerPolicy aReferrerPolicy,
- ScriptFetchOptions* aFetchOptions, nsIURI* aURI) {
+void ScriptLoadRequest::NoCacheEntryFound() {
MOZ_ASSERT(IsCheckingCache());
- // At the time where we check in the cache, the BaseURL() is not set, as this
- // is resolved by the network. Thus we use the aURI passed by the consumer,
- // which is the original URI used for the request, for checking the cache
- // and later replace the BaseURL() using what the Channel->GetURI will
- // provide.
+ MOZ_ASSERT(mURI);
+ // At the time where we check in the cache, the mBaseURL is not set, as this
+ // is resolved by the network. Thus we use the mURI, for checking the cache
+ // and later replace the mBaseURL using what the Channel->GetURI will provide.
switch (mKind) {
case ScriptKind::eClassic:
- mLoadedScript = new ClassicScript(aReferrerPolicy, aFetchOptions, aURI);
- break;
case ScriptKind::eImportMap:
- mLoadedScript = new ImportMapScript(aReferrerPolicy, aFetchOptions, aURI);
+ mLoadedScript = new ClassicScript(mReferrerPolicy, mFetchOptions, mURI);
break;
case ScriptKind::eModule:
- mLoadedScript = new ModuleScript(aReferrerPolicy, aFetchOptions, aURI);
+ mLoadedScript = new ModuleScript(mReferrerPolicy, mFetchOptions, mURI);
break;
case ScriptKind::eEvent:
MOZ_ASSERT_UNREACHABLE("EventScripts are not using ScriptLoadRequest");
@@ -230,4 +238,20 @@ void ScriptLoadRequest::NoCacheEntryFound(
mState = State::Fetching;
}
+static bool IsInternalURIScheme(nsIURI* uri) {
+ return uri->SchemeIs("moz-extension") || uri->SchemeIs("resource") ||
+ uri->SchemeIs("moz-src") || uri->SchemeIs("chrome");
+}
+
+void ScriptLoadRequest::SetBaseURLFromChannelAndOriginalURI(
+ nsIChannel* aChannel, nsIURI* aOriginalURI) {
+ // Fixup moz-extension: and resource: URIs, because the channel URI will
+ // point to file:, which won't be allowed to load.
+ if (aOriginalURI && IsInternalURIScheme(aOriginalURI)) {
+ mBaseURL = aOriginalURI;
+ } else {
+ aChannel->GetURI(getter_AddRefs(mBaseURL));
+ }
+}
+
} // namespace JS::loader
diff --git a/js/loader/ScriptLoadRequest.h b/js/loader/ScriptLoadRequest.h
@@ -91,8 +91,11 @@ class ScriptLoadRequest : public nsISupports,
public:
using SRIMetadata = mozilla::dom::SRIMetadata;
- ScriptLoadRequest(ScriptKind aKind, const SRIMetadata& aIntegrity,
- nsIURI* aReferrer, LoadContextBase* aContext);
+ ScriptLoadRequest(ScriptKind aKind, nsIURI* aURI,
+ mozilla::dom::ReferrerPolicy aReferrerPolicy,
+ ScriptFetchOptions* aFetchOptions,
+ const SRIMetadata& aIntegrity, nsIURI* aReferrer,
+ LoadContextBase* aContext);
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(ScriptLoadRequest)
@@ -150,17 +153,21 @@ class ScriptLoadRequest : public nsISupports,
}
mozilla::dom::RequestPriority FetchPriority() const {
- return FetchOptions()->mFetchPriority;
+ return mFetchOptions->mFetchPriority;
+ }
+
+ enum mozilla::dom::ReferrerPolicy ReferrerPolicy() const {
+ return mReferrerPolicy;
}
enum ParserMetadata ParserMetadata() const {
- return FetchOptions()->mParserMetadata;
+ return mFetchOptions->mParserMetadata;
}
- const nsString& Nonce() const { return FetchOptions()->mNonce; }
+ const nsString& Nonce() const { return mFetchOptions->mNonce; }
nsIPrincipal* TriggeringPrincipal() const {
- return FetchOptions()->mTriggeringPrincipal;
+ return mFetchOptions->mTriggeringPrincipal;
}
// Convert a CheckingCache ScriptLoadRequest into a Ready one, by populating
@@ -170,8 +177,7 @@ class ScriptLoadRequest : public nsISupports,
// Convert a CheckingCache ScriptLoadRequest into a Fetching one, by creating
// a new LoadedScript which is matching the ScriptKind provided when
// constructing this ScriptLoadRequest.
- void NoCacheEntryFound(mozilla::dom::ReferrerPolicy aReferrerPolicy,
- ScriptFetchOptions* aFetchOptions, nsIURI* aURI);
+ void NoCacheEntryFound();
bool PassedConditionForDiskCache() const {
return mDiskCachingPlan == CachingPlan::PassedCondition;
@@ -212,7 +218,8 @@ class ScriptLoadRequest : public nsISupports,
mMemoryCachingPlan = CachingPlan::PassedCondition;
}
- mozilla::CORSMode CORSMode() const { return FetchOptions()->mCORSMode; }
+ public:
+ mozilla::CORSMode CORSMode() const { return mFetchOptions->mCORSMode; }
bool HasLoadContext() const { return mLoadContext; }
bool HasScriptLoadContext() const;
@@ -230,28 +237,18 @@ class ScriptLoadRequest : public nsISupports,
const LoadedScript* getLoadedScript() const { return mLoadedScript.get(); }
LoadedScript* getLoadedScript() { return mLoadedScript.get(); }
- bool HasSourceMapURL() const { return mHasSourceMapURL_; }
- const nsString& GetSourceMapURL() const {
- MOZ_ASSERT(mHasSourceMapURL_);
- return mMaybeSourceMapURL_;
- }
- void SetSourceMapURL(const nsString& aSourceMapURL) {
- MOZ_ASSERT(!mHasSourceMapURL_);
- mMaybeSourceMapURL_ = aSourceMapURL;
- mHasSourceMapURL_ = true;
- }
-
- public:
- // Fields.
+ /*
+ * Set the request's mBaseURL, based on aChannel.
+ * aOriginalURI is the result of aChannel->GetOriginalURI.
+ */
+ void SetBaseURLFromChannelAndOriginalURI(nsIChannel* aChannel,
+ nsIURI* aOriginalURI);
- // Whether this is a classic script, a module script, or an import map.
- const ScriptKind mKind;
+ const ScriptKind mKind; // Whether this is a classic script or a module
+ // script.
- // Are we still waiting for a load to complete?
- State mState;
-
- // Request source, not cached bytecode.
- bool mFetchSourceOnly;
+ State mState; // Are we still waiting for a load to complete?
+ bool mFetchSourceOnly; // Request source, not cached bytecode.
// Becomes true if this has source map url.
//
@@ -272,8 +269,13 @@ class ScriptLoadRequest : public nsISupports,
CachingPlan mDiskCachingPlan = CachingPlan::Uninitialized;
CachingPlan mMemoryCachingPlan = CachingPlan::Uninitialized;
+ // The referrer policy used for the initial fetch and for fetching any
+ // imported modules
+ enum mozilla::dom::ReferrerPolicy mReferrerPolicy;
+
CacheExpirationTime mExpirationTime = CacheExpirationTime::Never();
+ RefPtr<ScriptFetchOptions> mFetchOptions;
RefPtr<mozilla::SubResourceNetworkMetadataHolder> mNetworkMetadata;
const SRIMetadata mIntegrity;
const nsCOMPtr<nsIURI> mReferrer;
@@ -284,6 +286,18 @@ class ScriptLoadRequest : public nsISupports,
// Use HasSourceMapURL(), SetSourceMapURL(), and GetSourceMapURL().
nsString mMaybeSourceMapURL_;
+ bool HasSourceMapURL() const { return mHasSourceMapURL_; }
+ const nsString& GetSourceMapURL() const {
+ MOZ_ASSERT(mHasSourceMapURL_);
+ return mMaybeSourceMapURL_;
+ }
+ void SetSourceMapURL(const nsString& aSourceMapURL) {
+ MOZ_ASSERT(!mHasSourceMapURL_);
+ mMaybeSourceMapURL_ = aSourceMapURL;
+ mHasSourceMapURL_ = true;
+ }
+
+ const nsCOMPtr<nsIURI> mURI;
nsCOMPtr<nsIPrincipal> mOriginPrincipal;
// Keep the URI's filename alive during off thread parsing.
@@ -291,6 +305,9 @@ class ScriptLoadRequest : public nsISupports,
// worklets as the file name in compile options.
nsAutoCString mURL;
+ // The base URL used for resolving relative module imports.
+ nsCOMPtr<nsIURI> mBaseURL;
+
// The loaded script holds the source / bytecode which is loaded.
//
// Currently it is used to hold information which are needed by the Debugger.
diff --git a/js/xpconnect/loader/SyncModuleLoader.cpp b/js/xpconnect/loader/SyncModuleLoader.cpp
@@ -81,8 +81,9 @@ already_AddRefed<ModuleLoadRequest> SyncModuleLoader::CreateRequest(
}
RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest(
- moduleType, dom::SRIMetadata(), aBaseURL, context, kind, this, root);
- request->NoCacheEntryFound(aReferrerPolicy, aOptions, aURI);
+ aURI, moduleType, aReferrerPolicy, aOptions, dom::SRIMetadata(), aBaseURL,
+ context, kind, this, root);
+ request->NoCacheEntryFound();
return request.forget();
}
@@ -125,13 +126,13 @@ void SyncModuleLoader::OnDynamicImportStarted(ModuleLoadRequest* aRequest) {
bool SyncModuleLoader::CanStartLoad(ModuleLoadRequest* aRequest,
nsresult* aRvOut) {
- return nsContentSecurityUtils::IsTrustedScheme(aRequest->URI());
+ return nsContentSecurityUtils::IsTrustedScheme(aRequest->mURI);
}
nsresult SyncModuleLoader::StartFetch(ModuleLoadRequest* aRequest) {
MOZ_ASSERT(aRequest->HasLoadContext());
- aRequest->SetBaseURL(aRequest->URI());
+ aRequest->mBaseURL = aRequest->mURI;
// Loading script source and compilation are intertwined in
// mozJSModuleLoader. Perform both operations here but only report load
@@ -153,7 +154,7 @@ nsresult SyncModuleLoader::StartFetch(ModuleLoadRequest* aRequest) {
bool threwException = jsapi.HasException();
if (NS_FAILED(rv) && !threwException) {
nsAutoCString uri;
- nsresult rv2 = aRequest->URI()->GetSpec(uri);
+ nsresult rv2 = aRequest->mURI->GetSpec(uri);
NS_ENSURE_SUCCESS(rv2, rv2);
JS_ReportErrorUTF8(cx, "Failed to load %s", PromiseFlatCString(uri).get());
diff --git a/js/xpconnect/loader/mozJSModuleLoader.cpp b/js/xpconnect/loader/mozJSModuleLoader.cpp
@@ -169,7 +169,7 @@ class MOZ_STACK_CLASS ModuleLoaderInfo {
explicit ModuleLoaderInfo(const nsACString& aLocation)
: mLocation(&aLocation) {}
explicit ModuleLoaderInfo(JS::loader::ModuleLoadRequest* aRequest)
- : mLocation(nullptr), mURI(aRequest->URI()) {}
+ : mLocation(nullptr), mURI(aRequest->mURI) {}
nsIIOService* IOService() {
MOZ_ASSERT(mIOService);
@@ -603,7 +603,7 @@ nsresult mozJSModuleLoader::LoadSingleModuleScriptOnWorker(
SyncModuleLoader* aModuleLoader, JSContext* aCx,
JS::loader::ModuleLoadRequest* aRequest, MutableHandleScript aScriptOut) {
nsAutoCString location;
- nsresult rv = aRequest->URI()->GetSpec(location);
+ nsresult rv = aRequest->mURI->GetSpec(location);
NS_ENSURE_SUCCESS(rv, rv);
nsCString data;
@@ -650,7 +650,7 @@ nsresult mozJSModuleLoader::LoadSingleModuleScript(
"ChromeUtils.importESModule static import", JS,
MarkerOptions(MarkerStack::Capture(),
MarkerInnerWindowIdFromJSContext(aCx)),
- nsContentUtils::TruncatedURLForDisplay(aRequest->URI()));
+ nsContentUtils::TruncatedURLForDisplay(aRequest->mURI));
if (!NS_IsMainThread()) {
return LoadSingleModuleScriptOnWorker(aModuleLoader, aCx, aRequest,
@@ -665,7 +665,7 @@ nsresult mozJSModuleLoader::LoadSingleModuleScript(
rv = GetSourceFile(info.ResolvedURI(), getter_AddRefs(sourceFile));
NS_ENSURE_SUCCESS(rv, rv);
- bool realFile = LocationIsRealFile(aRequest->URI());
+ bool realFile = LocationIsRealFile(aRequest->mURI);
RootedScript script(aCx);
rv = GetScriptForLocation(aCx, info, sourceFile, realFile, aScriptOut);
@@ -971,7 +971,7 @@ void mozJSModuleLoader::RecordImportStack(
}
nsAutoCString location;
- nsresult rv = aRequest->URI()->GetSpec(location);
+ nsresult rv = aRequest->mURI->GetSpec(location);
if (NS_FAILED(rv)) {
return;
}
@@ -1085,11 +1085,12 @@ nsresult mozJSModuleLoader::ImportESModule(
RefPtr<SyncLoadContext> context = new SyncLoadContext();
RefPtr<ModuleLoadRequest> request = new ModuleLoadRequest(
- JS::ModuleType::JavaScript, dom::SRIMetadata(),
+ uri, JS::ModuleType::JavaScript, dom::ReferrerPolicy::No_referrer,
+ options, dom::SRIMetadata(),
/* aReferrer = */ nullptr, context, ModuleLoadRequest::Kind::TopLevel,
mModuleLoader, nullptr);
- request->NoCacheEntryFound(dom::ReferrerPolicy::No_referrer, options, uri);
+ request->NoCacheEntryFound();
rv = request->StartModuleLoad();
if (NS_FAILED(rv)) {