From 62be54216641a45cc9326aa1e7d70a01045e16a1 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Tue, 18 Apr 2023 22:24:48 -0500 Subject: [PATCH] Issue #1691 - Part 7a: Add a JS API to get the private value for the calling script or module. https://bugzilla.mozilla.org/show_bug.cgi?id=1342012 (cherry picked from commit e89e50d5047468e0bb02ee82f9cd0be282b24a1b) --- js/src/jsapi.cpp | 14 ++++++++++++++ js/src/jsapi.h | 7 +++++++ 2 files changed, 21 insertions(+) diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index fc013c14cb..3ce22113ed 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -4771,6 +4771,20 @@ JS::GetScriptPrivate(JSScript* script) return script->scriptSourceUnwrap().canonicalPrivate(); } +JS_PUBLIC_API(JS::Value) +JS::GetScriptedCallerPrivate(JSContext* cx) +{ + AssertHeapIsIdle(cx); + CHECK_REQUEST(cx); + + NonBuiltinFrameIter iter(cx, cx->compartment()->principals()); + if (iter.done() || !iter.hasScript()) { + return UndefinedValue(); + } + + return FindScriptOrModulePrivateForScript(iter.script()); +} + JS_PUBLIC_API(JS::ScriptPrivateFinalizeHook) JS::GetScriptPrivateFinalizeHook(JSContext* cx) { diff --git a/js/src/jsapi.h b/js/src/jsapi.h index 2714533354..b4ffd52c6f 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -4410,6 +4410,13 @@ SetScriptPrivate(JSScript* script, const JS::Value& value); extern JS_PUBLIC_API(JS::Value) GetScriptPrivate(JSScript* script); +/* + * Return the private value associated with currently executing script or + * module, or undefined if there is no such script. + */ +extern JS_PUBLIC_API(JS::Value) +GetScriptedCallerPrivate(JSContext* cx); + /** * A hook that's called whenever a script or module which has a private value * set with SetScriptPrivate() or SetModulePrivate() is finalized. This can be