Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Unified Diff: third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.cpp

Issue 1725283002: Top-level domain-based default encoding (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed comments Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.cpp
diff --git a/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.cpp b/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.cpp
index 077ad6d0f5013afd3cd332a3a30ec748e3eb6825..204a8ede7bba46ee6cc5b04da2d07f6a855c5bde 100644
--- a/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.cpp
+++ b/third_party/WebKit/Source/core/loader/TextResourceDecoderBuilder.cpp
@@ -42,6 +42,71 @@ static inline bool canReferToParentFrameEncoding(const LocalFrame* frame, const
return parentFrame && parentFrame->document()->securityOrigin()->canAccess(frame->document()->securityOrigin());
}
+static const char* legacyEncodings[] = {
esprehn 2016/03/21 22:56:25 I'd name this into an array of structs, so you cou
Jinsuk Kim 2016/03/22 21:51:52 Done. Also used anonymous namespace to limit the s
+ "au", "windows-1252",
+ "az", "ISO-8859-9",
+ "bd", "windows-1252",
+ "bg", "windows-1251",
+ "br", "windows-1252",
+ "ca", "windows-1252",
+ "ch", "windows-1252",
+ "cn", "GBK",
+ "cz", "windows-1250",
+ "de", "windows-1252",
+ "dk", "windows-1252",
+ "ee", "windows-1256",
+ "eg", "windows-1257",
+ "et", "windows-1252",
+ "fi", "windows-1252",
+ "fr", "windows-1252",
+ "gb", "windows-1252",
+ "gr", "ISO-8859-7",
+ "hk", "Big5",
+ "hr", "windows-1250",
+ "hu", "ISO-8859-2",
+ "il", "windows-1255",
+ "ir", "windows-1257",
+ "is", "windows-1252",
+ "it", "windows-1252",
+ "jp", "Shift_JIS",
+ "kr", "windows-949",
+ "lt", "windows-1256",
+ "lv", "windows-1256",
+ "mk", "windows-1251",
+ "nl", "windows-1252",
+ "no", "windows-1252",
+ "pl", "ISO-8859-2",
+ "pt", "windows-1252",
+ "ro", "ISO-8859-2",
+ "rs", "windows-1251",
+ "ru", "windows-1251",
+ "se", "windows-1252",
+ "si", "ISO-8859-2",
+ "sk", "windows-1250",
+ "th", "windows-874",
+ "tr", "ISO-8859-9",
+ "tw", "Big5",
+ "tz", "windows-1252",
+ "ua", "windows-1251",
+ "us", "windows-1252",
+ "vn", "windows-1258",
+ "xa", "windows-1252",
+ "xb", "windows-1257"
+};
+
+static const WTF::TextEncoding getEncodingFromDomain(const KURL& url)
+{
+ Vector<String> tokens;
+ url.host().split(".", tokens);
+ if (!tokens.isEmpty()) {
+ auto tld = tokens.last();
+ for (size_t i = 0; i < WTF_ARRAY_LENGTH(legacyEncodings); i += 2) {
+ if (tld == legacyEncodings[i])
+ return WTF::TextEncoding(legacyEncodings[i + 1]);
+ }
+ }
+ return WTF::TextEncoding();
+}
TextResourceDecoderBuilder::TextResourceDecoderBuilder(const AtomicString& mimeType, const AtomicString& encoding)
: m_mimeType(mimeType)
@@ -56,12 +121,13 @@ TextResourceDecoderBuilder::~TextResourceDecoderBuilder()
inline PassOwnPtr<TextResourceDecoder> TextResourceDecoderBuilder::createDecoderInstance(Document* document)
{
+ const WTF::TextEncoding encodingFromDomain = getEncodingFromDomain(document->url());
if (LocalFrame* frame = document->frame()) {
if (Settings* settings = frame->settings())
- return TextResourceDecoder::create(m_mimeType, settings->defaultTextEncodingName(), settings->usesEncodingDetector());
+ return TextResourceDecoder::create(m_mimeType, encodingFromDomain.isValid() ? encodingFromDomain : settings->defaultTextEncodingName(), settings->usesEncodingDetector());
}
- return TextResourceDecoder::create(m_mimeType, String());
+ return TextResourceDecoder::create(m_mimeType, encodingFromDomain);
}
inline void TextResourceDecoderBuilder::setupEncoding(TextResourceDecoder* decoder, Document* document)

Powered by Google App Engine
This is Rietveld 408576698