/* * Copyright (c) 2022, Andrew Kaster * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include #include #include #include #include namespace Web::HTML { class Navigator : public Bindings::PlatformObject , public NavigatorBeaconMixin , public NavigatorConcurrentHardwareMixin , public NavigatorDeviceMemoryMixin , public NavigatorIDMixin , public NavigatorLanguageMixin , public NavigatorOnLineMixin , public StorageAPI::NavigatorStorage { WEB_PLATFORM_OBJECT(Navigator, Bindings::PlatformObject); GC_DECLARE_ALLOCATOR(Navigator); public: [[nodiscard]] static GC::Ref create(JS::Realm&); // FIXME: Implement NavigatorContentUtilsMixin // NavigatorCookies // FIXME: Hook up to Agent level state // https://html.spec.whatwg.org/multipage/system-state.html#dom-navigator-cookieenabled bool cookie_enabled() const { return true; } // NavigatorPlugins // https://html.spec.whatwg.org/multipage/system-state.html#dom-navigator-javaenabled bool java_enabled() const { return false; } bool pdf_viewer_enabled() const; bool webdriver() const; [[nodiscard]] GC::Ref mime_types(); [[nodiscard]] GC::Ref plugins(); [[nodiscard]] GC::Ref clipboard(); [[nodiscard]] GC::Ref user_activation(); Optional do_not_track() const; GC::Ref service_worker(); GC::Ref media_capabilities(); static WebIDL::Long max_touch_points(); virtual ~Navigator() override; protected: virtual void visit_edges(Cell::Visitor&) override; private: explicit Navigator(JS::Realm&); virtual void initialize(JS::Realm&) override; // ^StorageAPI::NavigatorStorage virtual Bindings::PlatformObject const& this_navigator_storage_object() const override { return *this; } GC::Ptr m_plugin_array; GC::Ptr m_mime_type_array; // https://w3c.github.io/clipboard-apis/#dom-navigator-clipboard GC::Ptr m_clipboard; // https://html.spec.whatwg.org/multipage/interaction.html#dom-navigator-useractivation GC::Ptr m_user_activation; // https://w3c.github.io/ServiceWorker/#navigator-serviceworker GC::Ptr m_service_worker_container; // https://w3c.github.io/media-capabilities/#dom-navigator-mediacapabilities GC::Ptr m_media_capabilities; }; }