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

Unified Diff: Source/core/dom/Document.cpp

Issue 23455024: Move ownership of the TextResourceDecoder to DecodedDataDocumentParser (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 4 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: 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

Powered by Google App Engine
This is Rietveld 408576698