| 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 277 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 { | 288 { |
| 289 ASSERT(scriptingContentIsAllowed(parserContentPolicy())); | 289 ASSERT(scriptingContentIsAllowed(parserContentPolicy())); |
| 290 | 290 |
| 291 TextPosition scriptStartPosition = TextPosition::belowRangePosition(); | 291 TextPosition scriptStartPosition = TextPosition::belowRangePosition(); |
| 292 RefPtrWillBeRawPtr<Element> scriptElement = m_treeBuilder->takeScriptToProce
ss(scriptStartPosition); | 292 RefPtrWillBeRawPtr<Element> scriptElement = m_treeBuilder->takeScriptToProce
ss(scriptStartPosition); |
| 293 // We will not have a scriptRunner when parsing a DocumentFragment. | 293 // We will not have a scriptRunner when parsing a DocumentFragment. |
| 294 if (m_scriptRunner) | 294 if (m_scriptRunner) |
| 295 m_scriptRunner->execute(scriptElement.release(), scriptStartPosition); | 295 m_scriptRunner->execute(scriptElement.release(), scriptStartPosition); |
| 296 } | 296 } |
| 297 | 297 |
| 298 bool HTMLDocumentParser::canTakeNextToken(PumpSession& session) | 298 bool HTMLDocumentParser::canTakeNextToken() |
| 299 { | 299 { |
| 300 if (isStopped()) | 300 if (isStopped()) |
| 301 return false; | 301 return false; |
| 302 | 302 |
| 303 if (isWaitingForScripts()) { | 303 if (isWaitingForScripts()) { |
| 304 // If we don't run the script, we cannot allow the next token to be take
n. | |
| 305 if (session.needsYield) | |
| 306 return false; | |
| 307 | |
| 308 // If we're paused waiting for a script, we try to execute scripts befor
e continuing. | 304 // If we're paused waiting for a script, we try to execute scripts befor
e continuing. |
| 309 runScriptsForPausedTreeBuilder(); | 305 runScriptsForPausedTreeBuilder(); |
| 310 if (isStopped()) | 306 if (isStopped()) |
| 311 return false; | 307 return false; |
| 312 if (isWaitingForScripts()) | 308 if (isWaitingForScripts()) |
| 313 return false; | 309 return false; |
| 314 } | 310 } |
| 315 | 311 |
| 316 // FIXME: It's wrong for the HTMLDocumentParser to reach back to the | 312 // FIXME: It's wrong for the HTMLDocumentParser to reach back to the |
| 317 // LocalFrame, but this approach is how the old parser handled | 313 // LocalFrame, but this approach is how the old parser handled |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 580 // FIXME: m_input.current().length() is only accurate if we | 576 // FIXME: m_input.current().length() is only accurate if we |
| 581 // end up parsing the whole buffer in this pump. We should pass how | 577 // end up parsing the whole buffer in this pump. We should pass how |
| 582 // much we parsed as part of didWriteHTML instead of willWriteHTML. | 578 // much we parsed as part of didWriteHTML instead of willWriteHTML. |
| 583 TRACE_EVENT_BEGIN1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ParseHTM
L", "beginData", InspectorParseHtmlEvent::beginData(document(), m_input.current(
).currentLine().zeroBasedInt())); | 579 TRACE_EVENT_BEGIN1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ParseHTM
L", "beginData", InspectorParseHtmlEvent::beginData(document(), m_input.current(
).currentLine().zeroBasedInt())); |
| 584 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.stack"), "
CallStack", "stack", InspectorCallStackEvent::currentCallStack()); | 580 TRACE_EVENT_INSTANT1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline.stack"), "
CallStack", "stack", InspectorCallStackEvent::currentCallStack()); |
| 585 // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeli
ne migrates to tracing. | 581 // FIXME(361045): remove InspectorInstrumentation calls once DevTools Timeli
ne migrates to tracing. |
| 586 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willWriteH
TML(document(), m_input.current().currentLine().zeroBasedInt()); | 582 InspectorInstrumentationCookie cookie = InspectorInstrumentation::willWriteH
TML(document(), m_input.current().currentLine().zeroBasedInt()); |
| 587 | 583 |
| 588 m_xssAuditor.init(document(), &m_xssAuditorDelegate); | 584 m_xssAuditor.init(document(), &m_xssAuditorDelegate); |
| 589 | 585 |
| 590 while (canTakeNextToken(session) && !session.needsYield) { | 586 while (canTakeNextToken()) { |
| 591 if (!isParsingFragment()) | 587 if (!isParsingFragment()) |
| 592 m_sourceTracker.start(m_input.current(), m_tokenizer.get(), token())
; | 588 m_sourceTracker.start(m_input.current(), m_tokenizer.get(), token())
; |
| 593 | 589 |
| 594 if (!m_tokenizer->nextToken(m_input.current(), token())) | 590 if (!m_tokenizer->nextToken(m_input.current(), token())) |
| 595 break; | 591 break; |
| 596 | 592 |
| 597 if (!isParsingFragment()) { | 593 if (!isParsingFragment()) { |
| 598 m_sourceTracker.end(m_input.current(), m_tokenizer.get(), token()); | 594 m_sourceTracker.end(m_input.current(), m_tokenizer.get(), token()); |
| 599 | 595 |
| 600 // We do not XSS filter innerHTML, which means we (intentionally) fa
il | 596 // We do not XSS filter innerHTML, which means we (intentionally) fa
il |
| (...skipping 13 matching lines...) Expand all Loading... |
| 614 #endif | 610 #endif |
| 615 | 611 |
| 616 if (isStopped()) | 612 if (isStopped()) |
| 617 return; | 613 return; |
| 618 | 614 |
| 619 // There should only be PendingText left since the tree-builder always flush
es | 615 // There should only be PendingText left since the tree-builder always flush
es |
| 620 // the task queue before returning. In case that ever changes, crash. | 616 // the task queue before returning. In case that ever changes, crash. |
| 621 m_treeBuilder->flush(FlushAlways); | 617 m_treeBuilder->flush(FlushAlways); |
| 622 RELEASE_ASSERT(!isStopped()); | 618 RELEASE_ASSERT(!isStopped()); |
| 623 | 619 |
| 624 if (session.needsYield) | |
| 625 m_parserScheduler->scheduleForResume(); | |
| 626 | |
| 627 if (isWaitingForScripts()) { | 620 if (isWaitingForScripts()) { |
| 628 ASSERT(m_tokenizer->state() == HTMLTokenizer::DataState); | 621 ASSERT(m_tokenizer->state() == HTMLTokenizer::DataState); |
| 629 if (!m_preloadScanner) { | 622 if (!m_preloadScanner) { |
| 630 m_preloadScanner = adoptPtr(new HTMLPreloadScanner(m_options, docume
nt()->url(), createMediaValues(document()))); | 623 m_preloadScanner = adoptPtr(new HTMLPreloadScanner(m_options, docume
nt()->url(), createMediaValues(document()))); |
| 631 m_preloadScanner->appendToEnd(m_input.current()); | 624 m_preloadScanner->appendToEnd(m_input.current()); |
| 632 } | 625 } |
| 633 m_preloadScanner->scan(m_preloader.get(), document()->baseElementURL()); | 626 m_preloadScanner->scan(m_preloader.get(), document()->baseElementURL()); |
| 634 } | 627 } |
| 635 | 628 |
| 636 TRACE_EVENT_END1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ParseHTML"
, "endLine", m_input.current().currentLine().zeroBasedInt()); | 629 TRACE_EVENT_END1(TRACE_DISABLED_BY_DEFAULT("devtools.timeline"), "ParseHTML"
, "endLine", m_input.current().currentLine().zeroBasedInt()); |
| (...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1054 void HTMLDocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder> decoder) | 1047 void HTMLDocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder> decoder) |
| 1055 { | 1048 { |
| 1056 ASSERT(decoder); | 1049 ASSERT(decoder); |
| 1057 DecodedDataDocumentParser::setDecoder(decoder); | 1050 DecodedDataDocumentParser::setDecoder(decoder); |
| 1058 | 1051 |
| 1059 if (m_haveBackgroundParser) | 1052 if (m_haveBackgroundParser) |
| 1060 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::setDeco
der, m_backgroundParser, takeDecoder())); | 1053 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::setDeco
der, m_backgroundParser, takeDecoder())); |
| 1061 } | 1054 } |
| 1062 | 1055 |
| 1063 } | 1056 } |
| OLD | NEW |