diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /toolkit/components/reflect | |
parent | Initial commit. (diff) | |
download | firefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/components/reflect')
-rw-r--r-- | toolkit/components/reflect/components.conf | 14 | ||||
-rw-r--r-- | toolkit/components/reflect/moz.build | 22 | ||||
-rw-r--r-- | toolkit/components/reflect/reflect.cpp | 36 | ||||
-rw-r--r-- | toolkit/components/reflect/reflect.h | 29 | ||||
-rw-r--r-- | toolkit/components/reflect/reflect.jsm | 28 |
5 files changed, 129 insertions, 0 deletions
diff --git a/toolkit/components/reflect/components.conf b/toolkit/components/reflect/components.conf new file mode 100644 index 0000000000..227be02919 --- /dev/null +++ b/toolkit/components/reflect/components.conf @@ -0,0 +1,14 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +Classes = [ + { + 'cid': '{1a817186-357a-47cd-8aea-2850d60e959e}', + 'contract_ids': ['@mozilla.org/jsreflect;1'], + 'type': 'mozilla::reflect::Module', + 'headers': ['/toolkit/components/reflect/reflect.h'], + }, +] diff --git a/toolkit/components/reflect/moz.build b/toolkit/components/reflect/moz.build new file mode 100644 index 0000000000..3bd952b157 --- /dev/null +++ b/toolkit/components/reflect/moz.build @@ -0,0 +1,22 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +with Files("**"): + BUG_COMPONENT = ("Core", "JavaScript Engine") + +SOURCES += [ + "reflect.cpp", +] + +EXTRA_JS_MODULES += [ + "reflect.jsm", +] + +XPCOM_MANIFESTS += [ + "components.conf", +] + +FINAL_LIBRARY = "xul" diff --git a/toolkit/components/reflect/reflect.cpp b/toolkit/components/reflect/reflect.cpp new file mode 100644 index 0000000000..e807e559cf --- /dev/null +++ b/toolkit/components/reflect/reflect.cpp @@ -0,0 +1,36 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "reflect.h" +#include "jsapi.h" + +#include "nsString.h" +#include "xpc_make_class.h" + +namespace mozilla::reflect { + +NS_IMPL_ISUPPORTS(Module, nsIXPCScriptable) + +Module::Module() = default; + +Module::~Module() = default; + +#define XPC_MAP_CLASSNAME Module +#define XPC_MAP_QUOTED_CLASSNAME "Module" +#define XPC_MAP_FLAGS XPC_SCRIPTABLE_WANT_CALL +#include "xpc_map_end.h" + +NS_IMETHODIMP +Module::Call(nsIXPConnectWrappedNative* wrapper, JSContext* cx, JSObject* obj, + const JS::CallArgs& args, bool* _retval) { + JS::Rooted<JSObject*> global(cx, JS::GetScriptedCallerGlobal(cx)); + if (!global) return NS_ERROR_NOT_AVAILABLE; + + JSAutoRealm ar(cx, global); + *_retval = JS_InitReflectParse(cx, global); + return NS_OK; +} + +} // namespace mozilla::reflect diff --git a/toolkit/components/reflect/reflect.h b/toolkit/components/reflect/reflect.h new file mode 100644 index 0000000000..0e5524dd3c --- /dev/null +++ b/toolkit/components/reflect/reflect.h @@ -0,0 +1,29 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2; -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef COMPONENTS_REFLECT_H +#define COMPONENTS_REFLECT_H + +#include "nsIXPCScriptable.h" +#include "nsISupports.h" + +namespace mozilla { +namespace reflect { + +class Module final : public nsIXPCScriptable { + public: + NS_DECL_ISUPPORTS + NS_DECL_NSIXPCSCRIPTABLE + + Module(); + + private: + ~Module(); +}; + +} // namespace reflect +} // namespace mozilla + +#endif diff --git a/toolkit/components/reflect/reflect.jsm b/toolkit/components/reflect/reflect.jsm new file mode 100644 index 0000000000..cfdd208afd --- /dev/null +++ b/toolkit/components/reflect/reflect.jsm @@ -0,0 +1,28 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +var EXPORTED_SYMBOLS = ["Reflect"]; + +/* + * This is the js module for Reflect. Import it like so: + * const { Reflect } = ChromeUtils.import( + * "resource://gre/modules/reflect.jsm" + * ); + * + * This will create a 'Reflect' object, which provides an interface to the + * SpiderMonkey parser API. + * + * For documentation on the API, see: + * https://developer.mozilla.org/en/SpiderMonkey/Parser_API + * + */ + +// Initialize the ctypes object. You do not need to do this yourself. +const init = Cc["@mozilla.org/jsreflect;1"].createInstance(); +init(); + +// Reflect is a standard built-in defined on the shared global. +// Export it via a lexical variable on the per-JSM global. +const Reflect = globalThis.Reflect; |