aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/DOMWrapperWorld-class.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/bindings/DOMWrapperWorld-class.h')
-rw-r--r--src/bun.js/bindings/DOMWrapperWorld-class.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/src/bun.js/bindings/DOMWrapperWorld-class.h b/src/bun.js/bindings/DOMWrapperWorld-class.h
new file mode 100644
index 000000000..d2d4fb00c
--- /dev/null
+++ b/src/bun.js/bindings/DOMWrapperWorld-class.h
@@ -0,0 +1,63 @@
+#pragma once
+
+#include "root.h"
+
+#include "wtf/Forward.h"
+
+namespace WebCore {
+
+class WindowProxy;
+
+typedef HashMap<void*, JSC::Weak<JSC::JSObject>> DOMObjectWrapperMap;
+
+class DOMWrapperWorld : public RefCounted<DOMWrapperWorld> {
+public:
+ enum class Type {
+ Normal, // Main (e.g. Page)
+ User, // User Scripts (e.g. Extensions)
+ Internal, // WebKit Internal (e.g. Media Controls)
+ };
+
+ static Ref<DOMWrapperWorld> create(JSC::VM& vm, Type type = Type::Internal, const String& name = {})
+ {
+ return adoptRef(*new DOMWrapperWorld(vm, type, name));
+ }
+ WEBCORE_EXPORT ~DOMWrapperWorld();
+
+ // Free as much memory held onto by this world as possible.
+ WEBCORE_EXPORT void clearWrappers();
+
+ void didCreateWindowProxy(WindowProxy* controller) { m_jsWindowProxies.add(controller); }
+ void didDestroyWindowProxy(WindowProxy* controller) { m_jsWindowProxies.remove(controller); }
+
+ void setShadowRootIsAlwaysOpen() { m_shadowRootIsAlwaysOpen = true; }
+ bool shadowRootIsAlwaysOpen() const { return m_shadowRootIsAlwaysOpen; }
+
+ void disableLegacyOverrideBuiltInsBehavior() { m_shouldDisableLegacyOverrideBuiltInsBehavior = true; }
+ bool shouldDisableLegacyOverrideBuiltInsBehavior() const { return m_shouldDisableLegacyOverrideBuiltInsBehavior; }
+
+ DOMObjectWrapperMap& wrappers() { return m_wrappers; }
+
+ Type type() const { return m_type; }
+ bool isNormal() const { return m_type == Type::Normal; }
+
+ const String& name() const { return m_name; }
+
+ JSC::VM& vm() const { return m_vm; }
+
+protected:
+ DOMWrapperWorld(JSC::VM&, Type, const String& name);
+
+private:
+ JSC::VM& m_vm;
+ HashSet<WindowProxy*> m_jsWindowProxies;
+ DOMObjectWrapperMap m_wrappers;
+
+ String m_name;
+ Type m_type { Type::Internal };
+
+ bool m_shadowRootIsAlwaysOpen { false };
+ bool m_shouldDisableLegacyOverrideBuiltInsBehavior { false };
+};
+
+} // namespace WebCore