OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. | 2 * Copyright (C) 2010 Google, Inc. All Rights Reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 17 matching lines...) Expand all Loading... |
28 | 28 |
29 #include "core/dom/Document.h" | 29 #include "core/dom/Document.h" |
30 #include "core/dom/DocumentEncodingData.h" | 30 #include "core/dom/DocumentEncodingData.h" |
31 #include "core/fetch/TextResourceDecoder.h" | 31 #include "core/fetch/TextResourceDecoder.h" |
32 | 32 |
33 namespace WebCore { | 33 namespace WebCore { |
34 | 34 |
35 DecodedDataDocumentParser::DecodedDataDocumentParser(Document* document) | 35 DecodedDataDocumentParser::DecodedDataDocumentParser(Document* document) |
36 : DocumentParser(document) | 36 : DocumentParser(document) |
37 , m_hasAppendedData(false) | 37 , m_hasAppendedData(false) |
| 38 , m_needsDecoder(true) |
38 { | 39 { |
39 } | 40 } |
40 | 41 |
41 DecodedDataDocumentParser::~DecodedDataDocumentParser() | 42 DecodedDataDocumentParser::~DecodedDataDocumentParser() |
42 { | 43 { |
43 } | 44 } |
44 | 45 |
45 void DecodedDataDocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder> decod
er) | 46 void DecodedDataDocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder> decod
er) |
46 { | 47 { |
| 48 m_needsDecoder = false; |
47 m_decoder = decoder; | 49 m_decoder = decoder; |
48 } | 50 } |
49 | 51 |
50 TextResourceDecoder* DecodedDataDocumentParser::decoder() | 52 TextResourceDecoder* DecodedDataDocumentParser::decoder() |
51 { | 53 { |
52 return m_decoder.get(); | 54 return m_decoder.get(); |
53 } | 55 } |
54 | 56 |
| 57 PassOwnPtr<TextResourceDecoder> DecodedDataDocumentParser::takeDecoder() |
| 58 { |
| 59 return m_decoder.release(); |
| 60 } |
| 61 |
55 void DecodedDataDocumentParser::setHasAppendedData() | 62 void DecodedDataDocumentParser::setHasAppendedData() |
56 { | 63 { |
57 m_hasAppendedData = true; | 64 m_hasAppendedData = true; |
58 } | 65 } |
59 | 66 |
60 void DecodedDataDocumentParser::appendBytes(const char* data, size_t length) | 67 void DecodedDataDocumentParser::appendBytes(const char* data, size_t length) |
61 { | 68 { |
62 if (!length) | 69 if (!length) |
63 return; | 70 return; |
64 | 71 |
(...skipping 19 matching lines...) Expand all Loading... |
84 // We have nothing to do in that case. | 91 // We have nothing to do in that case. |
85 if (!m_decoder) | 92 if (!m_decoder) |
86 return; | 93 return; |
87 | 94 |
88 String remainingData = m_decoder->flush(); | 95 String remainingData = m_decoder->flush(); |
89 updateDocument(remainingData); | 96 updateDocument(remainingData); |
90 } | 97 } |
91 | 98 |
92 void DecodedDataDocumentParser::updateDocument(String& decodedData) | 99 void DecodedDataDocumentParser::updateDocument(String& decodedData) |
93 { | 100 { |
94 DocumentEncodingData encodingData; | 101 document()->setEncodingData(DocumentEncodingData(*m_decoder.get())); |
95 encodingData.encoding = m_decoder->encoding(); | |
96 encodingData.wasDetectedHeuristically = m_decoder->encodingWasDetectedHeuris
tically(); | |
97 encodingData.sawDecodingError = m_decoder->sawError(); | |
98 document()->setEncodingData(encodingData); | |
99 | 102 |
100 if (decodedData.isEmpty()) | 103 if (decodedData.isEmpty()) |
101 return; | 104 return; |
102 | 105 |
103 append(decodedData.releaseImpl()); | 106 append(decodedData.releaseImpl()); |
104 // FIXME: Should be removed as part of https://code.google.com/p/chromium/is
sues/detail?id=319643 | 107 // FIXME: Should be removed as part of https://code.google.com/p/chromium/is
sues/detail?id=319643 |
105 if (!m_hasAppendedData) { | 108 if (!m_hasAppendedData) { |
106 m_hasAppendedData = true; | 109 m_hasAppendedData = true; |
107 if (m_decoder->encoding().usesVisualOrdering()) | 110 if (m_decoder->encoding().usesVisualOrdering()) |
108 document()->setVisuallyOrdered(); | 111 document()->setVisuallyOrdered(); |
109 } | 112 } |
110 } | 113 } |
111 | 114 |
112 }; | 115 }; |
OLD | NEW |