/* * Copyright (c) 2022, Andreas Kling * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Web::Bindings { #define WEB_PLATFORM_OBJECT(class_, base_class) \ JS_OBJECT(class_, base_class) \ virtual bool implements_interface(DeprecatedString const& interface) const override \ { \ if (interface == #class_) \ return true; \ return Base::implements_interface(interface); \ } // https://webidl.spec.whatwg.org/#dfn-platform-object class PlatformObject : public JS::Object , public Weakable { JS_OBJECT(PlatformObject, JS::Object); public: virtual ~PlatformObject() override; JS::Realm& realm() const; // FIXME: This should return a type that works in both window and worker contexts. HTML::Window& global_object() const; // https://webidl.spec.whatwg.org/#implements // This is implemented by overrides that get generated by the WEB_PLATFORM_OBJECT macro. [[nodiscard]] virtual bool implements_interface(DeprecatedString const&) const { return false; } protected: explicit PlatformObject(JS::Realm&); explicit PlatformObject(JS::Object& prototype); }; }