Chromium Code Reviews| Index: Source/core/dom/Document.cpp |
| diff --git a/Source/core/dom/Document.cpp b/Source/core/dom/Document.cpp |
| index b33d5a3ddce331441e4c6a1a3d043c442f54ff45..cbd3af6a1c38380bfc988795ca703931692d788f 100644 |
| --- a/Source/core/dom/Document.cpp |
| +++ b/Source/core/dom/Document.cpp |
| @@ -131,7 +131,6 @@ |
| #include "core/loader/FrameLoaderClient.h" |
| #include "core/loader/ImageLoader.h" |
| #include "core/loader/Prerenderer.h" |
| -#include "core/loader/TextResourceDecoder.h" |
| #include "core/loader/appcache/ApplicationCacheHost.h" |
| #include "core/page/Chrome.h" |
| #include "core/page/ChromeClient.h" |
| @@ -537,8 +536,6 @@ Document::~Document() |
| if (this == topDocument()) |
| clearAXObjectCache(); |
| - setDecoder(PassRefPtr<TextResourceDecoder>()); |
| - |
| if (m_styleSheetList) |
| m_styleSheetList->detachFromDocument(); |
| @@ -1115,7 +1112,7 @@ String Document::encodingName() const |
| // TextEncoding::domName() returns a char*, no need to allocate a new |
| // String for it each time. |
| // FIXME: We should fix TextEncoding to speak AtomicString anyway. |
| - return AtomicString(m_encoding.domName()); |
| + return AtomicString(encoding().domName()); |
| } |
| String Document::defaultCharset() const |
| @@ -1127,10 +1124,15 @@ String Document::defaultCharset() const |
| void Document::setCharset(const String& charset) |
| { |
| - if (!decoder()) |
| + if (DocumentLoader* documentLoader = loader()) |
| + documentLoader->setUserChosenEncoding(charset); |
| + WTF::TextEncoding encoding(charset); |
| + // In case the encoding didn't exist, we keep the old one (helps some sites specifying invalid encodings). |
| + if (!encoding.isValid()) |
| return; |
| - decoder()->setEncoding(charset, TextResourceDecoder::UserChosenEncoding); |
| - setEncoding(m_decoder->encoding()); |
| + DocumentEncodingData data; |
| + data.encoding = encoding; |
| + setEncoding(data); |
|
abarth-chromium
2013/08/30 22:50:38
Won't this get spammed over the next time we get a
|
| } |
| void Document::setContentLanguage(const String& language) |
| @@ -3936,15 +3938,15 @@ bool Document::parseQualifiedName(const String& qualifiedName, String& prefix, S |
| return parseQualifiedNameInternal(qualifiedName, qualifiedName.characters16(), length, prefix, localName, es); |
| } |
| -void Document::setDecoder(PassRefPtr<TextResourceDecoder> decoder) |
| +Document::DocumentEncodingData::DocumentEncodingData() |
| + : wasDetectedHeuristically(false) |
| + , sawDecodingError(false) |
| { |
| - m_decoder = decoder; |
| - setEncoding(m_decoder ? m_decoder->encoding() : WTF::TextEncoding()); |
| } |
| -void Document::setEncoding(const WTF::TextEncoding& encoding) |
| +void Document::setEncoding(DocumentEncodingData data) |
| { |
| - m_encoding = encoding; |
| + m_encodingData = data; |
| } |
| KURL Document::completeURL(const String& url, const KURL& baseURLOverride) const |
| @@ -3955,9 +3957,9 @@ KURL Document::completeURL(const String& url, const KURL& baseURLOverride) const |
| if (url.isNull()) |
| return KURL(); |
| const KURL& baseURL = ((baseURLOverride.isEmpty() || baseURLOverride == blankURL()) && parentDocument()) ? parentDocument()->baseURL() : baseURLOverride; |
| - if (!m_decoder) |
| + if (!encoding().isValid()) |
| return KURL(baseURL, url); |
| - return KURL(baseURL, url, m_decoder->encoding()); |
| + return KURL(baseURL, url, encoding()); |
| } |
| KURL Document::completeURL(const String& url) const |
| @@ -4677,23 +4679,23 @@ void Document::resumeScriptedAnimationControllerCallbacks() |
| String Document::displayStringModifiedByEncoding(const String& str) const |
| { |
| - if (m_decoder) |
| - return m_decoder->encoding().displayString(str.impl()); |
| + if (encoding().isValid()) |
| + return encoding().displayString(str.impl()); |
| return str; |
| } |
| PassRefPtr<StringImpl> Document::displayStringModifiedByEncoding(PassRefPtr<StringImpl> str) const |
| { |
| - if (m_decoder) |
| - return m_decoder->encoding().displayString(str); |
| + if (encoding().isValid()) |
| + return encoding().displayString(str); |
| return str; |
| } |
| template <typename CharacterType> |
| void Document::displayBufferModifiedByEncodingInternal(CharacterType* buffer, unsigned len) const |
| { |
| - if (m_decoder) |
| - m_decoder->encoding().displayBuffer(buffer, len); |
| + if (encoding().isValid()) |
| + encoding().displayBuffer(buffer, len); |
| } |
| // Generate definitions for both character types |