commit 2925df16e930bfb9974ccb22d3bcda61125251e3
parent e90d025bb7dc38b00379a74d0bedcfcb9812df33
Author: Tooru Fujisawa <arai_a@mac.com>
Date: Tue, 21 Oct 2025 15:14:57 +0000
Bug 1991370 - Part 3: Use FrontendContext-based EncodeStencil in XUL prototype cache. r=bthrall
Differential Revision: https://phabricator.services.mozilla.com/D266624
Diffstat:
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/dom/xul/nsXULElement.cpp b/dom/xul/nsXULElement.cpp
@@ -1456,15 +1456,21 @@ nsXULPrototypeScript::nsXULPrototypeScript(uint32_t aLineNo)
mSrcLoadWaiters(nullptr),
mStencil(nullptr) {}
-static nsresult WriteStencil(nsIObjectOutputStream* aStream, JSContext* aCx,
+static nsresult WriteStencil(nsIObjectOutputStream* aStream,
JS::Stencil* aStencil) {
+ JS::FrontendContext* fc = JS::NewFrontendContext();
+ if (!fc) {
+ return NS_ERROR_OUT_OF_MEMORY;
+ }
+
JS::TranscodeBuffer buffer;
JS::TranscodeResult code;
- code = JS::EncodeStencil(aCx, aStencil, buffer);
+ code = JS::EncodeStencil(fc, aStencil, buffer);
+
+ JS::DestroyFrontendContext(fc);
if (code != JS::TranscodeResult::Ok) {
if (code == JS::TranscodeResult::Throw) {
- JS_ClearPendingException(aCx);
return NS_ERROR_OUT_OF_MEMORY;
}
@@ -1557,11 +1563,6 @@ nsresult nsXULPrototypeScript::Serialize(
const nsTArray<RefPtr<mozilla::dom::NodeInfo>>* aNodeInfos) {
NS_ENSURE_TRUE(aProtoDoc, NS_ERROR_UNEXPECTED);
- AutoJSAPI jsapi;
- if (!jsapi.Init(xpc::CompilationScope())) {
- return NS_ERROR_UNEXPECTED;
- }
-
NS_ASSERTION(!mSrcLoading || mSrcLoadWaiters != nullptr || !mStencil,
"script source still loading when serializing?!");
if (!mStencil) return NS_ERROR_FAILURE;
@@ -1571,10 +1572,7 @@ nsresult nsXULPrototypeScript::Serialize(
rv = aStream->Write32(mLineNo);
if (NS_FAILED(rv)) return rv;
- JSContext* cx = jsapi.cx();
- MOZ_ASSERT(xpc::CompilationScope() == JS::CurrentGlobalOrNull(cx));
-
- return WriteStencil(aStream, cx, mStencil);
+ return WriteStencil(aStream, mStencil);
}
nsresult nsXULPrototypeScript::SerializeOutOfLine(