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

Side by Side Diff: Source/core/html/parser/HTMLDocumentParser.cpp

Issue 798963002: Only populate line number in case parsing synchronously. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years 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 | Annotate | Revision Log
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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 , m_parserScheduler(HTMLParserScheduler::create(this)) 112 , m_parserScheduler(HTMLParserScheduler::create(this))
113 , m_xssAuditorDelegate(&document) 113 , m_xssAuditorDelegate(&document)
114 , m_weakFactory(this) 114 , m_weakFactory(this)
115 , m_preloader(HTMLResourcePreloader::create(document)) 115 , m_preloader(HTMLResourcePreloader::create(document))
116 , m_isPinnedToMainThread(false) 116 , m_isPinnedToMainThread(false)
117 , m_endWasDelayed(false) 117 , m_endWasDelayed(false)
118 , m_haveBackgroundParser(false) 118 , m_haveBackgroundParser(false)
119 , m_tasksWereSuspended(false) 119 , m_tasksWereSuspended(false)
120 , m_pumpSessionNestingLevel(0) 120 , m_pumpSessionNestingLevel(0)
121 , m_pumpSpeculationsSessionNestingLevel(0) 121 , m_pumpSpeculationsSessionNestingLevel(0)
122 , m_hasLineNumber(false)
122 { 123 {
123 ASSERT(shouldUseThreading() || (m_token && m_tokenizer)); 124 ASSERT(shouldUseThreading() || (m_token && m_tokenizer));
124 } 125 }
125 126
126 // FIXME: Member variables should be grouped into self-initializing structs to 127 // FIXME: Member variables should be grouped into self-initializing structs to
127 // minimize code duplication between these constructors. 128 // minimize code duplication between these constructors.
128 HTMLDocumentParser::HTMLDocumentParser(DocumentFragment* fragment, Element* cont extElement, ParserContentPolicy parserContentPolicy) 129 HTMLDocumentParser::HTMLDocumentParser(DocumentFragment* fragment, Element* cont extElement, ParserContentPolicy parserContentPolicy)
129 : ScriptableDocumentParser(fragment->document(), parserContentPolicy) 130 : ScriptableDocumentParser(fragment->document(), parserContentPolicy)
130 , m_options(&fragment->document()) 131 , m_options(&fragment->document())
131 , m_token(adoptPtr(new HTMLToken)) 132 , m_token(adoptPtr(new HTMLToken))
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 checkpoint->unparsedInput = m_input.current().toString().isolatedCopy(); 409 checkpoint->unparsedInput = m_input.current().toString().isolatedCopy();
409 m_input.current().clear(); // FIXME: This should be passed in instead of cle ared. 410 m_input.current().clear(); // FIXME: This should be passed in instead of cle ared.
410 411
411 ASSERT(checkpoint->unparsedInput.isSafeToSendToAnotherThread()); 412 ASSERT(checkpoint->unparsedInput.isSafeToSendToAnotherThread());
412 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::resumeFrom, m_backgroundParser, checkpoint.release())); 413 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::resumeFrom, m_backgroundParser, checkpoint.release()));
413 } 414 }
414 415
415 size_t HTMLDocumentParser::processParsedChunkFromBackgroundParser(PassOwnPtr<Par sedChunk> popChunk) 416 size_t HTMLDocumentParser::processParsedChunkFromBackgroundParser(PassOwnPtr<Par sedChunk> popChunk)
416 { 417 {
417 TRACE_EVENT0("blink", "HTMLDocumentParser::processParsedChunkFromBackgroundP arser"); 418 TRACE_EVENT0("blink", "HTMLDocumentParser::processParsedChunkFromBackgroundP arser");
419 m_hasLineNumber = true;
rmcilroy 2014/12/12 14:18:31 nit - how about using TemporaryChange here?
pfeldman 2014/12/12 17:21:06 Done.
418 420
419 ASSERT_WITH_SECURITY_IMPLICATION(document()->activeParserCount() == 1); 421 ASSERT_WITH_SECURITY_IMPLICATION(document()->activeParserCount() == 1);
420 ASSERT(!isParsingFragment()); 422 ASSERT(!isParsingFragment());
421 ASSERT(!isWaitingForScripts()); 423 ASSERT(!isWaitingForScripts());
422 ASSERT(!isStopped()); 424 ASSERT(!isStopped());
423 #if !ENABLE(OILPAN) 425 #if !ENABLE(OILPAN)
424 // ASSERT that this object is both attached to the Document and protected. 426 // ASSERT that this object is both attached to the Document and protected.
425 ASSERT(refCount() >= 2); 427 ASSERT(refCount() >= 2);
426 #endif 428 #endif
427 ASSERT(shouldUseThreading()); 429 ASSERT(shouldUseThreading());
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 484
483 ASSERT(!m_tokenizer); 485 ASSERT(!m_tokenizer);
484 ASSERT(!m_token); 486 ASSERT(!m_token);
485 } 487 }
486 488
487 // Make sure all required pending text nodes are emitted before returning. 489 // Make sure all required pending text nodes are emitted before returning.
488 // This leaves "script", "style" and "svg" nodes text nodes intact. 490 // This leaves "script", "style" and "svg" nodes text nodes intact.
489 if (!isStopped()) 491 if (!isStopped())
490 m_treeBuilder->flush(FlushIfAtTextLimit); 492 m_treeBuilder->flush(FlushIfAtTextLimit);
491 493
494 m_hasLineNumber = false;
495
492 return elementTokenCount; 496 return elementTokenCount;
493 } 497 }
494 498
495 void HTMLDocumentParser::pumpPendingSpeculations() 499 void HTMLDocumentParser::pumpPendingSpeculations()
496 { 500 {
497 #if !ENABLE(OILPAN) 501 #if !ENABLE(OILPAN)
498 // ASSERT that this object is both attached to the Document and protected. 502 // ASSERT that this object is both attached to the Document and protected.
499 ASSERT(refCount() >= 2); 503 ASSERT(refCount() >= 2);
500 #endif 504 #endif
501 // If this assert fails, you need to call validateSpeculations to make sure 505 // If this assert fails, you need to call validateSpeculations to make sure
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 attemptToEnd(); 904 attemptToEnd();
901 } 905 }
902 906
903 bool HTMLDocumentParser::isExecutingScript() const 907 bool HTMLDocumentParser::isExecutingScript() const
904 { 908 {
905 if (!m_scriptRunner) 909 if (!m_scriptRunner)
906 return false; 910 return false;
907 return m_scriptRunner->isExecutingScript(); 911 return m_scriptRunner->isExecutingScript();
908 } 912 }
909 913
914 bool HTMLDocumentParser::hasLineNumber() const
915 {
916 return m_hasLineNumber;
917 }
918
910 OrdinalNumber HTMLDocumentParser::lineNumber() const 919 OrdinalNumber HTMLDocumentParser::lineNumber() const
911 { 920 {
912 if (m_haveBackgroundParser) 921 if (m_haveBackgroundParser)
913 return m_textPosition.m_line; 922 return m_textPosition.m_line;
914 923
915 return m_input.current().currentLine(); 924 return m_input.current().currentLine();
916 } 925 }
917 926
918 TextPosition HTMLDocumentParser::textPosition() const 927 TextPosition HTMLDocumentParser::textPosition() const
919 { 928 {
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 void HTMLDocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder> decoder) 1081 void HTMLDocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder> decoder)
1073 { 1082 {
1074 ASSERT(decoder); 1083 ASSERT(decoder);
1075 DecodedDataDocumentParser::setDecoder(decoder); 1084 DecodedDataDocumentParser::setDecoder(decoder);
1076 1085
1077 if (m_haveBackgroundParser) 1086 if (m_haveBackgroundParser)
1078 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::setDeco der, m_backgroundParser, takeDecoder())); 1087 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::setDeco der, m_backgroundParser, takeDecoder()));
1079 } 1088 }
1080 1089
1081 } 1090 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698