Skip to content

Commit 14a1867

Browse files
committed
Bug 1916277 - Part 9: Store Preloaded resolved set in the root moduleScript. r=jonco
Allocate a ResolvedModuleSet in the top-level preloading module script, and use the `aHostDefined` parameter in HostLoadImportedModule to get the corresponding preloaded ResolvedModuleSet. Differential Revision: https://phabricator.services.mozilla.com/D272782
1 parent ac6a7c2 commit 14a1867

4 files changed

Lines changed: 48 additions & 0 deletions

File tree

js/loader/LoadedScript.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -482,4 +482,12 @@ void ModuleScript::SetErrorToRethrow(const Value& aError) {
482482
void ModuleScript::SetForPreload(bool aValue) { mForPreload = aValue; }
483483
void ModuleScript::SetHadImportMap(bool aValue) { mHadImportMap = aValue; }
484484

485+
ResolvedModuleSet* ModuleScript::GetPreloadedResolvedSet() {
486+
if (!mPreloadedResolvedSet) {
487+
mPreloadedResolvedSet = mozilla::MakeUnique<ResolvedModuleSet>();
488+
}
489+
490+
return mPreloadedResolvedSet.get();
491+
}
492+
485493
} // namespace JS::loader

js/loader/LoadedScript.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include "nsIMemoryReporter.h"
2929

3030
#include "jsapi.h"
31+
#include "ResolvedModuleSet.h"
3132
#include "ScriptKind.h"
3233
#include "ScriptFetchOptions.h"
3334

@@ -664,6 +665,8 @@ class ModuleScript final : public LoadedScript {
664665
bool mForPreload = false;
665666
bool mHadImportMap = false;
666667

668+
mozilla::UniquePtr<JS::loader::ResolvedModuleSet> mPreloadedResolvedSet;
669+
667670
~ModuleScript();
668671

669672
public:
@@ -713,6 +716,10 @@ class ModuleScript final : public LoadedScript {
713716
void UpdateReferrerPolicy(mozilla::dom::ReferrerPolicy aReferrerPolicy) {
714717
mReferrerPolicy = aReferrerPolicy;
715718
}
719+
720+
bool HasPreloadedResolvedSet() { return !!mPreloadedResolvedSet; }
721+
ResolvedModuleSet* GetPreloadedResolvedSet();
722+
void ReleasePreloadedResolvedSet() { mPreloadedResolvedSet = nullptr; }
716723
};
717724

718725
ClassicScript* LoadedScript::AsClassicScript() {

js/loader/ModuleLoaderBase.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,11 +1141,32 @@ static void AddToResolvedSet(ResolvedModuleSet* aSet,
11411141
MOZ_ALWAYS_TRUE(aSet->add(ptr, std::move(aRecord)));
11421142
}
11431143

1144+
void ModuleLoaderBase::AddToPreloadedResolvedSet(
1145+
ModuleLoadRequest* aRootRequest,
1146+
UniquePtr<SpecifierResolutionRecord> aRecord) {
1147+
MOZ_ASSERT(aRootRequest);
1148+
MOZ_ASSERT(aRootRequest->mModuleScript);
1149+
1150+
ResolvedModuleSet* set =
1151+
aRootRequest->mModuleScript->GetPreloadedResolvedSet();
1152+
MOZ_ASSERT(set);
1153+
AddToResolvedSet(set, std::move(aRecord));
1154+
}
1155+
11441156
void ModuleLoaderBase::AddToGlobalResolvedSet(
11451157
UniquePtr<SpecifierResolutionRecord> aRecord) {
11461158
AddToResolvedSet(GetResolvedModuleSet(), std::move(aRecord));
11471159
}
11481160

1161+
static ModuleLoadRequest* GetPreloadRootModuleRequest(
1162+
JS::Handle<JS::Value> aHostDefined) {
1163+
MOZ_ASSERT(!aHostDefined.isUndefined());
1164+
ModuleLoadRequest* parent =
1165+
static_cast<ModuleLoadRequest*>(aHostDefined.toPrivate());
1166+
MOZ_ASSERT(parent);
1167+
return parent->GetRootModule();
1168+
}
1169+
11491170
void ModuleLoaderBase::AddToResolvedModuleSet(
11501171
UniquePtr<SpecifierResolutionRecord> aRecord, LoadedScript* aScript,
11511172
Handle<Value> aHostDefined) {
@@ -1154,6 +1175,14 @@ void ModuleLoaderBase::AddToResolvedModuleSet(
11541175
return;
11551176
}
11561177

1178+
bool isPreloadModule = aScript && aScript->IsModuleScript() &&
1179+
aScript->AsModuleScript()->ForPreload();
1180+
if (isPreloadModule) {
1181+
RefPtr<ModuleLoadRequest> root = GetPreloadRootModuleRequest(aHostDefined);
1182+
AddToPreloadedResolvedSet(root, std::move(aRecord));
1183+
return;
1184+
}
1185+
11571186
// release the mResult from the record as it is not needed.
11581187
nsCOMPtr<nsIURI> _ = aRecord->TakeResult();
11591188
AddToGlobalResolvedSet(std::move(aRecord));

js/loader/ModuleLoaderBase.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,10 @@ class ModuleLoaderBase : public nsISupports {
534534
bool IsModuleFetching(const ModuleMapKey& key) const;
535535
void WaitForModuleFetch(ModuleLoadRequest* aRequest);
536536

537+
void AddToPreloadedResolvedSet(
538+
ModuleLoadRequest* aRootRequest,
539+
mozilla::UniquePtr<SpecifierResolutionRecord> aRecord);
540+
537541
void AddToGlobalResolvedSet(
538542
mozilla::UniquePtr<SpecifierResolutionRecord> aRecord);
539543

0 commit comments

Comments
 (0)