diff options
Diffstat (limited to '')
-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.sys.mjs | 21 |
5 files changed, 122 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..2da16815a0 --- /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.sys.mjs", +] + +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.sys.mjs b/toolkit/components/reflect/reflect.sys.mjs new file mode 100644 index 0000000000..99535aa94e --- /dev/null +++ b/toolkit/components/reflect/reflect.sys.mjs @@ -0,0 +1,21 @@ +/* -*- 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/. */ + +/* + * This is the js module for Reflect. Import it like so: + * const { Reflect } = ChromeUtils.importESModule( + * "resource://gre/modules/reflect.sys.mjs" + * ); + * + * This will create a 'Reflect' object, which provides an interface to the + * SpiderMonkey parser API. + */ + +// Initialize the Reflect 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 const Reflect = globalThis.Reflect; |