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

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

Issue 2723793002: De-Element ScriptLoader (Closed)
Patch Set: ScriptLoaderClient->ScriptElementBase, pure virtual interface, add fixme Created 3 years, 9 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
« no previous file with comments | « third_party/WebKit/Source/core/svg/SVGScriptElement.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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. 8 * Copyright (C) 2008 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * 10 *
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after
441 bool wasCanceled = m_pendingScript->wasCanceled(); 441 bool wasCanceled = m_pendingScript->wasCanceled();
442 double scriptParserBlockingTime = m_parserBlockingPendingScriptLoadStartTime; 442 double scriptParserBlockingTime = m_parserBlockingPendingScriptLoadStartTime;
443 m_parserBlockingPendingScriptLoadStartTime = 0.0; 443 m_parserBlockingPendingScriptLoadStartTime = 0.0;
444 444
445 m_pendingScript->removeClient(this); 445 m_pendingScript->removeClient(this);
446 m_pendingScript = nullptr; 446 m_pendingScript = nullptr;
447 447
448 Element* e = m_scriptElement; 448 Element* e = m_scriptElement;
449 m_scriptElement = nullptr; 449 m_scriptElement = nullptr;
450 450
451 ScriptLoader* scriptLoader = toScriptLoaderIfPossible(e); 451 ScriptLoader* scriptLoader =
452 ScriptElementBase::fromElementIfPossible(e)->loader();
452 DCHECK(scriptLoader); 453 DCHECK(scriptLoader);
453 454
454 if (errorOccurred) { 455 if (errorOccurred) {
455 scriptLoader->dispatchErrorEvent(); 456 scriptLoader->dispatchErrorEvent();
456 } else if (!wasCanceled) { 457 } else if (!wasCanceled) {
457 if (scriptParserBlockingTime > 0.0) { 458 if (scriptParserBlockingTime > 0.0) {
458 DocumentParserTiming::from(*document()) 459 DocumentParserTiming::from(*document())
459 .recordParserBlockedOnScriptLoadDuration( 460 .recordParserBlockedOnScriptLoadDuration(
460 monotonicallyIncreasingTime() - scriptParserBlockingTime, 461 monotonicallyIncreasingTime() - scriptParserBlockingTime,
461 scriptLoader->wasCreatedDuringDocumentWrite()); 462 scriptLoader->wasCreatedDuringDocumentWrite());
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after
1023 handleElementAttributes(prefixedAttributes, libxmlAttributes, nbAttributes, 1024 handleElementAttributes(prefixedAttributes, libxmlAttributes, nbAttributes,
1024 m_prefixToNamespaceMap, exceptionState); 1025 m_prefixToNamespaceMap, exceptionState);
1025 setAttributes(newElement, prefixedAttributes, getParserContentPolicy()); 1026 setAttributes(newElement, prefixedAttributes, getParserContentPolicy());
1026 if (exceptionState.hadException()) { 1027 if (exceptionState.hadException()) {
1027 stopParsing(); 1028 stopParsing();
1028 return; 1029 return;
1029 } 1030 }
1030 1031
1031 newElement->beginParsingChildren(); 1032 newElement->beginParsingChildren();
1032 1033
1033 ScriptLoader* scriptLoader = toScriptLoaderIfPossible(newElement); 1034 if (newElement->isScriptElement())
1034 if (scriptLoader)
1035 m_scriptStartPosition = textPosition(); 1035 m_scriptStartPosition = textPosition();
1036 1036
1037 m_currentNode->parserAppendChild(newElement); 1037 m_currentNode->parserAppendChild(newElement);
1038 1038
1039 // Event handlers may synchronously trigger removal of the 1039 // Event handlers may synchronously trigger removal of the
1040 // document and cancellation of this parser. 1040 // document and cancellation of this parser.
1041 if (isStopped()) { 1041 if (isStopped()) {
1042 stopParsing(); 1042 stopParsing();
1043 return; 1043 return;
1044 } 1044 }
(...skipping 24 matching lines...) Expand all
1069 return; 1069 return;
1070 } 1070 }
1071 1071
1072 if (!updateLeafTextNode()) 1072 if (!updateLeafTextNode())
1073 return; 1073 return;
1074 1074
1075 ContainerNode* n = m_currentNode; 1075 ContainerNode* n = m_currentNode;
1076 if (m_currentNode->isElementNode()) 1076 if (m_currentNode->isElementNode())
1077 toElement(n)->finishParsingChildren(); 1077 toElement(n)->finishParsingChildren();
1078 1078
1079 ScriptElementBase* scriptElementBase =
1080 n->isElementNode()
1081 ? ScriptElementBase::fromElementIfPossible(toElement(n))
1082 : nullptr;
1079 if (!scriptingContentIsAllowed(getParserContentPolicy()) && 1083 if (!scriptingContentIsAllowed(getParserContentPolicy()) &&
1080 n->isElementNode() && toScriptLoaderIfPossible(toElement(n))) { 1084 scriptElementBase) {
1081 popCurrentNode(); 1085 popCurrentNode();
1082 n->remove(IGNORE_EXCEPTION_FOR_TESTING); 1086 n->remove(IGNORE_EXCEPTION_FOR_TESTING);
1083 return; 1087 return;
1084 } 1088 }
1085 1089
1086 if (!n->isElementNode() || !m_hasView) { 1090 if (!n->isElementNode() || !m_hasView) {
1087 popCurrentNode(); 1091 popCurrentNode();
1088 return; 1092 return;
1089 } 1093 }
1090 1094
1091 Element* element = toElement(n); 1095 Element* element = toElement(n);
1092 1096
1093 // The element's parent may have already been removed from document. 1097 // The element's parent may have already been removed from document.
1094 // Parsing continues in this case, but scripts aren't executed. 1098 // Parsing continues in this case, but scripts aren't executed.
1095 if (!element->isConnected()) { 1099 if (!element->isConnected()) {
1096 popCurrentNode(); 1100 popCurrentNode();
1097 return; 1101 return;
1098 } 1102 }
1099 1103
1100 ScriptLoader* scriptLoader = toScriptLoaderIfPossible(element); 1104 ScriptLoader* scriptLoader =
1105 scriptElementBase ? scriptElementBase->loader() : nullptr;
1101 if (!scriptLoader) { 1106 if (!scriptLoader) {
1102 popCurrentNode(); 1107 popCurrentNode();
1103 return; 1108 return;
1104 } 1109 }
1105 1110
1106 // Don't load external scripts for standalone documents (for now). 1111 // Don't load external scripts for standalone documents (for now).
1107 DCHECK(!m_pendingScript); 1112 DCHECK(!m_pendingScript);
1108 m_requestingScript = true; 1113 m_requestingScript = true;
1109 1114
1110 if (scriptLoader->prepareScript( 1115 if (scriptLoader->prepareScript(
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
1711 RefPtr<XMLParserContext> parser = 1716 RefPtr<XMLParserContext> parser =
1712 XMLParserContext::createStringParser(&sax, &state); 1717 XMLParserContext::createStringParser(&sax, &state);
1713 String parseString = "<?xml version=\"1.0\"?><attrs " + string + " />"; 1718 String parseString = "<?xml version=\"1.0\"?><attrs " + string + " />";
1714 parseChunk(parser->context(), parseString); 1719 parseChunk(parser->context(), parseString);
1715 finishParsing(parser->context()); 1720 finishParsing(parser->context());
1716 attrsOK = state.gotAttributes; 1721 attrsOK = state.gotAttributes;
1717 return state.attributes; 1722 return state.attributes;
1718 } 1723 }
1719 1724
1720 } // namespace blink 1725 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/svg/SVGScriptElement.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698