LibWeb: Implement Navigator.mediaCapabilities

This is enough to stop Crunchyroll showing an unsupported browser
modal :^)
This commit is contained in:
Jamie Mansfield 2024-09-04 23:52:56 +01:00 committed by Tim Ledbetter
commit f08946bcd2
Notes: github-actions[bot] 2024-09-05 13:53:31 +00:00
3 changed files with 19 additions and 0 deletions

View file

@ -1,6 +1,7 @@
/* /*
* Copyright (c) 2022, Andrew Kaster <akaster@serenityos.org> * Copyright (c) 2022, Andrew Kaster <akaster@serenityos.org>
* Copyright (c) 2022, Linus Groh <linusg@serenityos.org> * Copyright (c) 2022, Linus Groh <linusg@serenityos.org>
* Copyright (c) 2024, Jamie Mansfield <jmansfield@cadixdev.org>
* *
* SPDX-License-Identifier: BSD-2-Clause * SPDX-License-Identifier: BSD-2-Clause
*/ */
@ -66,6 +67,7 @@ void Navigator::visit_edges(Cell::Visitor& visitor)
visitor.visit(m_clipboard); visitor.visit(m_clipboard);
visitor.visit(m_user_activation); visitor.visit(m_user_activation);
visitor.visit(m_service_worker_container); visitor.visit(m_service_worker_container);
visitor.visit(m_media_capabilities);
} }
JS::NonnullGCPtr<MimeTypeArray> Navigator::mime_types() JS::NonnullGCPtr<MimeTypeArray> Navigator::mime_types()
@ -122,4 +124,11 @@ JS::NonnullGCPtr<ServiceWorkerContainer> Navigator::service_worker()
return *m_service_worker_container; return *m_service_worker_container;
} }
JS::NonnullGCPtr<MediaCapabilitiesAPI::MediaCapabilities> Navigator::media_capabilities()
{
if (!m_media_capabilities)
m_media_capabilities = heap().allocate<MediaCapabilitiesAPI::MediaCapabilities>(realm(), realm());
return *m_media_capabilities;
}
} }

View file

@ -15,6 +15,7 @@
#include <LibWeb/HTML/NavigatorOnLine.h> #include <LibWeb/HTML/NavigatorOnLine.h>
#include <LibWeb/HTML/PluginArray.h> #include <LibWeb/HTML/PluginArray.h>
#include <LibWeb/HTML/UserActivation.h> #include <LibWeb/HTML/UserActivation.h>
#include <LibWeb/MediaCapabilitiesAPI/MediaCapabilities.h>
#include <LibWeb/StorageAPI/NavigatorStorage.h> #include <LibWeb/StorageAPI/NavigatorStorage.h>
namespace Web::HTML { namespace Web::HTML {
@ -56,6 +57,8 @@ public:
JS::NonnullGCPtr<ServiceWorkerContainer> service_worker(); JS::NonnullGCPtr<ServiceWorkerContainer> service_worker();
JS::NonnullGCPtr<MediaCapabilitiesAPI::MediaCapabilities> media_capabilities();
static WebIDL::Long max_touch_points(); static WebIDL::Long max_touch_points();
virtual ~Navigator() override; virtual ~Navigator() override;
@ -82,6 +85,9 @@ private:
// https://w3c.github.io/ServiceWorker/#navigator-serviceworker // https://w3c.github.io/ServiceWorker/#navigator-serviceworker
JS::GCPtr<ServiceWorkerContainer> m_service_worker_container; JS::GCPtr<ServiceWorkerContainer> m_service_worker_container;
// https://w3c.github.io/media-capabilities/#dom-navigator-mediacapabilities
JS::GCPtr<MediaCapabilitiesAPI::MediaCapabilities> m_media_capabilities;
}; };
} }

View file

@ -8,6 +8,7 @@
#import <HTML/PluginArray.idl> #import <HTML/PluginArray.idl>
#import <HTML/ServiceWorkerContainer.idl> #import <HTML/ServiceWorkerContainer.idl>
#import <HTML/UserActivation.idl> #import <HTML/UserActivation.idl>
#import <MediaCapabilitiesAPI/MediaCapabilities.idl>
#import <StorageAPI/NavigatorStorage.idl> #import <StorageAPI/NavigatorStorage.idl>
// https://html.spec.whatwg.org/multipage/system-state.html#navigator // https://html.spec.whatwg.org/multipage/system-state.html#navigator
@ -29,6 +30,9 @@ interface Navigator {
// https://w3c.github.io/ServiceWorker/#navigator-serviceworker // https://w3c.github.io/ServiceWorker/#navigator-serviceworker
[SecureContext, SameObject] readonly attribute ServiceWorkerContainer serviceWorker; [SecureContext, SameObject] readonly attribute ServiceWorkerContainer serviceWorker;
// https://w3c.github.io/media-capabilities/#dom-navigator-mediacapabilities
[SameObject] readonly attribute MediaCapabilities mediaCapabilities;
}; };
// NOTE: As NavigatorContentUtils, NavigatorCookies, NavigatorPlugins, and NavigatorAutomationInformation // NOTE: As NavigatorContentUtils, NavigatorCookies, NavigatorPlugins, and NavigatorAutomationInformation