Chromium Code Reviews| Index: Source/core/dom/DecodedDataDocumentParser.cpp |
| diff --git a/Source/core/dom/DecodedDataDocumentParser.cpp b/Source/core/dom/DecodedDataDocumentParser.cpp |
| index c7345802679b21dac20c0f7e65112e52d94d6bf5..9c552442cab30121ec4cd9a60f558cd3a12e5d6e 100644 |
| --- a/Source/core/dom/DecodedDataDocumentParser.cpp |
| +++ b/Source/core/dom/DecodedDataDocumentParser.cpp |
| @@ -27,6 +27,7 @@ |
| #include "core/dom/DecodedDataDocumentParser.h" |
| #include "core/dom/Document.h" |
| +#include "core/dom/DocumentEncodingData.h" |
| #include "core/fetch/TextResourceDecoder.h" |
| namespace WebCore { |
| @@ -36,6 +37,15 @@ DecodedDataDocumentParser::DecodedDataDocumentParser(Document* document) |
| { |
| } |
| +DecodedDataDocumentParser::~DecodedDataDocumentParser() |
| +{ |
| +} |
| + |
| +void DecodedDataDocumentParser::setDecoder(PassRefPtr<TextResourceDecoder> decoder) |
| +{ |
| + m_decoder = decoder; |
| +} |
| + |
| size_t DecodedDataDocumentParser::appendBytes(const char* data, size_t length) |
| { |
| if (!length) |
| @@ -47,8 +57,8 @@ size_t DecodedDataDocumentParser::appendBytes(const char* data, size_t length) |
| if (isDetached()) |
| return 0; |
| - String decoded = document()->decoder()->decode(data, length); |
| - document()->setEncoding(document()->decoder()->encoding()); |
| + String decoded = m_decoder->decode(data, length); |
| + updateDocumentEncoding(); |
| if (decoded.isEmpty()) |
| return 0; |
| @@ -69,11 +79,11 @@ size_t DecodedDataDocumentParser::flush() |
| // null decoder indicates there is no data received. |
| // We have nothing to do in that case. |
| - TextResourceDecoder* decoder = document()->decoder(); |
| - if (!decoder) |
| + if (!m_decoder) |
| return 0; |
| - String remainingData = decoder->flush(); |
| - document()->setEncoding(document()->decoder()->encoding()); |
| + String remainingData = m_decoder->flush(); |
| + updateDocumentEncoding(); |
| + |
| if (remainingData.isEmpty()) |
| return 0; |
| @@ -83,4 +93,13 @@ size_t DecodedDataDocumentParser::flush() |
| return consumedChars; |
| } |
| +void DecodedDataDocumentParser::updateDocumentEncoding() |
| +{ |
| + DocumentEncodingData encodingData; |
| + encodingData.encoding = m_decoder->encoding(); |
| + encodingData.wasDetectedHeuristically = m_decoder->encodingWasDetectedHeuristically(); |
| + encodingData.sawDecodingError = m_decoder->sawError(); |
| + document()->setEncodingData(encodingData); |
|
abarth-chromium
2013/11/14 07:04:33
Looks like we call this unconditionally every time
oystein (OOO til 10th of July)
2013/11/14 19:02:29
We could check, but I don't think it would really
|
| +} |
| + |
| }; |