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

Side by Side Diff: third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp

Issue 2080623002: Revert "Remove OwnPtr from Blink." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 unified diff | Download patch
OLDNEW
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 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 #include "core/xml/parser/XMLDocumentParserScope.h" 60 #include "core/xml/parser/XMLDocumentParserScope.h"
61 #include "core/xml/parser/XMLParserInput.h" 61 #include "core/xml/parser/XMLParserInput.h"
62 #include "platform/RuntimeEnabledFeatures.h" 62 #include "platform/RuntimeEnabledFeatures.h"
63 #include "platform/SharedBuffer.h" 63 #include "platform/SharedBuffer.h"
64 #include "platform/TraceEvent.h" 64 #include "platform/TraceEvent.h"
65 #include "platform/network/ResourceError.h" 65 #include "platform/network/ResourceError.h"
66 #include "platform/network/ResourceRequest.h" 66 #include "platform/network/ResourceRequest.h"
67 #include "platform/network/ResourceResponse.h" 67 #include "platform/network/ResourceResponse.h"
68 #include "platform/v8_inspector/public/ConsoleTypes.h" 68 #include "platform/v8_inspector/public/ConsoleTypes.h"
69 #include "platform/weborigin/SecurityOrigin.h" 69 #include "platform/weborigin/SecurityOrigin.h"
70 #include "wtf/PtrUtil.h"
71 #include "wtf/StringExtras.h" 70 #include "wtf/StringExtras.h"
72 #include "wtf/TemporaryChange.h" 71 #include "wtf/TemporaryChange.h"
73 #include "wtf/Threading.h" 72 #include "wtf/Threading.h"
74 #include "wtf/Vector.h" 73 #include "wtf/Vector.h"
75 #include "wtf/text/UTF8.h" 74 #include "wtf/text/UTF8.h"
76 #include <libxml/catalog.h> 75 #include <libxml/catalog.h>
77 #include <libxml/parser.h> 76 #include <libxml/parser.h>
78 #include <libxml/parserInternals.h> 77 #include <libxml/parserInternals.h>
79 #include <libxslt/xslt.h> 78 #include <libxslt/xslt.h>
80 #include <memory>
81 79
82 namespace blink { 80 namespace blink {
83 81
84 using namespace HTMLNames; 82 using namespace HTMLNames;
85 83
86 // FIXME: HTMLConstructionSite has a limit of 512, should these match? 84 // FIXME: HTMLConstructionSite has a limit of 512, should these match?
87 static const unsigned maxXMLTreeDepth = 5000; 85 static const unsigned maxXMLTreeDepth = 5000;
88 86
89 static inline String toString(const xmlChar* string, size_t length) 87 static inline String toString(const xmlChar* string, size_t length)
90 { 88 {
(...skipping 864 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 } 953 }
956 954
957 void XMLDocumentParser::startElementNs(const AtomicString& localName, const Atom icString& prefix, const AtomicString& uri, int nbNamespaces, 955 void XMLDocumentParser::startElementNs(const AtomicString& localName, const Atom icString& prefix, const AtomicString& uri, int nbNamespaces,
958 const xmlChar** libxmlNamespaces, int nbAttributes, int nbDefaulted, const x mlChar** libxmlAttributes) 956 const xmlChar** libxmlNamespaces, int nbAttributes, int nbDefaulted, const x mlChar** libxmlAttributes)
959 { 957 {
960 if (isStopped()) 958 if (isStopped())
961 return; 959 return;
962 960
963 if (m_parserPaused) { 961 if (m_parserPaused) {
964 m_scriptStartPosition = textPosition(); 962 m_scriptStartPosition = textPosition();
965 m_pendingCallbacks.append(wrapUnique(new PendingStartElementNSCallback(l ocalName, prefix, uri, nbNamespaces, libxmlNamespaces, 963 m_pendingCallbacks.append(adoptPtr(new PendingStartElementNSCallback(loc alName, prefix, uri, nbNamespaces, libxmlNamespaces,
966 nbAttributes, nbDefaulted, libxmlAttributes))); 964 nbAttributes, nbDefaulted, libxmlAttributes)));
967 return; 965 return;
968 } 966 }
969 967
970 if (!updateLeafTextNode()) 968 if (!updateLeafTextNode())
971 return; 969 return;
972 970
973 AtomicString adjustedURI = uri; 971 AtomicString adjustedURI = uri;
974 if (m_parsingFragment && adjustedURI.isNull()) { 972 if (m_parsingFragment && adjustedURI.isNull()) {
975 if (!prefix.isNull()) 973 if (!prefix.isNull())
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 // runScriptsAtDocumentElementAvailable might have invalidated the docum ent. 1032 // runScriptsAtDocumentElementAvailable might have invalidated the docum ent.
1035 } 1033 }
1036 } 1034 }
1037 1035
1038 void XMLDocumentParser::endElementNs() 1036 void XMLDocumentParser::endElementNs()
1039 { 1037 {
1040 if (isStopped()) 1038 if (isStopped())
1041 return; 1039 return;
1042 1040
1043 if (m_parserPaused) { 1041 if (m_parserPaused) {
1044 m_pendingCallbacks.append(wrapUnique(new PendingEndElementNSCallback(m_s criptStartPosition))); 1042 m_pendingCallbacks.append(adoptPtr(new PendingEndElementNSCallback(m_scr iptStartPosition)));
1045 return; 1043 return;
1046 } 1044 }
1047 1045
1048 if (!updateLeafTextNode()) 1046 if (!updateLeafTextNode())
1049 return; 1047 return;
1050 1048
1051 ContainerNode* n = m_currentNode; 1049 ContainerNode* n = m_currentNode;
1052 if (m_currentNode->isElementNode()) 1050 if (m_currentNode->isElementNode())
1053 toElement(n)->finishParsingChildren(); 1051 toElement(n)->finishParsingChildren();
1054 1052
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1116 { 1114 {
1117 m_scriptStartPosition = textPosition; 1115 m_scriptStartPosition = textPosition;
1118 } 1116 }
1119 1117
1120 void XMLDocumentParser::characters(const xmlChar* chars, int length) 1118 void XMLDocumentParser::characters(const xmlChar* chars, int length)
1121 { 1119 {
1122 if (isStopped()) 1120 if (isStopped())
1123 return; 1121 return;
1124 1122
1125 if (m_parserPaused) { 1123 if (m_parserPaused) {
1126 m_pendingCallbacks.append(wrapUnique(new PendingCharactersCallback(chars , length))); 1124 m_pendingCallbacks.append(adoptPtr(new PendingCharactersCallback(chars, length)));
1127 return; 1125 return;
1128 } 1126 }
1129 1127
1130 createLeafTextNodeIfNeeded(); 1128 createLeafTextNodeIfNeeded();
1131 m_bufferedText.append(chars, length); 1129 m_bufferedText.append(chars, length);
1132 } 1130 }
1133 1131
1134 void XMLDocumentParser::error(XMLErrors::ErrorType type, const char* message, va _list args) 1132 void XMLDocumentParser::error(XMLErrors::ErrorType type, const char* message, va _list args)
1135 { 1133 {
1136 if (isStopped()) 1134 if (isStopped())
1137 return; 1135 return;
1138 1136
1139 char formattedMessage[1024]; 1137 char formattedMessage[1024];
1140 vsnprintf(formattedMessage, sizeof(formattedMessage) - 1, message, args); 1138 vsnprintf(formattedMessage, sizeof(formattedMessage) - 1, message, args);
1141 1139
1142 if (m_parserPaused) { 1140 if (m_parserPaused) {
1143 m_pendingCallbacks.append(wrapUnique(new PendingErrorCallback(type, rein terpret_cast<const xmlChar*>(formattedMessage), lineNumber(), columnNumber()))); 1141 m_pendingCallbacks.append(adoptPtr(new PendingErrorCallback(type, reinte rpret_cast<const xmlChar*>(formattedMessage), lineNumber(), columnNumber())));
1144 return; 1142 return;
1145 } 1143 }
1146 1144
1147 handleError(type, formattedMessage, textPosition()); 1145 handleError(type, formattedMessage, textPosition());
1148 } 1146 }
1149 1147
1150 void XMLDocumentParser::processingInstruction(const String& target, const String & data) 1148 void XMLDocumentParser::processingInstruction(const String& target, const String & data)
1151 { 1149 {
1152 if (isStopped()) 1150 if (isStopped())
1153 return; 1151 return;
1154 1152
1155 if (m_parserPaused) { 1153 if (m_parserPaused) {
1156 m_pendingCallbacks.append(wrapUnique(new PendingProcessingInstructionCal lback(target, data))); 1154 m_pendingCallbacks.append(adoptPtr(new PendingProcessingInstructionCallb ack(target, data)));
1157 return; 1155 return;
1158 } 1156 }
1159 1157
1160 if (!updateLeafTextNode()) 1158 if (!updateLeafTextNode())
1161 return; 1159 return;
1162 1160
1163 // ### handle exceptions 1161 // ### handle exceptions
1164 TrackExceptionState exceptionState; 1162 TrackExceptionState exceptionState;
1165 ProcessingInstruction* pi = m_currentNode->document().createProcessingInstru ction(target, data, exceptionState); 1163 ProcessingInstruction* pi = m_currentNode->document().createProcessingInstru ction(target, data, exceptionState);
1166 if (exceptionState.hadException()) 1164 if (exceptionState.hadException())
(...skipping 18 matching lines...) Expand all
1185 stopParsing(); 1183 stopParsing();
1186 } 1184 }
1187 } 1185 }
1188 1186
1189 void XMLDocumentParser::cdataBlock(const String& text) 1187 void XMLDocumentParser::cdataBlock(const String& text)
1190 { 1188 {
1191 if (isStopped()) 1189 if (isStopped())
1192 return; 1190 return;
1193 1191
1194 if (m_parserPaused) { 1192 if (m_parserPaused) {
1195 m_pendingCallbacks.append(wrapUnique(new PendingCDATABlockCallback(text) )); 1193 m_pendingCallbacks.append(adoptPtr(new PendingCDATABlockCallback(text))) ;
1196 return; 1194 return;
1197 } 1195 }
1198 1196
1199 if (!updateLeafTextNode()) 1197 if (!updateLeafTextNode())
1200 return; 1198 return;
1201 1199
1202 m_currentNode->parserAppendChild(CDATASection::create(m_currentNode->documen t(), text)); 1200 m_currentNode->parserAppendChild(CDATASection::create(m_currentNode->documen t(), text));
1203 } 1201 }
1204 1202
1205 void XMLDocumentParser::comment(const String& text) 1203 void XMLDocumentParser::comment(const String& text)
1206 { 1204 {
1207 if (isStopped()) 1205 if (isStopped())
1208 return; 1206 return;
1209 1207
1210 if (m_parserPaused) { 1208 if (m_parserPaused) {
1211 m_pendingCallbacks.append(wrapUnique(new PendingCommentCallback(text))); 1209 m_pendingCallbacks.append(adoptPtr(new PendingCommentCallback(text)));
1212 return; 1210 return;
1213 } 1211 }
1214 1212
1215 if (!updateLeafTextNode()) 1213 if (!updateLeafTextNode())
1216 return; 1214 return;
1217 1215
1218 m_currentNode->parserAppendChild(Comment::create(m_currentNode->document(), text)); 1216 m_currentNode->parserAppendChild(Comment::create(m_currentNode->document(), text));
1219 } 1217 }
1220 1218
1221 enum StandaloneInfo { 1219 enum StandaloneInfo {
(...skipping 24 matching lines...) Expand all
1246 { 1244 {
1247 updateLeafTextNode(); 1245 updateLeafTextNode();
1248 } 1246 }
1249 1247
1250 void XMLDocumentParser::internalSubset(const String& name, const String& externa lID, const String& systemID) 1248 void XMLDocumentParser::internalSubset(const String& name, const String& externa lID, const String& systemID)
1251 { 1249 {
1252 if (isStopped()) 1250 if (isStopped())
1253 return; 1251 return;
1254 1252
1255 if (m_parserPaused) { 1253 if (m_parserPaused) {
1256 m_pendingCallbacks.append(wrapUnique(new PendingInternalSubsetCallback(n ame, externalID, systemID))); 1254 m_pendingCallbacks.append(adoptPtr(new PendingInternalSubsetCallback(nam e, externalID, systemID)));
1257 return; 1255 return;
1258 } 1256 }
1259 1257
1260 if (document()) 1258 if (document())
1261 document()->parserAppendChild(DocumentType::create(document(), name, ext ernalID, systemID)); 1259 document()->parserAppendChild(DocumentType::create(document(), name, ext ernalID, systemID));
1262 } 1260 }
1263 1261
1264 static inline XMLDocumentParser* getParser(void* closure) 1262 static inline XMLDocumentParser* getParser(void* closure)
1265 { 1263 {
1266 xmlParserCtxtPtr ctxt = static_cast<xmlParserCtxtPtr>(closure); 1264 xmlParserCtxtPtr ctxt = static_cast<xmlParserCtxtPtr>(closure);
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1484 } 1482 }
1485 } 1483 }
1486 1484
1487 bool xmlViewerMode = !m_sawError && !m_sawCSS && !m_sawXSLTransform && hasNo StyleInformation(document()); 1485 bool xmlViewerMode = !m_sawError && !m_sawCSS && !m_sawXSLTransform && hasNo StyleInformation(document());
1488 if (xmlViewerMode) { 1486 if (xmlViewerMode) {
1489 const char noStyleMessage[] = "This XML file does not appear to have any style information associated with it. The document tree is shown below."; 1487 const char noStyleMessage[] = "This XML file does not appear to have any style information associated with it. The document tree is shown below.";
1490 document()->setIsViewSource(true); 1488 document()->setIsViewSource(true);
1491 V8Document::PrivateScript::transformDocumentToTreeViewMethod(document()- >frame(), document(), noStyleMessage); 1489 V8Document::PrivateScript::transformDocumentToTreeViewMethod(document()- >frame(), document(), noStyleMessage);
1492 } else if (m_sawXSLTransform) { 1490 } else if (m_sawXSLTransform) {
1493 xmlDocPtr doc = xmlDocPtrForString(document(), m_originalSourceForTransf orm.toString(), document()->url().getString()); 1491 xmlDocPtr doc = xmlDocPtrForString(document(), m_originalSourceForTransf orm.toString(), document()->url().getString());
1494 document()->setTransformSource(wrapUnique(new TransformSource(doc))); 1492 document()->setTransformSource(adoptPtr(new TransformSource(doc)));
1495 DocumentParser::stopParsing(); 1493 DocumentParser::stopParsing();
1496 } 1494 }
1497 } 1495 }
1498 1496
1499 xmlDocPtr xmlDocPtrForString(Document* document, const String& source, const Str ing& url) 1497 xmlDocPtr xmlDocPtrForString(Document* document, const String& source, const Str ing& url)
1500 { 1498 {
1501 if (source.isEmpty()) 1499 if (source.isEmpty())
1502 return 0; 1500 return 0;
1503 // Parse in a single chunk into an xmlDocPtr 1501 // Parse in a single chunk into an xmlDocPtr
1504 // FIXME: Hook up error handlers so that a failure to parse the main 1502 // FIXME: Hook up error handlers so that a failure to parse the main
(...skipping 30 matching lines...) Expand all
1535 1533
1536 void XMLDocumentParser::resumeParsing() 1534 void XMLDocumentParser::resumeParsing()
1537 { 1535 {
1538 ASSERT(!isDetached()); 1536 ASSERT(!isDetached());
1539 ASSERT(m_parserPaused); 1537 ASSERT(m_parserPaused);
1540 1538
1541 m_parserPaused = false; 1539 m_parserPaused = false;
1542 1540
1543 // First, execute any pending callbacks 1541 // First, execute any pending callbacks
1544 while (!m_pendingCallbacks.isEmpty()) { 1542 while (!m_pendingCallbacks.isEmpty()) {
1545 std::unique_ptr<PendingCallback> callback = m_pendingCallbacks.takeFirst (); 1543 OwnPtr<PendingCallback> callback = m_pendingCallbacks.takeFirst();
1546 callback->call(this); 1544 callback->call(this);
1547 1545
1548 // A callback paused the parser 1546 // A callback paused the parser
1549 if (m_parserPaused) 1547 if (m_parserPaused)
1550 return; 1548 return;
1551 } 1549 }
1552 1550
1553 // Then, write any pending data 1551 // Then, write any pending data
1554 SegmentedString rest = m_pendingSrc; 1552 SegmentedString rest = m_pendingSrc;
1555 m_pendingSrc.clear(); 1553 m_pendingSrc.clear();
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1641 sax.initialized = XML_SAX2_MAGIC; 1639 sax.initialized = XML_SAX2_MAGIC;
1642 RefPtr<XMLParserContext> parser = XMLParserContext::createStringParser(&sax, &state); 1640 RefPtr<XMLParserContext> parser = XMLParserContext::createStringParser(&sax, &state);
1643 String parseString = "<?xml version=\"1.0\"?><attrs " + string + " />"; 1641 String parseString = "<?xml version=\"1.0\"?><attrs " + string + " />";
1644 parseChunk(parser->context(), parseString); 1642 parseChunk(parser->context(), parseString);
1645 finishParsing(parser->context()); 1643 finishParsing(parser->context());
1646 attrsOK = state.gotAttributes; 1644 attrsOK = state.gotAttributes;
1647 return state.attributes; 1645 return state.attributes;
1648 } 1646 }
1649 1647
1650 } // namespace blink 1648 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698