Bug 1475228 - Refactor ScriptLoader::GetScriptSource() to remove inline data argument r=baku

This commit is contained in:
Jon Coppeard
2018-07-17 14:30:23 +01:00
parent 782732bc5d
commit be99ae99cb
2 changed files with 16 additions and 19 deletions

View File

@@ -491,8 +491,7 @@ ScriptLoader::CreateModuleScript(ModuleLoadRequest* aRequest)
rv = FillCompileOptionsForRequest(aes, aRequest, global, &options);
if (NS_SUCCEEDED(rv)) {
nsAutoString inlineData;
SourceBufferHolder srcBuf = GetScriptSource(aRequest, inlineData);
SourceBufferHolder srcBuf = GetScriptSource(cx, aRequest);
rv = nsJSUtils::CompileModule(cx, srcBuf, global, options, &module);
}
}
@@ -1830,9 +1829,7 @@ ScriptLoader::AttemptAsyncScriptCompile(ScriptLoadRequest* aRequest)
if (aRequest->IsModuleRequest()) {
MOZ_ASSERT(aRequest->IsTextSource());
JS::SourceBufferHolder srcBuf(aRequest->ScriptText().begin(),
aRequest->ScriptText().length(),
JS::SourceBufferHolder::NoOwnership);
JS::SourceBufferHolder srcBuf = GetScriptSource(cx, aRequest);
if (!JS::CompileOffThreadModule(cx, options,
srcBuf,
OffThreadScriptLoaderCallback,
@@ -1860,9 +1857,7 @@ ScriptLoader::AttemptAsyncScriptCompile(ScriptLoadRequest* aRequest)
#endif
} else {
MOZ_ASSERT(aRequest->IsTextSource());
JS::SourceBufferHolder srcBuf(aRequest->ScriptText().begin(),
aRequest->ScriptText().length(),
JS::SourceBufferHolder::NoOwnership);
JS::SourceBufferHolder srcBuf = GetScriptSource(cx, aRequest);
if (!JS::CompileOffThread(cx, options,
srcBuf,
OffThreadScriptLoaderCallback,
@@ -1900,19 +1895,22 @@ ScriptLoader::CompileOffThreadOrProcessRequest(ScriptLoadRequest* aRequest)
}
SourceBufferHolder
ScriptLoader::GetScriptSource(ScriptLoadRequest* aRequest, nsAutoString& inlineData)
ScriptLoader::GetScriptSource(JSContext* aCx, ScriptLoadRequest* aRequest)
{
// Return a SourceBufferHolder object holding the script's source text.
// |inlineData| is used to hold the text for inline objects.
// If there's no script text, we try to get it from the element
if (aRequest->mIsInline) {
// XXX This is inefficient - GetText makes multiple
// copies.
nsAutoString inlineData;
aRequest->mElement->GetScriptText(inlineData);
return SourceBufferHolder(inlineData.get(),
inlineData.Length(),
SourceBufferHolder::NoOwnership);
// Copy string to JS allocated buffer and transfer ownership to
// SourceBufferHolder result.
size_t nbytes = inlineData.Length() * sizeof(char16_t);
JS::UniqueTwoByteChars chars(static_cast<char16_t*>(JS_malloc(aCx, nbytes)));
MOZ_RELEASE_ASSERT(chars);
memcpy(chars.get(), inlineData.get(), nbytes);
return SourceBufferHolder(std::move(chars), inlineData.Length());
}
return SourceBufferHolder(aRequest->ScriptText().begin(),
@@ -2362,8 +2360,7 @@ ScriptLoader::EvaluateScript(ScriptLoadRequest* aRequest)
&script);
} else {
MOZ_ASSERT(aRequest->IsTextSource());
nsAutoString inlineData;
SourceBufferHolder srcBuf = GetScriptSource(aRequest, inlineData);
SourceBufferHolder srcBuf = GetScriptSource(cx, aRequest);
if (recordreplay::IsRecordingOrReplaying()) {
recordreplay::NoteContentParse(this, options.filename(), "application/javascript",