diff options
author | 2022-06-22 23:21:48 -0700 | |
---|---|---|
committer | 2022-06-22 23:21:48 -0700 | |
commit | 729d445b6885f69dd2c6355f38707bd42851c791 (patch) | |
tree | f87a7c408929ea3f57bbb7ace380cf869da83c0e /src/bun.js/bindings/DOMWrapperWorld-class.h | |
parent | 25f820c6bf1d8ec6d444ef579cc036b8c0607b75 (diff) | |
download | bun-jarred/rename.tar.gz bun-jarred/rename.tar.zst bun-jarred/rename.zip |
change the directory structurejarred/rename
Diffstat (limited to 'src/bun.js/bindings/DOMWrapperWorld-class.h')
-rw-r--r-- | src/bun.js/bindings/DOMWrapperWorld-class.h | 63 |
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 |