From 73a80b70473d15d715f527c41319753102520b7b Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Sat, 22 Apr 2023 14:39:20 -0400 Subject: [PATCH] LibWeb: Implement the MediaError IDL interface --- Userland/Libraries/LibWeb/CMakeLists.txt | 1 + Userland/Libraries/LibWeb/Forward.h | 1 + Userland/Libraries/LibWeb/HTML/MediaError.cpp | 29 +++++++++++++ Userland/Libraries/LibWeb/HTML/MediaError.h | 41 +++++++++++++++++++ Userland/Libraries/LibWeb/HTML/MediaError.idl | 11 +++++ Userland/Libraries/LibWeb/idl_files.cmake | 1 + 6 files changed, 84 insertions(+) create mode 100644 Userland/Libraries/LibWeb/HTML/MediaError.cpp create mode 100644 Userland/Libraries/LibWeb/HTML/MediaError.h create mode 100644 Userland/Libraries/LibWeb/HTML/MediaError.idl diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index a9361f01b5..6beb7ffb5b 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -309,6 +309,7 @@ set(SOURCES HTML/HTMLVideoElement.cpp HTML/ImageData.cpp HTML/Location.cpp + HTML/MediaError.cpp HTML/MessageChannel.cpp HTML/MessageEvent.cpp HTML/MessagePort.cpp diff --git a/Userland/Libraries/LibWeb/Forward.h b/Userland/Libraries/LibWeb/Forward.h index 7fdc8e5c89..9a611db92c 100644 --- a/Userland/Libraries/LibWeb/Forward.h +++ b/Userland/Libraries/LibWeb/Forward.h @@ -365,6 +365,7 @@ class HTMLUnknownElement; class HTMLVideoElement; class ImageData; class Location; +class MediaError; class MessageChannel; class MessageEvent; class MessagePort; diff --git a/Userland/Libraries/LibWeb/HTML/MediaError.cpp b/Userland/Libraries/LibWeb/HTML/MediaError.cpp new file mode 100644 index 0000000000..120c8e49f2 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/MediaError.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +namespace Web::HTML { + +MediaError::MediaError(JS::Realm& realm, Code code, String message) + : Base(realm) + , m_code(code) + , m_message(move(message)) +{ +} + +JS::ThrowCompletionOr MediaError::initialize(JS::Realm& realm) +{ + MUST_OR_THROW_OOM(Base::initialize(realm)); + set_prototype(&Bindings::ensure_web_prototype(realm, "MediaError")); + + return {}; +} + +} diff --git a/Userland/Libraries/LibWeb/HTML/MediaError.h b/Userland/Libraries/LibWeb/HTML/MediaError.h new file mode 100644 index 0000000000..0b81f264b3 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/MediaError.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include +#include +#include + +namespace Web::HTML { + +class MediaError final : public Bindings::PlatformObject { + WEB_PLATFORM_OBJECT(MediaError, Bindings::PlatformObject); + +public: + enum class Code : u16 { + Aborted = 1, + Network = 2, + Decode = 3, + SrcNotSupported = 4, + }; + + Code code() const { return m_code; } + String const& message() const { return m_message; } + +private: + MediaError(JS::Realm&, Code code, String message); + + virtual JS::ThrowCompletionOr initialize(JS::Realm&) override; + + // https://html.spec.whatwg.org/multipage/media.html#dom-mediaerror-code + Code m_code; + + // https://html.spec.whatwg.org/multipage/media.html#dom-mediaerror-message + String m_message; +}; + +} diff --git a/Userland/Libraries/LibWeb/HTML/MediaError.idl b/Userland/Libraries/LibWeb/HTML/MediaError.idl new file mode 100644 index 0000000000..4c02fbed25 --- /dev/null +++ b/Userland/Libraries/LibWeb/HTML/MediaError.idl @@ -0,0 +1,11 @@ +// https://html.spec.whatwg.org/multipage/media.html#mediaerror +[Exposed=Window] +interface MediaError { + const unsigned short MEDIA_ERR_ABORTED = 1; + const unsigned short MEDIA_ERR_NETWORK = 2; + const unsigned short MEDIA_ERR_DECODE = 3; + const unsigned short MEDIA_ERR_SRC_NOT_SUPPORTED = 4; + + readonly attribute unsigned short code; + readonly attribute DOMString message; +}; diff --git a/Userland/Libraries/LibWeb/idl_files.cmake b/Userland/Libraries/LibWeb/idl_files.cmake index b89700b078..83c0eddbeb 100644 --- a/Userland/Libraries/LibWeb/idl_files.cmake +++ b/Userland/Libraries/LibWeb/idl_files.cmake @@ -152,6 +152,7 @@ libweb_js_bindings(HTML/HTMLUnknownElement) libweb_js_bindings(HTML/HTMLVideoElement) libweb_js_bindings(HTML/ImageData) libweb_js_bindings(HTML/Location) +libweb_js_bindings(HTML/MediaError) libweb_js_bindings(HTML/MessageChannel) libweb_js_bindings(HTML/MessageEvent) libweb_js_bindings(HTML/MessagePort)