From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- dom/encoding/TextDecoder.h | 124 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 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 000000000..5f6385f75 --- /dev/null +++ b/dom/encoding/TextDecoder.h @@ -0,0 +1,124 @@ +/* -*- 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 "nsAutoPtr.h" +#include "nsIUnicodeDecoder.h" + +namespace mozilla { + +class ErrorResult; + +namespace dom { + +class ArrayBufferViewOrArrayBuffer; + +class TextDecoder final + : public NonRefcountedDOMObject +{ +public: + // The WebIDL constructor. + static TextDecoder* + Constructor(const GlobalObject& aGlobal, + const nsAString& aEncoding, + const TextDecoderOptions& aOptions, + ErrorResult& aRv) + { + nsAutoPtr txtDecoder(new TextDecoder()); + txtDecoder->Init(aEncoding, aOptions.mFatal, aRv); + if (aRv.Failed()) { + return nullptr; + } + return txtDecoder.forget(); + } + + TextDecoder() + : mFatal(false) + { + MOZ_COUNT_CTOR(TextDecoder); + } + + ~TextDecoder() + { + MOZ_COUNT_DTOR(TextDecoder); + } + + bool WrapObject(JSContext* aCx, JS::Handle aGivenProto, JS::MutableHandle aReflector) + { + return TextDecoderBinding::Wrap(aCx, this, aGivenProto, aReflector); + } + + /** + * Validates provided label and throws an exception if invalid label. + * + * @param aLabel The encoding label (case insensitive) provided. + * @param aFatal indicates whether to throw an 'EncodingError' + * exception or not when decoding. + * @return aRv EncodingError exception else null. + */ + void Init(const nsAString& aLabel, const bool aFatal, ErrorResult& aRv); + + /** + * Performs initialization with a Gecko-canonical encoding name (as opposed + * to a label.) + * + * @param aEncoding A Gecko-canonical encoding name + * @param aFatal indicates whether to throw an 'EncodingError' + * exception or not when decoding. + */ + void InitWithEncoding(const nsACString& aEncoding, const bool aFatal); + + /** + * Return the encoding name. + * + * @param aEncoding, current encoding. + */ + void GetEncoding(nsAString& aEncoding); + + /** + * 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 aView, incoming byte stream of characters to be decoded to + * to UTF-16 code points. + * @param aOptions, indicates if streaming or not. + * @param aOutDecodedString, decoded string of UTF-16 code points. + * @param aRv, error result. + */ + void Decode(const char* aInput, const int32_t aLength, + const bool aStream, nsAString& aOutDecodedString, + ErrorResult& aRv); + + void Decode(const Optional& aBuffer, + const TextDecodeOptions& aOptions, + nsAString& aOutDecodedString, + ErrorResult& aRv); + + bool Fatal() const { + return mFatal; + } + +private: + nsCString mEncoding; + nsCOMPtr mDecoder; + bool mFatal; +}; + +} // namespace dom +} // namespace mozilla + +#endif // mozilla_dom_textdecoder_h_ -- cgit v1.2.3