diff options
Diffstat (limited to '')
-rw-r--r-- | parser/html/nsHtml5MetaScannerCppSupplement.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/parser/html/nsHtml5MetaScannerCppSupplement.h b/parser/html/nsHtml5MetaScannerCppSupplement.h new file mode 100644 index 0000000000..16878fa53e --- /dev/null +++ b/parser/html/nsHtml5MetaScannerCppSupplement.h @@ -0,0 +1,39 @@ +/* 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/. */ + +#include "nsISupportsImpl.h" + +#include "mozilla/Encoding.h" + +const mozilla::Encoding* nsHtml5MetaScanner::sniff(nsHtml5ByteReadable* bytes) { + readable = bytes; + stateLoop(stateSave); + readable = nullptr; + return mEncoding; +} + +bool nsHtml5MetaScanner::tryCharset(nsHtml5String charset) { + // This code needs to stay in sync with + // nsHtml5StreamParser::internalEncodingDeclaration. Unfortunately, the + // trickery with member fields here leads to some copy-paste reuse. :-( + nsAutoCString label; + nsString charset16; // Not Auto, because using it to hold nsStringBuffer* + charset.ToString(charset16); + CopyUTF16toUTF8(charset16, label); + const mozilla::Encoding* encoding = Encoding::ForLabel(label); + if (!encoding) { + return false; + } + if (encoding == UTF_16BE_ENCODING || encoding == UTF_16LE_ENCODING) { + mEncoding = UTF_8_ENCODING; + return true; + } + if (encoding == X_USER_DEFINED_ENCODING) { + // WebKit/Blink hack for Indian and Armenian legacy sites + mEncoding = WINDOWS_1252_ENCODING; + return true; + } + mEncoding = encoding; + return true; +} |