From 0ebf5bdf043a27fd3dfb7f92e0cb63d88954c44d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 03:47:29 +0200 Subject: Adding upstream version 115.8.0esr. Signed-off-by: Daniel Baumann --- dom/encoding/TextDecoder.h | 114 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 dom/encoding/TextDecoder.h (limited to 'dom/encoding/TextDecoder.h') diff --git a/dom/encoding/TextDecoder.h b/dom/encoding/TextDecoder.h new file mode 100644 index 0000000000..39ba8ed1f8 --- /dev/null +++ b/dom/encoding/TextDecoder.h @@ -0,0 +1,114 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_textdecoder_h_ +#define mozilla_dom_textdecoder_h_ + +#include "mozilla/dom/NonRefcountedDOMObject.h" +#include "mozilla/dom/TextDecoderBinding.h" +#include "mozilla/dom/TypedArray.h" +#include "mozilla/Encoding.h" +#include "mozilla/ErrorResult.h" +#include "mozilla/UniquePtr.h" + +namespace mozilla::dom { + +class ArrayBufferViewOrArrayBuffer; + +class TextDecoderCommon { + public: + /** + * Decodes incoming byte stream of characters in charset indicated by + * encoding. + * + * The encoding algorithm state is reset if aOptions.mStream is not set. + * + * If the fatal flag is set then a decoding error will throw EncodingError. + * Else the decoder will return a decoded string with replacement + * character(s) for unidentified character(s). + * + * @param aInput, incoming byte stream of characters to be decoded to + * to UTF-16 code points. + * @param aStream, indicates if streaming or not. + * @param aOutDecodedString, decoded string of UTF-16 code points. + * @param aRv, error result. + */ + void DecodeNative(mozilla::Span aInput, const bool aStream, + nsAString& aOutDecodedString, ErrorResult& aRv); + + /** + * Return the encoding name. + * + * @param aEncoding, current encoding. + */ + void GetEncoding(nsAString& aEncoding); + + bool Fatal() const { return mFatal; } + + bool IgnoreBOM() const { return mIgnoreBOM; } + + protected: + mozilla::UniquePtr mDecoder; + nsCString mEncoding; + bool mFatal = false; + bool mIgnoreBOM = false; +}; + +class TextDecoder final : public NonRefcountedDOMObject, + public TextDecoderCommon { + public: + // The WebIDL constructor. + static TextDecoder* Constructor(const GlobalObject& aGlobal, + const nsAString& aEncoding, + const TextDecoderOptions& aOptions, + ErrorResult& aRv) { + auto txtDecoder = MakeUnique(); + txtDecoder->Init(aEncoding, aOptions, aRv); + if (aRv.Failed()) { + return nullptr; + } + return txtDecoder.release(); + } + + TextDecoder() { MOZ_COUNT_CTOR(TextDecoder); } + + MOZ_COUNTED_DTOR(TextDecoder) + + bool WrapObject(JSContext* aCx, JS::Handle aGivenProto, + JS::MutableHandle aReflector) { + return TextDecoder_Binding::Wrap(aCx, this, aGivenProto, aReflector); + } + + /** + * Validates provided label and throws an exception if invalid label. + * + * @param aLabel The encoding label (case insensitive) provided. + * @param aOptions The TextDecoderOptions to use. + * @return aRv EncodingError exception else null. + */ + void Init(const nsAString& aLabel, const TextDecoderOptions& aOptions, + ErrorResult& aRv); + + /** + * Performs initialization with a Gecko-canonical encoding name (as opposed + * to a label.) + * + * @param aEncoding An Encoding object + * @param aOptions The TextDecoderOptions to use. + */ + void InitWithEncoding(NotNull aEncoding, + const TextDecoderOptions& aOptions); + + void Decode(const Optional& aBuffer, + const TextDecodeOptions& aOptions, nsAString& aOutDecodedString, + ErrorResult& aRv); + + private: +}; + +} // namespace mozilla::dom + +#endif // mozilla_dom_textdecoder_h_ -- cgit v1.2.3