Backed out changeset 4107b758e7ae (bug 1501608) as requested by dev
This commit is contained in:
@@ -88,33 +88,6 @@ using mozilla::Telemetry::LABELS_DOM_SCRIPT_PRELOAD_RESULT;
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
JSObject* GetElementCallback(JSContext* aCx, JS::HandleValue aValue) {
|
||||
JS::RootedValue privateValue(aCx, aValue);
|
||||
MOZ_ASSERT(!privateValue.isObjectOrNull() && !privateValue.isUndefined());
|
||||
LoadedScript* script = static_cast<LoadedScript*>(privateValue.toPrivate());
|
||||
|
||||
if (!script->GetFetchOptions()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsCOMPtr<Element> domElement = script->GetFetchOptions()->mElement;
|
||||
if (!domElement) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
JSObject* globalObject =
|
||||
domElement->OwnerDoc()->GetScopeObject()->GetGlobalJSObject();
|
||||
JSAutoRealm ar(aCx, globalObject);
|
||||
|
||||
JS::Rooted<JS::Value> elementValue(aCx);
|
||||
nsresult rv = nsContentUtils::WrapNative(aCx, domElement, &elementValue,
|
||||
/* aAllowWrapping = */ true);
|
||||
if (NS_FAILED(rv)) {
|
||||
return nullptr;
|
||||
}
|
||||
return elementValue.toObjectOrNull();
|
||||
}
|
||||
|
||||
LazyLogModule ScriptLoader::gCspPRLog("CSP");
|
||||
LazyLogModule ScriptLoader::gScriptLoaderLog("ScriptLoader");
|
||||
|
||||
@@ -876,10 +849,6 @@ static LoadedScript* GetLoadedScriptOrNull(
|
||||
}
|
||||
|
||||
auto script = static_cast<LoadedScript*>(aReferencingPrivate.toPrivate());
|
||||
if (script->IsEventScript()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
MOZ_ASSERT_IF(
|
||||
script->IsModuleScript(),
|
||||
JS::GetModulePrivate(script->AsModuleScript()->ModuleRecord()) ==
|
||||
@@ -985,7 +954,7 @@ bool HostImportModuleDynamically(JSContext* aCx,
|
||||
ScriptFetchOptions* options;
|
||||
nsIURI* baseURL;
|
||||
if (script) {
|
||||
options = script->GetFetchOptions();
|
||||
options = script->FetchOptions();
|
||||
baseURL = script->BaseURL();
|
||||
} else {
|
||||
// We don't have a referencing script so fall back on using
|
||||
@@ -1237,6 +1206,12 @@ nsresult ScriptLoader::InitDebuggerDataForModuleTree(
|
||||
JS::Rooted<JSObject*> module(aCx, moduleScript->ModuleRecord());
|
||||
MOZ_ASSERT(module);
|
||||
|
||||
nsIScriptElement* element = aRequest->Element();
|
||||
if (element) {
|
||||
nsresult rv = nsJSUtils::InitModuleSourceElement(aCx, module, element);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
// The script is now ready to be exposed to the debugger.
|
||||
JS::Rooted<JSScript*> script(aCx, JS::GetModuleScript(module));
|
||||
JS::ExposeScriptToDebugger(aCx, script);
|
||||
@@ -1248,7 +1223,7 @@ nsresult ScriptLoader::InitDebuggerDataForModuleTree(
|
||||
nsresult ScriptLoader::RestartLoad(ScriptLoadRequest* aRequest) {
|
||||
MOZ_ASSERT(aRequest->IsBytecode());
|
||||
aRequest->mScriptBytecode.clearAndFree();
|
||||
TRACE_FOR_TEST(aRequest->GetScriptElement(), "scriptloader_fallback");
|
||||
TRACE_FOR_TEST(aRequest->Element(), "scriptloader_fallback");
|
||||
|
||||
// Start a new channel from which we explicitly request to stream the source
|
||||
// instead of the bytecode.
|
||||
@@ -1296,8 +1271,8 @@ nsresult ScriptLoader::StartLoad(ScriptLoadRequest* aRequest) {
|
||||
nsContentPolicyType contentPolicyType =
|
||||
ScriptLoadRequestToContentPolicyType(aRequest);
|
||||
nsCOMPtr<nsINode> context;
|
||||
if (aRequest->GetScriptElement()) {
|
||||
context = do_QueryInterface(aRequest->GetScriptElement());
|
||||
if (aRequest->Element()) {
|
||||
context = do_QueryInterface(aRequest->Element());
|
||||
} else {
|
||||
context = mDocument;
|
||||
}
|
||||
@@ -1550,9 +1525,8 @@ ScriptLoadRequest* ScriptLoader::CreateLoadRequest(
|
||||
nsIPrincipal* aTriggeringPrincipal, CORSMode aCORSMode,
|
||||
const SRIMetadata& aIntegrity, ReferrerPolicy aReferrerPolicy) {
|
||||
nsIURI* referrer = mDocument->GetDocumentURIAsReferrer();
|
||||
nsCOMPtr<Element> domElement = do_QueryInterface(aElement);
|
||||
ScriptFetchOptions* fetchOptions = new ScriptFetchOptions(
|
||||
aCORSMode, aReferrerPolicy, domElement, aTriggeringPrincipal);
|
||||
aCORSMode, aReferrerPolicy, aElement, aTriggeringPrincipal);
|
||||
|
||||
if (aKind == ScriptKind::eClassic) {
|
||||
return new ScriptLoadRequest(aKind, aURI, fetchOptions, aIntegrity,
|
||||
@@ -1836,7 +1810,7 @@ bool ScriptLoader::ProcessInlineScript(nsIScriptElement* aElement,
|
||||
request->mLineNo = aElement->GetScriptLineNumber();
|
||||
request->mProgress = ScriptLoadRequest::Progress::eLoading_Source;
|
||||
request->SetTextSource();
|
||||
TRACE_FOR_TEST_BOOL(request->GetScriptElement(), "scriptloader_load_source");
|
||||
TRACE_FOR_TEST_BOOL(request->Element(), "scriptloader_load_source");
|
||||
CollectScriptTelemetry(request);
|
||||
|
||||
// Only the 'async' attribute is heeded on an inline module script and
|
||||
@@ -2226,7 +2200,7 @@ nsresult ScriptLoader::GetScriptSource(JSContext* aCx,
|
||||
// If there's no script text, we try to get it from the element
|
||||
if (aRequest->mIsInline) {
|
||||
nsAutoString inlineData;
|
||||
aRequest->GetScriptElement()->GetScriptText(inlineData);
|
||||
aRequest->Element()->GetScriptText(inlineData);
|
||||
|
||||
size_t nbytes = inlineData.Length() * sizeof(char16_t);
|
||||
JS::UniqueTwoByteChars chars(
|
||||
@@ -2308,8 +2282,7 @@ nsresult ScriptLoader::ProcessRequest(ScriptLoadRequest* aRequest) {
|
||||
}
|
||||
}
|
||||
|
||||
nsCOMPtr<nsINode> scriptElem =
|
||||
do_QueryInterface(aRequest->GetScriptElement());
|
||||
nsCOMPtr<nsINode> scriptElem = do_QueryInterface(aRequest->Element());
|
||||
|
||||
nsCOMPtr<Document> doc;
|
||||
if (!aRequest->mIsInline) {
|
||||
@@ -2320,10 +2293,10 @@ nsresult ScriptLoader::ProcessRequest(ScriptLoadRequest* aRequest) {
|
||||
uint32_t parserCreated = aRequest->GetParserCreated();
|
||||
if (parserCreated) {
|
||||
oldParserInsertedScript = mCurrentParserInsertedScript;
|
||||
mCurrentParserInsertedScript = aRequest->GetScriptElement();
|
||||
mCurrentParserInsertedScript = aRequest->Element();
|
||||
}
|
||||
|
||||
aRequest->GetScriptElement()->BeginEvaluating();
|
||||
aRequest->Element()->BeginEvaluating();
|
||||
|
||||
FireScriptAvailable(NS_OK, aRequest);
|
||||
|
||||
@@ -2368,7 +2341,7 @@ nsresult ScriptLoader::ProcessRequest(ScriptLoadRequest* aRequest) {
|
||||
|
||||
FireScriptEvaluated(rv, aRequest);
|
||||
|
||||
aRequest->GetScriptElement()->EndEvaluating();
|
||||
aRequest->Element()->EndEvaluating();
|
||||
|
||||
if (parserCreated) {
|
||||
mCurrentParserInsertedScript = oldParserInsertedScript;
|
||||
@@ -2417,9 +2390,8 @@ void ScriptLoader::FireScriptAvailable(nsresult aResult,
|
||||
ScriptLoadRequest* aRequest) {
|
||||
for (int32_t i = 0; i < mObservers.Count(); i++) {
|
||||
nsCOMPtr<nsIScriptLoaderObserver> obs = mObservers[i];
|
||||
obs->ScriptAvailable(aResult, aRequest->GetScriptElement(),
|
||||
aRequest->mIsInline, aRequest->mURI,
|
||||
aRequest->mLineNo);
|
||||
obs->ScriptAvailable(aResult, aRequest->Element(), aRequest->mIsInline,
|
||||
aRequest->mURI, aRequest->mLineNo);
|
||||
}
|
||||
|
||||
aRequest->FireScriptAvailable(aResult);
|
||||
@@ -2429,8 +2401,7 @@ void ScriptLoader::FireScriptEvaluated(nsresult aResult,
|
||||
ScriptLoadRequest* aRequest) {
|
||||
for (int32_t i = 0; i < mObservers.Count(); i++) {
|
||||
nsCOMPtr<nsIScriptLoaderObserver> obs = mObservers[i];
|
||||
obs->ScriptEvaluated(aResult, aRequest->GetScriptElement(),
|
||||
aRequest->mIsInline);
|
||||
obs->ScriptEvaluated(aResult, aRequest->Element(), aRequest->mIsInline);
|
||||
}
|
||||
|
||||
aRequest->FireScriptEvaluated(aResult);
|
||||
@@ -2490,6 +2461,16 @@ nsresult ScriptLoader::FillCompileOptionsForRequest(
|
||||
|
||||
if (aRequest->IsModuleRequest()) {
|
||||
aOptions->hideScriptFromDebugger = true;
|
||||
} else {
|
||||
JSContext* cx = jsapi.cx();
|
||||
JS::Rooted<JS::Value> elementVal(cx);
|
||||
MOZ_ASSERT(aRequest->Element());
|
||||
if (NS_SUCCEEDED(nsContentUtils::WrapNative(cx, aRequest->Element(),
|
||||
&elementVal,
|
||||
/* aAllowWrapping = */ true))) {
|
||||
MOZ_ASSERT(elementVal.isObject());
|
||||
aOptions->setElement(&elementVal.toObject());
|
||||
}
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
@@ -2613,6 +2594,11 @@ static nsresult ExecuteCompiledScript(JSContext* aCx,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Create a ClassicScript object and associate it with the JSScript.
|
||||
RefPtr<ClassicScript> classicScript =
|
||||
new ClassicScript(aRequest->mFetchOptions, aRequest->mBaseURL);
|
||||
classicScript->AssociateWithScript(script);
|
||||
|
||||
return aExec.ExecScript();
|
||||
}
|
||||
|
||||
@@ -2671,8 +2657,7 @@ nsresult ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest) {
|
||||
bool isDynamicImport = aRequest->IsModuleRequest() &&
|
||||
aRequest->AsModuleRequest()->IsDynamicImport();
|
||||
if (!isDynamicImport) {
|
||||
nsCOMPtr<nsIContent> scriptContent(
|
||||
do_QueryInterface(aRequest->GetScriptElement()));
|
||||
nsCOMPtr<nsIContent> scriptContent(do_QueryInterface(aRequest->Element()));
|
||||
MOZ_ASSERT(scriptContent);
|
||||
Document* ownerDoc = scriptContent->OwnerDoc();
|
||||
if (ownerDoc != mDocument) {
|
||||
@@ -2748,8 +2733,7 @@ nsresult ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest) {
|
||||
rv = InitDebuggerDataForModuleTree(cx, request);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
TRACE_FOR_TEST(aRequest->GetScriptElement(),
|
||||
"scriptloader_evaluate_module");
|
||||
TRACE_FOR_TEST(aRequest->Element(), "scriptloader_evaluate_module");
|
||||
rv = nsJSUtils::ModuleEvaluate(cx, module);
|
||||
MOZ_ASSERT(NS_FAILED(rv) == aes.HasException());
|
||||
|
||||
@@ -2764,25 +2748,18 @@ nsresult ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest) {
|
||||
FinishDynamicImport(cx, request, rv);
|
||||
}
|
||||
|
||||
TRACE_FOR_TEST_NONE(aRequest->GetScriptElement(),
|
||||
"scriptloader_no_encode");
|
||||
TRACE_FOR_TEST_NONE(aRequest->Element(), "scriptloader_no_encode");
|
||||
aRequest->mCacheInfo = nullptr;
|
||||
} else {
|
||||
// Update our current script.
|
||||
AutoCurrentScriptUpdater scriptUpdater(this,
|
||||
aRequest->GetScriptElement());
|
||||
AutoCurrentScriptUpdater scriptUpdater(this, aRequest->Element());
|
||||
|
||||
JS::CompileOptions options(cx);
|
||||
rv = FillCompileOptionsForRequest(aes, aRequest, global, &options);
|
||||
|
||||
// Create a ClassicScript object and associate it with the JSScript.
|
||||
RefPtr<ClassicScript> classicScript =
|
||||
new ClassicScript(aRequest->mFetchOptions, aRequest->mBaseURL);
|
||||
options.setPrivateValue(JS::PrivateValue(classicScript));
|
||||
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
if (aRequest->IsBytecode()) {
|
||||
TRACE_FOR_TEST(aRequest->GetScriptElement(), "scriptloader_execute");
|
||||
TRACE_FOR_TEST(aRequest->Element(), "scriptloader_execute");
|
||||
nsJSUtils::ExecutionContext exec(cx, global);
|
||||
if (aRequest->mOffThreadToken) {
|
||||
LOG(("ScriptLoadRequest (%p): Decode Bytecode & Join and Execute",
|
||||
@@ -2810,8 +2787,7 @@ nsresult ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest) {
|
||||
{
|
||||
nsJSUtils::ExecutionContext exec(cx, global);
|
||||
exec.SetEncodeBytecode(encodeBytecode);
|
||||
TRACE_FOR_TEST(aRequest->GetScriptElement(),
|
||||
"scriptloader_execute");
|
||||
TRACE_FOR_TEST(aRequest->Element(), "scriptloader_execute");
|
||||
if (aRequest->mOffThreadToken) {
|
||||
// Off-main-thread parsing.
|
||||
LOG(
|
||||
@@ -2856,7 +2832,7 @@ nsresult ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest) {
|
||||
// Queue the current script load request to later save the bytecode.
|
||||
if (script && encodeBytecode) {
|
||||
aRequest->SetScript(script);
|
||||
TRACE_FOR_TEST(aRequest->GetScriptElement(), "scriptloader_encode");
|
||||
TRACE_FOR_TEST(aRequest->Element(), "scriptloader_encode");
|
||||
MOZ_ASSERT(aRequest->mBytecodeOffset ==
|
||||
aRequest->mScriptBytecode.length());
|
||||
RegisterForBytecodeEncoding(aRequest);
|
||||
@@ -2865,8 +2841,7 @@ nsresult ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest) {
|
||||
("ScriptLoadRequest (%p): Bytecode-cache: disabled (rv = %X, "
|
||||
"script = %p)",
|
||||
aRequest, unsigned(rv), script.get()));
|
||||
TRACE_FOR_TEST_NONE(aRequest->GetScriptElement(),
|
||||
"scriptloader_no_encode");
|
||||
TRACE_FOR_TEST_NONE(aRequest->Element(), "scriptloader_no_encode");
|
||||
aRequest->mCacheInfo = nullptr;
|
||||
}
|
||||
}
|
||||
@@ -2987,8 +2962,7 @@ void ScriptLoader::EncodeRequestBytecode(JSContext* aCx,
|
||||
nsresult rv = NS_OK;
|
||||
MOZ_ASSERT(aRequest->mCacheInfo);
|
||||
auto bytecodeFailed = mozilla::MakeScopeExit([&]() {
|
||||
TRACE_FOR_TEST_NONE(aRequest->GetScriptElement(),
|
||||
"scriptloader_bytecode_failed");
|
||||
TRACE_FOR_TEST_NONE(aRequest->Element(), "scriptloader_bytecode_failed");
|
||||
});
|
||||
|
||||
JS::RootedScript script(aCx, aRequest->mScript);
|
||||
@@ -3040,8 +3014,7 @@ void ScriptLoader::EncodeRequestBytecode(JSContext* aCx,
|
||||
MOZ_RELEASE_ASSERT(aRequest->mScriptBytecode.length() == n);
|
||||
|
||||
bytecodeFailed.release();
|
||||
TRACE_FOR_TEST_NONE(aRequest->GetScriptElement(),
|
||||
"scriptloader_bytecode_saved");
|
||||
TRACE_FOR_TEST_NONE(aRequest->Element(), "scriptloader_bytecode_saved");
|
||||
}
|
||||
|
||||
void ScriptLoader::GiveUpBytecodeEncoding() {
|
||||
@@ -3066,8 +3039,7 @@ void ScriptLoader::GiveUpBytecodeEncoding() {
|
||||
while (!mBytecodeEncodingQueue.isEmpty()) {
|
||||
RefPtr<ScriptLoadRequest> request = mBytecodeEncodingQueue.StealFirst();
|
||||
LOG(("ScriptLoadRequest (%p): Cannot serialize bytecode", request.get()));
|
||||
TRACE_FOR_TEST_NONE(request->GetScriptElement(),
|
||||
"scriptloader_bytecode_failed");
|
||||
TRACE_FOR_TEST_NONE(request->Element(), "scriptloader_bytecode_failed");
|
||||
|
||||
if (aes.isSome()) {
|
||||
JS::RootedScript script(aes->cx(), request->mScript);
|
||||
@@ -3441,7 +3413,7 @@ void ScriptLoader::ReportErrorToConsole(ScriptLoadRequest* aRequest,
|
||||
AutoTArray<nsString, 1> params;
|
||||
CopyUTF8toUTF16(aRequest->mURI->GetSpecOrDefault(), *params.AppendElement());
|
||||
|
||||
nsIScriptElement* element = aRequest->GetScriptElement();
|
||||
nsIScriptElement* element = aRequest->Element();
|
||||
uint32_t lineNo = element ? element->GetScriptLineNumber() : 0;
|
||||
uint32_t columnNo = element ? element->GetScriptColumnNumber() : 0;
|
||||
|
||||
@@ -3474,7 +3446,7 @@ void ScriptLoader::HandleLoadError(ScriptLoadRequest* aRequest,
|
||||
*/
|
||||
if (net::UrlClassifierFeatureFactory::IsClassifierBlockingErrorCode(
|
||||
aResult)) {
|
||||
nsCOMPtr<nsIContent> cont = do_QueryInterface(aRequest->GetScriptElement());
|
||||
nsCOMPtr<nsIContent> cont = do_QueryInterface(aRequest->Element());
|
||||
mDocument->AddBlockedNodeByClassifier(cont);
|
||||
}
|
||||
|
||||
@@ -3541,12 +3513,12 @@ void ScriptLoader::HandleLoadError(ScriptLoadRequest* aRequest,
|
||||
mParserBlockingRequest = nullptr;
|
||||
UnblockParser(aRequest);
|
||||
|
||||
// Ensure that we treat aRequest->GetScriptElement() as our current
|
||||
// parser-inserted script while firing onerror on it.
|
||||
MOZ_ASSERT(aRequest->GetScriptElement()->GetParserCreated());
|
||||
// Ensure that we treat aRequest->Element() as our current parser-inserted
|
||||
// script while firing onerror on it.
|
||||
MOZ_ASSERT(aRequest->Element()->GetParserCreated());
|
||||
nsCOMPtr<nsIScriptElement> oldParserInsertedScript =
|
||||
mCurrentParserInsertedScript;
|
||||
mCurrentParserInsertedScript = aRequest->GetScriptElement();
|
||||
mCurrentParserInsertedScript = aRequest->Element();
|
||||
FireScriptAvailable(aResult, aRequest);
|
||||
ContinueParserAsync(aRequest);
|
||||
mCurrentParserInsertedScript = oldParserInsertedScript;
|
||||
@@ -3558,12 +3530,12 @@ void ScriptLoader::HandleLoadError(ScriptLoadRequest* aRequest,
|
||||
}
|
||||
|
||||
void ScriptLoader::UnblockParser(ScriptLoadRequest* aParserBlockingRequest) {
|
||||
aParserBlockingRequest->GetScriptElement()->UnblockParser();
|
||||
aParserBlockingRequest->Element()->UnblockParser();
|
||||
}
|
||||
|
||||
void ScriptLoader::ContinueParserAsync(
|
||||
ScriptLoadRequest* aParserBlockingRequest) {
|
||||
aParserBlockingRequest->GetScriptElement()->ContinueParserAsync();
|
||||
aParserBlockingRequest->Element()->ContinueParserAsync();
|
||||
}
|
||||
|
||||
uint32_t ScriptLoader::NumberOfProcessors() {
|
||||
|
||||
Reference in New Issue
Block a user