| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2000 Peter Kelly (pmk@post.com) | 2 * Copyright (C) 2000 Peter Kelly (pmk@post.com) |
| 3 * Copyright (C) 2005, 2006, 2008, 2014 Apple Inc. All rights reserved. | 3 * Copyright (C) 2005, 2006, 2008, 2014 Apple Inc. All rights reserved. |
| 4 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) | 4 * Copyright (C) 2006 Alexey Proskuryakov (ap@webkit.org) |
| 5 * Copyright (C) 2007 Samuel Weinig (sam@webkit.org) | 5 * Copyright (C) 2007 Samuel Weinig (sam@webkit.org) |
| 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
| 7 * Copyright (C) 2008 Holger Hans Peter Freyther | 7 * Copyright (C) 2008 Holger Hans Peter Freyther |
| 8 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 8 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
| 9 * | 9 * |
| 10 * This library is free software; you can redistribute it and/or | 10 * This library is free software; you can redistribute it and/or |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 #include "core/xml/parser/XMLDocumentParser.h" | 27 #include "core/xml/parser/XMLDocumentParser.h" |
| 28 | 28 |
| 29 #include "bindings/core/v8/ExceptionState.h" | 29 #include "bindings/core/v8/ExceptionState.h" |
| 30 #include "bindings/core/v8/ExceptionStatePlaceholder.h" | 30 #include "bindings/core/v8/ExceptionStatePlaceholder.h" |
| 31 #include "bindings/core/v8/ScriptController.h" | 31 #include "bindings/core/v8/ScriptController.h" |
| 32 #include "bindings/core/v8/ScriptSourceCode.h" | 32 #include "bindings/core/v8/ScriptSourceCode.h" |
| 33 #include "bindings/core/v8/V8Document.h" | 33 #include "bindings/core/v8/V8Document.h" |
| 34 #include "core/FetchInitiatorTypeNames.h" | 34 #include "core/FetchInitiatorTypeNames.h" |
| 35 #include "core/HTMLNames.h" | 35 #include "core/HTMLNames.h" |
| 36 #include "core/XMLNSNames.h" | 36 #include "core/XMLNSNames.h" |
| 37 #include "core/dom/CDATASection.h" | |
| 38 #include "core/dom/Comment.h" | 37 #include "core/dom/Comment.h" |
| 39 #include "core/dom/Document.h" | 38 #include "core/dom/Document.h" |
| 40 #include "core/dom/DocumentFragment.h" | 39 #include "core/dom/DocumentFragment.h" |
| 41 #include "core/dom/DocumentType.h" | 40 #include "core/dom/DocumentType.h" |
| 42 #include "core/dom/ProcessingInstruction.h" | 41 #include "core/dom/ProcessingInstruction.h" |
| 43 #include "core/dom/ScriptLoader.h" | 42 #include "core/dom/ScriptLoader.h" |
| 43 #include "core/dom/Text.h" |
| 44 #include "core/dom/TransformSource.h" | 44 #include "core/dom/TransformSource.h" |
| 45 #include "core/fetch/ResourceFetcher.h" | 45 #include "core/fetch/ResourceFetcher.h" |
| 46 #include "core/fetch/ScriptResource.h" | 46 #include "core/fetch/ScriptResource.h" |
| 47 #include "core/frame/LocalFrame.h" | 47 #include "core/frame/LocalFrame.h" |
| 48 #include "core/frame/UseCounter.h" | 48 #include "core/frame/UseCounter.h" |
| 49 #include "core/html/HTMLHtmlElement.h" | 49 #include "core/html/HTMLHtmlElement.h" |
| 50 #include "core/html/HTMLTemplateElement.h" | 50 #include "core/html/HTMLTemplateElement.h" |
| 51 #include "core/html/parser/HTMLEntityParser.h" | 51 #include "core/html/parser/HTMLEntityParser.h" |
| 52 #include "core/html/parser/TextResourceDecoder.h" | 52 #include "core/html/parser/TextResourceDecoder.h" |
| 53 #include "core/loader/FrameLoader.h" | 53 #include "core/loader/FrameLoader.h" |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 virtual void call(XMLDocumentParser* parser) override | 215 virtual void call(XMLDocumentParser* parser) override |
| 216 { | 216 { |
| 217 parser->processingInstruction(m_target, m_data); | 217 parser->processingInstruction(m_target, m_data); |
| 218 } | 218 } |
| 219 | 219 |
| 220 private: | 220 private: |
| 221 String m_target; | 221 String m_target; |
| 222 String m_data; | 222 String m_data; |
| 223 }; | 223 }; |
| 224 | 224 |
| 225 class PendingCDATABlockCallback final : public XMLDocumentParser::PendingCallbac
k { | |
| 226 public: | |
| 227 explicit PendingCDATABlockCallback(const String& text) : m_text(text) { } | |
| 228 | |
| 229 virtual void call(XMLDocumentParser* parser) override | |
| 230 { | |
| 231 parser->cdataBlock(m_text); | |
| 232 } | |
| 233 | |
| 234 private: | |
| 235 String m_text; | |
| 236 }; | |
| 237 | |
| 238 class PendingCommentCallback final : public XMLDocumentParser::PendingCallback { | 225 class PendingCommentCallback final : public XMLDocumentParser::PendingCallback { |
| 239 public: | 226 public: |
| 240 explicit PendingCommentCallback(const String& text) : m_text(text) { } | 227 explicit PendingCommentCallback(const String& text) : m_text(text) { } |
| 241 | 228 |
| 242 virtual void call(XMLDocumentParser* parser) override | 229 virtual void call(XMLDocumentParser* parser) override |
| 243 { | 230 { |
| 244 parser->comment(m_text); | 231 parser->comment(m_text); |
| 245 } | 232 } |
| 246 | 233 |
| 247 private: | 234 private: |
| (...skipping 921 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1169 // This behavior is very tricky. We call stopParsing() here because we | 1156 // This behavior is very tricky. We call stopParsing() here because we |
| 1170 // want to stop processing the document until we're ready to apply the | 1157 // want to stop processing the document until we're ready to apply the |
| 1171 // transform, but we actually still want to be fed decoded string pieces | 1158 // transform, but we actually still want to be fed decoded string pieces |
| 1172 // to accumulate in m_originalSourceForTransform. So, we call | 1159 // to accumulate in m_originalSourceForTransform. So, we call |
| 1173 // stopParsing() here and check isStopped() in element callbacks. | 1160 // stopParsing() here and check isStopped() in element callbacks. |
| 1174 // FIXME: This contradicts the contract of DocumentParser. | 1161 // FIXME: This contradicts the contract of DocumentParser. |
| 1175 stopParsing(); | 1162 stopParsing(); |
| 1176 } | 1163 } |
| 1177 } | 1164 } |
| 1178 | 1165 |
| 1179 void XMLDocumentParser::cdataBlock(const String& text) | |
| 1180 { | |
| 1181 if (isStopped()) | |
| 1182 return; | |
| 1183 | |
| 1184 if (m_parserPaused) { | |
| 1185 m_pendingCallbacks.append(adoptPtr(new PendingCDATABlockCallback(text)))
; | |
| 1186 return; | |
| 1187 } | |
| 1188 | |
| 1189 exitText(); | |
| 1190 | |
| 1191 m_currentNode->parserAppendChild(CDATASection::create(m_currentNode->documen
t(), text)); | |
| 1192 } | |
| 1193 | |
| 1194 void XMLDocumentParser::comment(const String& text) | 1166 void XMLDocumentParser::comment(const String& text) |
| 1195 { | 1167 { |
| 1196 if (isStopped()) | 1168 if (isStopped()) |
| 1197 return; | 1169 return; |
| 1198 | 1170 |
| 1199 if (m_parserPaused) { | 1171 if (m_parserPaused) { |
| 1200 m_pendingCallbacks.append(adoptPtr(new PendingCommentCallback(text))); | 1172 m_pendingCallbacks.append(adoptPtr(new PendingCommentCallback(text))); |
| 1201 return; | 1173 return; |
| 1202 } | 1174 } |
| 1203 | 1175 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1268 static void charactersHandler(void* closure, const xmlChar* chars, int length) | 1240 static void charactersHandler(void* closure, const xmlChar* chars, int length) |
| 1269 { | 1241 { |
| 1270 getParser(closure)->characters(chars, length); | 1242 getParser(closure)->characters(chars, length); |
| 1271 } | 1243 } |
| 1272 | 1244 |
| 1273 static void processingInstructionHandler(void* closure, const xmlChar* target, c
onst xmlChar* data) | 1245 static void processingInstructionHandler(void* closure, const xmlChar* target, c
onst xmlChar* data) |
| 1274 { | 1246 { |
| 1275 getParser(closure)->processingInstruction(toString(target), toString(data)); | 1247 getParser(closure)->processingInstruction(toString(target), toString(data)); |
| 1276 } | 1248 } |
| 1277 | 1249 |
| 1278 static void cdataBlockHandler(void* closure, const xmlChar* text, int length) | |
| 1279 { | |
| 1280 getParser(closure)->cdataBlock(toString(text, length)); | |
| 1281 } | |
| 1282 | |
| 1283 static void commentHandler(void* closure, const xmlChar* text) | 1250 static void commentHandler(void* closure, const xmlChar* text) |
| 1284 { | 1251 { |
| 1285 getParser(closure)->comment(toString(text)); | 1252 getParser(closure)->comment(toString(text)); |
| 1286 } | 1253 } |
| 1287 | 1254 |
| 1288 WTF_ATTRIBUTE_PRINTF(2, 3) | 1255 WTF_ATTRIBUTE_PRINTF(2, 3) |
| 1289 static void warningHandler(void* closure, const char* message, ...) | 1256 static void warningHandler(void* closure, const char* message, ...) |
| 1290 { | 1257 { |
| 1291 va_list args; | 1258 va_list args; |
| 1292 va_start(args, message); | 1259 va_start(args, message); |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1424 memset(&sax, 0, sizeof(sax)); | 1391 memset(&sax, 0, sizeof(sax)); |
| 1425 | 1392 |
| 1426 // According to http://xmlsoft.org/html/libxml-tree.html#xmlSAXHandler and | 1393 // According to http://xmlsoft.org/html/libxml-tree.html#xmlSAXHandler and |
| 1427 // http://xmlsoft.org/html/libxml-parser.html#fatalErrorSAXFunc the SAX | 1394 // http://xmlsoft.org/html/libxml-parser.html#fatalErrorSAXFunc the SAX |
| 1428 // fatalError callback is unused; error gets all the errors. Use normalError
Handler | 1395 // fatalError callback is unused; error gets all the errors. Use normalError
Handler |
| 1429 // for both the error and fatalError callbacks. | 1396 // for both the error and fatalError callbacks. |
| 1430 sax.error = normalErrorHandler; | 1397 sax.error = normalErrorHandler; |
| 1431 sax.fatalError = normalErrorHandler; | 1398 sax.fatalError = normalErrorHandler; |
| 1432 sax.characters = charactersHandler; | 1399 sax.characters = charactersHandler; |
| 1433 sax.processingInstruction = processingInstructionHandler; | 1400 sax.processingInstruction = processingInstructionHandler; |
| 1434 sax.cdataBlock = cdataBlockHandler; | 1401 sax.cdataBlock = charactersHandler; |
| 1435 sax.comment = commentHandler; | 1402 sax.comment = commentHandler; |
| 1436 sax.warning = warningHandler; | 1403 sax.warning = warningHandler; |
| 1437 sax.startElementNs = startElementNsHandler; | 1404 sax.startElementNs = startElementNsHandler; |
| 1438 sax.endElementNs = endElementNsHandler; | 1405 sax.endElementNs = endElementNsHandler; |
| 1439 sax.getEntity = getEntityHandler; | 1406 sax.getEntity = getEntityHandler; |
| 1440 sax.startDocument = startDocumentHandler; | 1407 sax.startDocument = startDocumentHandler; |
| 1441 sax.endDocument = endDocumentHandler; | 1408 sax.endDocument = endDocumentHandler; |
| 1442 sax.internalSubset = internalSubsetHandler; | 1409 sax.internalSubset = internalSubsetHandler; |
| 1443 sax.externalSubset = externalSubsetHandler; | 1410 sax.externalSubset = externalSubsetHandler; |
| 1444 sax.ignorableWhitespace = ignorableWhitespaceHandler; | 1411 sax.ignorableWhitespace = ignorableWhitespaceHandler; |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1639 sax.initialized = XML_SAX2_MAGIC; | 1606 sax.initialized = XML_SAX2_MAGIC; |
| 1640 RefPtr<XMLParserContext> parser = XMLParserContext::createStringParser(&sax,
&state); | 1607 RefPtr<XMLParserContext> parser = XMLParserContext::createStringParser(&sax,
&state); |
| 1641 String parseString = "<?xml version=\"1.0\"?><attrs " + string + " />"; | 1608 String parseString = "<?xml version=\"1.0\"?><attrs " + string + " />"; |
| 1642 parseChunk(parser->context(), parseString); | 1609 parseChunk(parser->context(), parseString); |
| 1643 finishParsing(parser->context()); | 1610 finishParsing(parser->context()); |
| 1644 attrsOK = state.gotAttributes; | 1611 attrsOK = state.gotAttributes; |
| 1645 return state.attributes; | 1612 return state.attributes; |
| 1646 } | 1613 } |
| 1647 | 1614 |
| 1648 } // namespace blink | 1615 } // namespace blink |
| OLD | NEW |