/* * Copyright (c) 2022, Andrew Kaster * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include #include #include namespace Web::HTML { class Navigator : public Bindings::PlatformObject , public NavigatorBeaconMixin , public NavigatorConcurrentHardwareMixin , public NavigatorIDMixin , public NavigatorLanguageMixin , public NavigatorOnLineMixin { WEB_PLATFORM_OBJECT(Navigator, Bindings::PlatformObject); JS_DECLARE_ALLOCATOR(Navigator); public: [[nodiscard]] static JS::NonnullGCPtr 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]] JS::NonnullGCPtr mime_types(); [[nodiscard]] JS::NonnullGCPtr plugins(); [[nodiscard]] JS::NonnullGCPtr clipboard(); virtual ~Navigator() override; protected: virtual void visit_edges(Cell::Visitor&) override; private: explicit Navigator(JS::Realm&); virtual void initialize(JS::Realm&) override; JS::GCPtr m_plugin_array; JS::GCPtr m_mime_type_array; // https://w3c.github.io/clipboard-apis/#dom-navigator-clipboard JS::GCPtr m_clipboard; }; }