summaryrefslogtreecommitdiffstats
path: root/dom/bindings/SimpleGlobalObject.h
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /dom/bindings/SimpleGlobalObject.h
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'dom/bindings/SimpleGlobalObject.h')
-rw-r--r--dom/bindings/SimpleGlobalObject.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/dom/bindings/SimpleGlobalObject.h b/dom/bindings/SimpleGlobalObject.h
new file mode 100644
index 000000000..9781fbfaa
--- /dev/null
+++ b/dom/bindings/SimpleGlobalObject.h
@@ -0,0 +1,99 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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/. */
+
+/**
+ * A simplere nsIGlobalObject implementation that can be used to set up a new
+ * global without anything interesting in it other than the JS builtins. This
+ * is safe to use on both mainthread and worker threads.
+ */
+
+#ifndef mozilla_dom_SimpleGlobalObject_h__
+#define mozilla_dom_SimpleGlobalObject_h__
+
+#include "nsIGlobalObject.h"
+#include "nsWrapperCache.h"
+#include "js/TypeDecls.h"
+#include "nsISupportsImpl.h"
+#include "nsCycleCollectionParticipant.h"
+
+namespace mozilla {
+namespace dom {
+
+class SimpleGlobalObject : public nsIGlobalObject,
+ public nsWrapperCache
+{
+public:
+ enum class GlobalType {
+ BindingDetail, // Should only be used by DOM bindings code.
+ WorkerDebuggerSandbox,
+ NotSimpleGlobal // Sentinel to be used by BasicGlobalType.
+ };
+
+ // Create a new JS global object that can be used to do some work. This
+ // global will NOT have any DOM APIs exposed in it, will not be visible to the
+ // debugger, and will not have a useful concept of principals, so don't try to
+ // use it with any DOM objects. Apart from that, running code with
+ // side-effects is safe in this global. Importantly, when you are first
+ // handed this global it's guaranteed to have pristine built-ins. The
+ // corresponding nsIGlobalObject* for this global object will be a
+ // SimpleGlobalObject of the type provided; JS_GetPrivate on the returned
+ // JSObject* will return the SimpleGlobalObject*.
+ //
+ // If the provided prototype value is undefined, it is ignored. If it's an
+ // object or null, it's set as the prototype of the created global. If it's
+ // anything else, this function returns null.
+ //
+ // Note that creating new globals is not cheap and should not be done
+ // gratuitously. Please think carefully before you use this function.
+ static JSObject* Create(GlobalType globalType,
+ JS::Handle<JS::Value> proto =
+ JS::UndefinedHandleValue);
+
+ NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+ NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(SimpleGlobalObject,
+ nsIGlobalObject)
+
+ // Gets the GlobalType of this SimpleGlobalObject.
+ GlobalType Type() const
+ {
+ return mType;
+ }
+
+ // Gets the GlobalType of the SimpleGlobalObject for the given JSObject*, if
+ // the given JSObject* is the global corresponding to a SimpleGlobalObject.
+ // Oherwise, returns GlobalType::NotSimpleGlobal.
+ static GlobalType SimpleGlobalType(JSObject* obj);
+
+ virtual JSObject *GetGlobalJSObject() override
+ {
+ return GetWrapper();
+ }
+
+ virtual JSObject* WrapObject(JSContext* cx,
+ JS::Handle<JSObject*> aGivenProto) override
+ {
+ MOZ_CRASH("SimpleGlobalObject doesn't use DOM bindings!");
+ }
+
+private:
+ SimpleGlobalObject(JSObject *global, GlobalType type)
+ : mType(type)
+ {
+ SetWrapper(global);
+ }
+
+ virtual ~SimpleGlobalObject()
+ {
+ ClearWrapper();
+ }
+
+ const GlobalType mType;
+};
+
+} // namespace dom
+} // namespace mozilla
+
+#endif /* mozilla_dom_SimpleGlobalObject_h__ */