ladybird/Libraries/LibWeb/HTML/Navigator.h
Timothy Flynn b4df857a57 LibWeb+LibWebView+WebContent: Replace DNT with GPC
Global Privacy Control aims to be a replacement for Do Not Track. DNT
ended up not being a great solution, as it wasn't enforced by law. This
actually resulted in the DNT header serving as an extra fingerprinting
data point.

GPC is becoming enforced by law in USA states such as California and
Colorado. CA is further working on a bill which requires that browsers
implement such an opt-out preference signal (OOPS):

https://cppa.ca.gov/announcements/2025/20250911.html

This patch replaces DNT with GPC and hooks up the associated settings.
2025-09-16 10:38:20 +02:00

113 lines
4 KiB
C++

/*
* Copyright (c) 2022, Andrew Kaster <akaster@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <LibWeb/Bindings/PlatformObject.h>
#include <LibWeb/EncryptedMediaExtensions/NavigatorEncryptedMediaExtensionsPartial.h>
#include <LibWeb/GPC/GlobalPrivacyControl.h>
#include <LibWeb/Gamepad/NavigatorGamepad.h>
#include <LibWeb/HTML/MimeTypeArray.h>
#include <LibWeb/HTML/NavigatorBeacon.h>
#include <LibWeb/HTML/NavigatorConcurrentHardware.h>
#include <LibWeb/HTML/NavigatorDeviceMemory.h>
#include <LibWeb/HTML/NavigatorID.h>
#include <LibWeb/HTML/NavigatorLanguage.h>
#include <LibWeb/HTML/NavigatorOnLine.h>
#include <LibWeb/HTML/PluginArray.h>
#include <LibWeb/HTML/UserActivation.h>
#include <LibWeb/MediaCapabilitiesAPI/MediaCapabilities.h>
#include <LibWeb/Serial/Serial.h>
#include <LibWeb/StorageAPI/NavigatorStorage.h>
namespace Web::HTML {
class Navigator
: public Bindings::PlatformObject
, public NavigatorBeaconPartial
, public NavigatorConcurrentHardwareMixin
, public NavigatorDeviceMemoryMixin
, public Gamepad::NavigatorGamepadPartial
, public GlobalPrivacyControl::GlobalPrivacyControlMixin
, public EncryptedMediaExtensions::NavigatorEncryptedMediaExtensionsPartial
, public NavigatorIDMixin
, public NavigatorLanguageMixin
, public NavigatorOnLineMixin
, public StorageAPI::NavigatorStorage {
WEB_PLATFORM_OBJECT(Navigator, Bindings::PlatformObject);
GC_DECLARE_ALLOCATOR(Navigator);
public:
[[nodiscard]] static GC::Ref<Navigator> 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<MimeTypeArray> mime_types();
[[nodiscard]] GC::Ref<PluginArray> plugins();
[[nodiscard]] GC::Ref<Clipboard::Clipboard> clipboard();
[[nodiscard]] GC::Ref<Geolocation::Geolocation> geolocation();
[[nodiscard]] GC::Ref<Serial::Serial> serial();
[[nodiscard]] GC::Ref<UserActivation> user_activation();
[[nodiscard]] GC::Ref<CredentialManagement::CredentialsContainer> credentials();
GC::Ref<ServiceWorker::ServiceWorkerContainer> service_worker();
GC::Ref<MediaCapabilitiesAPI::MediaCapabilities> 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<PluginArray> m_plugin_array;
GC::Ptr<MimeTypeArray> m_mime_type_array;
// https://w3c.github.io/clipboard-apis/#dom-navigator-clipboard
GC::Ptr<Clipboard::Clipboard> m_clipboard;
// https://w3c.github.io/geolocation/#navigator_interface
GC::Ptr<Geolocation::Geolocation> m_geolocation;
// https://wicg.github.io/serial/#extensions-to-the-navigator-interface
GC::Ptr<Serial::Serial> m_serial;
// https://html.spec.whatwg.org/multipage/interaction.html#dom-navigator-useractivation
GC::Ptr<UserActivation> m_user_activation;
// https://w3c.github.io/ServiceWorker/#navigator-serviceworker
GC::Ptr<ServiceWorker::ServiceWorkerContainer> m_service_worker_container;
// https://w3c.github.io/media-capabilities/#dom-navigator-mediacapabilities
GC::Ptr<MediaCapabilitiesAPI::MediaCapabilities> m_media_capabilities;
// https://w3c.github.io/webappsec-credential-management/#framework-credential-management
GC::Ptr<CredentialManagement::CredentialsContainer> m_credentials;
};
}