Bug 1554362 - Accumulate external source text as either UTF-8 or UTF-16, in pref-controlled fashion, and then compile the accumulated text using corresponding JSAPI entrypoints without inflating UTF-8 to UTF-16. r=bzbarsky

Differential Revision: https://phabricator.services.mozilla.com/D34825
This commit is contained in:
Jeff Walden
2019-06-15 20:48:40 +00:00
parent 9a2fbd4e3e
commit 338aa62605
7 changed files with 237 additions and 92 deletions

View File

@@ -7,7 +7,9 @@
#include "ScriptLoadRequest.h"
#include "mozilla/HoldDropJSObjects.h"
#include "mozilla/StaticPrefs.h"
#include "mozilla/Unused.h"
#include "mozilla/Utf8.h" // mozilla::Utf8Unit
#include "nsContentUtils.h"
#include "nsICacheInfoChannel.h"
@@ -170,7 +172,11 @@ void ScriptLoadRequest::SetUnknownDataType() {
void ScriptLoadRequest::SetTextSource() {
MOZ_ASSERT(IsUnknownDataType());
mDataType = DataType::eTextSource;
mScriptData.emplace(VariantType<ScriptTextBuffer>());
if (StaticPrefs::dom_script_loader_external_scripts_utf8_parsing_enabled()) {
mScriptData.emplace(VariantType<ScriptTextBuffer<Utf8Unit>>());
} else {
mScriptData.emplace(VariantType<ScriptTextBuffer<char16_t>>());
}
}
void ScriptLoadRequest::SetBinASTSource() {
@@ -216,7 +222,7 @@ bool ScriptLoadRequest::ShouldAcceptBinASTEncoding() const {
void ScriptLoadRequest::ClearScriptSource() {
if (IsTextSource()) {
ScriptText().clearAndFree();
ClearScriptText();
} else if (IsBinASTSource()) {
ScriptBinASTData().clearAndFree();
}