Bug 1800641 - Part 10: Add ScriptLoadRequest::mLoadedScript. r=nbp
Depends on D197847 Differential Revision: https://phabricator.services.mozilla.com/D197848
This commit is contained in:
@@ -2761,9 +2761,14 @@ nsresult ScriptLoader::EvaluateScript(nsIGlobalObject* aGlobalObject,
|
||||
aRequest->GetScriptLoadContext()->GetProfilerLabel(profilerLabelString);
|
||||
|
||||
// Create a ClassicScript object and associate it with the JSScript.
|
||||
RefPtr<ClassicScript> classicScript = new ClassicScript(
|
||||
aRequest->ReferrerPolicy(), aRequest->mFetchOptions, aRequest->mURI);
|
||||
classicScript->SetBaseURL(aRequest->mBaseURL);
|
||||
aRequest->EnsureScript();
|
||||
MOZ_ASSERT(aRequest->mLoadedScript->IsClassicScript());
|
||||
MOZ_ASSERT(aRequest->mLoadedScript->GetFetchOptions() ==
|
||||
aRequest->mFetchOptions);
|
||||
MOZ_ASSERT(aRequest->mLoadedScript->GetURI() == aRequest->mURI);
|
||||
aRequest->mLoadedScript->SetBaseURL(aRequest->mBaseURL);
|
||||
RefPtr<ClassicScript> classicScript =
|
||||
aRequest->mLoadedScript->AsClassicScript();
|
||||
JS::Rooted<JS::Value> classicScriptValue(cx, JS::PrivateValue(classicScript));
|
||||
|
||||
JS::CompileOptions options(cx);
|
||||
|
||||
@@ -1250,9 +1250,12 @@ bool WorkerScriptLoader::EvaluateScript(JSContext* aCx,
|
||||
} else {
|
||||
requestBaseURI = aRequest->mBaseURL;
|
||||
}
|
||||
classicScript = new JS::loader::ClassicScript(
|
||||
aRequest->ReferrerPolicy(), aRequest->mFetchOptions, aRequest->mURI);
|
||||
classicScript->SetBaseURL(requestBaseURI);
|
||||
aRequest->EnsureScript();
|
||||
MOZ_ASSERT(aRequest->mLoadedScript->IsClassicScript());
|
||||
MOZ_ASSERT(aRequest->mLoadedScript->GetFetchOptions() ==
|
||||
aRequest->mFetchOptions);
|
||||
aRequest->mLoadedScript->SetBaseURL(requestBaseURI);
|
||||
classicScript = aRequest->mLoadedScript->AsClassicScript();
|
||||
}
|
||||
|
||||
JS::Rooted<JSScript*> script(aCx);
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "jsapi.h"
|
||||
#include "ScriptLoadRequest.h"
|
||||
#include "ScriptKind.h"
|
||||
#include "ScriptFetchOptions.h"
|
||||
|
||||
class nsIURI;
|
||||
@@ -41,6 +41,7 @@ class LoadedScript : public nsISupports {
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS(LoadedScript)
|
||||
|
||||
bool IsClassicScript() const { return mKind == ScriptKind::eClassic; }
|
||||
bool IsModuleScript() const { return mKind == ScriptKind::eModule; }
|
||||
bool IsEventScript() const { return mKind == ScriptKind::eEvent; }
|
||||
|
||||
|
||||
@@ -638,9 +638,14 @@ nsresult ModuleLoaderBase::CreateModuleScript(ModuleLoadRequest* aRequest) {
|
||||
}
|
||||
}
|
||||
|
||||
RefPtr<ModuleScript> moduleScript = new ModuleScript(
|
||||
aRequest->ReferrerPolicy(), aRequest->mFetchOptions, aRequest->mURI);
|
||||
moduleScript->SetBaseURL(aRequest->mBaseURL);
|
||||
aRequest->EnsureScript();
|
||||
MOZ_ASSERT(aRequest->mLoadedScript->IsModuleScript());
|
||||
MOZ_ASSERT(aRequest->mLoadedScript->GetFetchOptions() ==
|
||||
aRequest->mFetchOptions);
|
||||
MOZ_ASSERT(aRequest->mLoadedScript->GetURI() == aRequest->mURI);
|
||||
aRequest->mLoadedScript->SetBaseURL(aRequest->mBaseURL);
|
||||
RefPtr<ModuleScript> moduleScript =
|
||||
aRequest->mLoadedScript->AsModuleScript();
|
||||
aRequest->mModuleScript = moduleScript;
|
||||
|
||||
if (!module) {
|
||||
|
||||
@@ -62,13 +62,15 @@ NS_IMPL_CYCLE_COLLECTING_RELEASE(ScriptLoadRequest)
|
||||
NS_IMPL_CYCLE_COLLECTION_CLASS(ScriptLoadRequest)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ScriptLoadRequest)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mFetchOptions, mCacheInfo, mLoadContext)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mFetchOptions, mCacheInfo, mLoadContext,
|
||||
mLoadedScript)
|
||||
tmp->mScriptForBytecodeEncoding = nullptr;
|
||||
tmp->DropBytecodeCacheReferences();
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(ScriptLoadRequest)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mFetchOptions, mCacheInfo, mLoadContext)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mFetchOptions, mCacheInfo, mLoadContext,
|
||||
mLoadedScript)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(ScriptLoadRequest)
|
||||
@@ -163,6 +165,21 @@ void ScriptLoadRequest::NoCacheEntryFound() {
|
||||
mState = State::Fetching;
|
||||
}
|
||||
|
||||
void ScriptLoadRequest::EnsureScript() {
|
||||
switch (mKind) {
|
||||
case ScriptKind::eClassic:
|
||||
case ScriptKind::eImportMap:
|
||||
mLoadedScript = new ClassicScript(mReferrerPolicy, mFetchOptions, mURI);
|
||||
break;
|
||||
case ScriptKind::eModule:
|
||||
mLoadedScript = new ModuleScript(mReferrerPolicy, mFetchOptions, mURI);
|
||||
break;
|
||||
case ScriptKind::eEvent:
|
||||
MOZ_ASSERT_UNREACHABLE("EventScripts are not using ScriptLoadRequest");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void ScriptLoadRequest::SetPendingFetchingError() {
|
||||
MOZ_ASSERT(IsCheckingCache());
|
||||
mState = State::PendingFetchingError;
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "nsIGlobalObject.h"
|
||||
#include "LoadedScript.h"
|
||||
#include "ScriptKind.h"
|
||||
#include "ScriptFetchOptions.h"
|
||||
#include "nsIScriptElement.h"
|
||||
@@ -257,6 +258,8 @@ class ScriptLoadRequest
|
||||
|
||||
void ClearScriptSource();
|
||||
|
||||
void EnsureScript();
|
||||
|
||||
// Convert a CheckingCache ScriptLoadRequest into a Fetching one, by creating
|
||||
// a new LoadedScript which is matching the ScriptKind provided when
|
||||
// constructing this ScriptLoadRequest.
|
||||
@@ -360,6 +363,14 @@ class ScriptLoadRequest
|
||||
// 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.
|
||||
// Soon it would be used as a way to dissociate the LoadRequest from the
|
||||
// loaded value, such that multiple request referring to the same content
|
||||
// would share the same loaded script.
|
||||
RefPtr<LoadedScript> mLoadedScript;
|
||||
|
||||
// Holds the top-level JSScript that corresponds to the current source, once
|
||||
// it is parsed, and planned to be saved in the bytecode cache.
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user