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

Side by Side Diff: third_party/WebKit/Source/core/html/parser/HTMLParserScriptRunner.cpp

Issue 2694943002: DCHECK: load event is dispatched after executeScript() iff m_isExternalScript
Patch Set: Rebase Created 3 years, 10 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) 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 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
255 getTraceArgsForScriptElement(element, scriptStartPosition)); 255 getTraceArgsForScriptElement(element, scriptStartPosition));
256 scriptLoader->dispatchErrorEvent(); 256 scriptLoader->dispatchErrorEvent();
257 } else { 257 } else {
258 DCHECK(isExecutingScript()); 258 DCHECK(isExecutingScript());
259 if (scriptParserBlockingTime > 0.0) { 259 if (scriptParserBlockingTime > 0.0) {
260 DocumentParserTiming::from(*m_document) 260 DocumentParserTiming::from(*m_document)
261 .recordParserBlockedOnScriptLoadDuration( 261 .recordParserBlockedOnScriptLoadDuration(
262 monotonicallyIncreasingTime() - scriptParserBlockingTime, 262 monotonicallyIncreasingTime() - scriptParserBlockingTime,
263 scriptLoader->wasCreatedDuringDocumentWrite()); 263 scriptLoader->wasCreatedDuringDocumentWrite());
264 } 264 }
265 #if DCHECK_IS_ON()
266 DCHECK(scriptLoader->isExternalScript());
267 #endif
265 if (!doExecuteScript(element, sourceCode, scriptStartPosition)) { 268 if (!doExecuteScript(element, sourceCode, scriptStartPosition)) {
266 scriptLoader->dispatchErrorEvent(); 269 scriptLoader->dispatchErrorEvent();
267 } else { 270 } else {
268 element->dispatchEvent(Event::create(EventTypeNames::load)); 271 element->dispatchEvent(Event::create(EventTypeNames::load));
269 } 272 }
270 } 273 }
271 274
272 // 9. "Decrement the parser's script nesting level by one. 275 // 9. "Decrement the parser's script nesting level by one.
273 // If the parser's script nesting level is zero 276 // If the parser's script nesting level is zero
274 // (which it always should be at this point), 277 // (which it always should be at this point),
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
650 // "Immediately execute the script block, 653 // "Immediately execute the script block,
651 // even if other scripts are already executing." 654 // even if other scripts are already executing."
652 // TODO(hiroshige): Merge the block into ScriptLoader::prepareScript(). 655 // TODO(hiroshige): Merge the block into ScriptLoader::prepareScript().
653 DCHECK_GT(m_reentryPermit->scriptNestingLevel(), 1u); 656 DCHECK_GT(m_reentryPermit->scriptNestingLevel(), 1u);
654 if (m_parserBlockingScript) 657 if (m_parserBlockingScript)
655 m_parserBlockingScript->dispose(); 658 m_parserBlockingScript->dispose();
656 m_parserBlockingScript = nullptr; 659 m_parserBlockingScript = nullptr;
657 ScriptSourceCode sourceCode(script->textContent(), 660 ScriptSourceCode sourceCode(script->textContent(),
658 documentURLForScriptExecution(m_document), 661 documentURLForScriptExecution(m_document),
659 scriptStartPosition); 662 scriptStartPosition);
663 #if DCHECK_IS_ON()
664 DCHECK(!scriptLoader->isExternalScript());
665 #endif
660 doExecuteScript(script, sourceCode, scriptStartPosition); 666 doExecuteScript(script, sourceCode, scriptStartPosition);
661 } 667 }
662 } else { 668 } else {
663 // 2nd Clause of Step 23. 669 // 2nd Clause of Step 23.
664 requestParsingBlockingScript(script); 670 requestParsingBlockingScript(script);
665 } 671 }
666 672
667 // "Decrement the parser's script nesting level by one. 673 // "Decrement the parser's script nesting level by one.
668 // If the parser's script nesting level is zero, then set the parser 674 // If the parser's script nesting level is zero, then set the parser
669 // pause flag to false." 675 // pause flag to false."
670 // Implemented by ~ScriptNestingLevelIncrementer(). 676 // Implemented by ~ScriptNestingLevelIncrementer().
671 677
672 // "Let the insertion point have the value of the old insertion point." 678 // "Let the insertion point have the value of the old insertion point."
673 // Implemented by ~InsertionPointRecord(). 679 // Implemented by ~InsertionPointRecord().
674 } 680 }
675 } 681 }
676 682
677 DEFINE_TRACE(HTMLParserScriptRunner) { 683 DEFINE_TRACE(HTMLParserScriptRunner) {
678 visitor->trace(m_document); 684 visitor->trace(m_document);
679 visitor->trace(m_host); 685 visitor->trace(m_host);
680 visitor->trace(m_parserBlockingScript); 686 visitor->trace(m_parserBlockingScript);
681 visitor->trace(m_scriptsToExecuteAfterParsing); 687 visitor->trace(m_scriptsToExecuteAfterParsing);
682 PendingScriptClient::trace(visitor); 688 PendingScriptClient::trace(visitor);
683 } 689 }
684 690
685 } // namespace blink 691 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/ScriptLoader.cpp ('k') | third_party/WebKit/Source/core/xml/parser/XMLDocumentParser.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698