diff --git a/Libraries/LibWeb/CMakeLists.txt b/Libraries/LibWeb/CMakeLists.txt index aef0b95325c..20177c7d8b8 100644 --- a/Libraries/LibWeb/CMakeLists.txt +++ b/Libraries/LibWeb/CMakeLists.txt @@ -243,6 +243,7 @@ set(SOURCES Editing/Internal/Algorithms.cpp Encoding/TextDecoder.cpp Encoding/TextEncoder.cpp + Encoding/TextEncoderCommon.cpp EntriesAPI/FileSystemEntry.cpp EventTiming/PerformanceEventTiming.cpp Fetch/Body.cpp diff --git a/Libraries/LibWeb/Encoding/TextEncoder.cpp b/Libraries/LibWeb/Encoding/TextEncoder.cpp index 10504a5bb22..f13601525f2 100644 --- a/Libraries/LibWeb/Encoding/TextEncoder.cpp +++ b/Libraries/LibWeb/Encoding/TextEncoder.cpp @@ -106,11 +106,4 @@ TextEncoderEncodeIntoResult TextEncoder::encode_into(String const& source, GC::R return { read, written }; } -// https://encoding.spec.whatwg.org/#dom-textencoder-encoding -FlyString const& TextEncoder::encoding() -{ - static FlyString const encoding = "utf-8"_fly_string; - return encoding; -} - } diff --git a/Libraries/LibWeb/Encoding/TextEncoder.h b/Libraries/LibWeb/Encoding/TextEncoder.h index a82337686f6..e6bfc22c63f 100644 --- a/Libraries/LibWeb/Encoding/TextEncoder.h +++ b/Libraries/LibWeb/Encoding/TextEncoder.h @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -24,7 +25,9 @@ struct TextEncoderEncodeIntoResult { }; // https://encoding.spec.whatwg.org/#textencoder -class TextEncoder final : public Bindings::PlatformObject { +class TextEncoder final + : public Bindings::PlatformObject + , public TextEncoderCommonMixin { WEB_PLATFORM_OBJECT(TextEncoder, Bindings::PlatformObject); GC_DECLARE_ALLOCATOR(TextEncoder); @@ -36,8 +39,6 @@ public: GC::Ref encode(String const& input) const; TextEncoderEncodeIntoResult encode_into(String const& source, GC::Root const& destination) const; - static FlyString const& encoding(); - protected: // https://encoding.spec.whatwg.org/#dom-textencoder explicit TextEncoder(JS::Realm&); diff --git a/Libraries/LibWeb/Encoding/TextEncoder.idl b/Libraries/LibWeb/Encoding/TextEncoder.idl index c71cc5d9158..f10345790db 100644 --- a/Libraries/LibWeb/Encoding/TextEncoder.idl +++ b/Libraries/LibWeb/Encoding/TextEncoder.idl @@ -1,7 +1,4 @@ -// https://encoding.spec.whatwg.org/#textencodercommon -interface mixin TextEncoderCommon { - readonly attribute DOMString encoding; -}; +#import // https://encoding.spec.whatwg.org/#dictdef-textencoderencodeintoresult dictionary TextEncoderEncodeIntoResult { @@ -17,4 +14,5 @@ interface TextEncoder { [NewObject] Uint8Array encode(optional USVString input = ""); TextEncoderEncodeIntoResult encodeInto(USVString source, [AllowShared] Uint8Array destination); }; + TextEncoder includes TextEncoderCommon; diff --git a/Libraries/LibWeb/Encoding/TextEncoderCommon.cpp b/Libraries/LibWeb/Encoding/TextEncoderCommon.cpp new file mode 100644 index 00000000000..99cb6469627 --- /dev/null +++ b/Libraries/LibWeb/Encoding/TextEncoderCommon.cpp @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +namespace Web::Encoding { + +TextEncoderCommonMixin::TextEncoderCommonMixin() = default; +TextEncoderCommonMixin::~TextEncoderCommonMixin() = default; + +// https://encoding.spec.whatwg.org/#dom-textencoder-encoding +FlyString const& TextEncoderCommonMixin::encoding() const +{ + // The encoding getter steps are to return "utf-8". + static FlyString const encoding = "utf-8"_fly_string; + return encoding; +} + +} diff --git a/Libraries/LibWeb/Encoding/TextEncoderCommon.h b/Libraries/LibWeb/Encoding/TextEncoderCommon.h new file mode 100644 index 00000000000..cd6de484205 --- /dev/null +++ b/Libraries/LibWeb/Encoding/TextEncoderCommon.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2024, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +#include + +namespace Web::Encoding { + +class TextEncoderCommonMixin { +public: + virtual ~TextEncoderCommonMixin(); + + // https://encoding.spec.whatwg.org/#dom-textencoder-encoding + FlyString const& encoding() const; + +protected: + TextEncoderCommonMixin(); +}; + +} diff --git a/Libraries/LibWeb/Encoding/TextEncoderCommon.idl b/Libraries/LibWeb/Encoding/TextEncoderCommon.idl new file mode 100644 index 00000000000..609c402637f --- /dev/null +++ b/Libraries/LibWeb/Encoding/TextEncoderCommon.idl @@ -0,0 +1,4 @@ +// https://encoding.spec.whatwg.org/#textencodercommon +interface mixin TextEncoderCommon { + readonly attribute DOMString encoding; +};