| 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 ASSERT(backgroundThread() && backgroundThread()->isCurrentThread()); | 88 ASSERT(backgroundThread() && backgroundThread()->isCurrentThread()); |
| 89 if (m_backgroundParser.get()) | 89 if (m_backgroundParser.get()) |
| 90 m_backgroundParser.get()->appendRawBytesFromParserThread(data, dataL
ength); | 90 m_backgroundParser.get()->appendRawBytesFromParserThread(data, dataL
ength); |
| 91 } | 91 } |
| 92 | 92 |
| 93 virtual blink::WebThread* backgroundThread() override final | 93 virtual blink::WebThread* backgroundThread() override final |
| 94 { | 94 { |
| 95 if (HTMLParserThread::shared()) | 95 if (HTMLParserThread::shared()) |
| 96 return &HTMLParserThread::shared()->platformThread(); | 96 return &HTMLParserThread::shared()->platformThread(); |
| 97 | 97 |
| 98 return 0; | 98 return nullptr; |
| 99 } | 99 } |
| 100 | 100 |
| 101 private: | 101 private: |
| 102 WeakPtr<BackgroundHTMLParser> m_backgroundParser; | 102 WeakPtr<BackgroundHTMLParser> m_backgroundParser; |
| 103 }; | 103 }; |
| 104 | 104 |
| 105 HTMLDocumentParser::HTMLDocumentParser(HTMLDocument& document, bool reportErrors
) | 105 HTMLDocumentParser::HTMLDocumentParser(HTMLDocument& document, bool reportErrors
) |
| 106 : ScriptableDocumentParser(document) | 106 : ScriptableDocumentParser(document) |
| 107 , m_options(&document) | 107 , m_options(&document) |
| 108 , m_token(nullptr) | 108 , m_token(nullptr) |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 ASSERT(shouldUseThreading()); | 428 ASSERT(shouldUseThreading()); |
| 429 ASSERT(!m_tokenizer); | 429 ASSERT(!m_tokenizer); |
| 430 ASSERT(!m_token); | 430 ASSERT(!m_token); |
| 431 ASSERT(!m_lastChunkBeforeScript); | 431 ASSERT(!m_lastChunkBeforeScript); |
| 432 | 432 |
| 433 OwnPtr<ParsedChunk> chunk(popChunk); | 433 OwnPtr<ParsedChunk> chunk(popChunk); |
| 434 OwnPtr<CompactHTMLTokenStream> tokens = chunk->tokens.release(); | 434 OwnPtr<CompactHTMLTokenStream> tokens = chunk->tokens.release(); |
| 435 | 435 |
| 436 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::startedChun
kWithCheckpoint, m_backgroundParser, chunk->inputCheckpoint)); | 436 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::startedChun
kWithCheckpoint, m_backgroundParser, chunk->inputCheckpoint)); |
| 437 | 437 |
| 438 for (XSSInfoStream::const_iterator it = chunk->xssInfos.begin(); it != chunk
->xssInfos.end(); ++it) { | 438 for (const auto& xssInfo : chunk->xssInfos) { |
| 439 m_textPosition = (*it)->m_textPosition; | 439 m_textPosition = xssInfo->m_textPosition; |
| 440 m_xssAuditorDelegate.didBlockScript(**it); | 440 m_xssAuditorDelegate.didBlockScript(*xssInfo); |
| 441 if (isStopped()) | 441 if (isStopped()) |
| 442 break; | 442 break; |
| 443 } | 443 } |
| 444 | 444 |
| 445 for (Vector<CompactHTMLToken>::const_iterator it = tokens->begin(); it != to
kens->end(); ++it) { | 445 for (Vector<CompactHTMLToken>::const_iterator it = tokens->begin(); it != to
kens->end(); ++it) { |
| 446 ASSERT(!isWaitingForScripts()); | 446 ASSERT(!isWaitingForScripts()); |
| 447 | 447 |
| 448 if (document()->frame() && document()->frame()->navigationScheduler().lo
cationChangePending()) { | 448 if (document()->frame() && document()->frame()->navigationScheduler().lo
cationChangePending()) { |
| 449 | 449 |
| 450 // To match main-thread parser behavior (which never checks location
ChangePending on the EOF path) | 450 // To match main-thread parser behavior (which never checks location
ChangePending on the EOF path) |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 536 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::forcePl
aintextForTextDocument, m_backgroundParser)); | 536 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::forcePl
aintextForTextDocument, m_backgroundParser)); |
| 537 } else | 537 } else |
| 538 m_tokenizer->setState(HTMLTokenizer::PLAINTEXTState); | 538 m_tokenizer->setState(HTMLTokenizer::PLAINTEXTState); |
| 539 } | 539 } |
| 540 | 540 |
| 541 Document* HTMLDocumentParser::contextForParsingSession() | 541 Document* HTMLDocumentParser::contextForParsingSession() |
| 542 { | 542 { |
| 543 // The parsing session should interact with the document only when parsing | 543 // The parsing session should interact with the document only when parsing |
| 544 // non-fragments. Otherwise, we might delay the load event mistakenly. | 544 // non-fragments. Otherwise, we might delay the load event mistakenly. |
| 545 if (isParsingFragment()) | 545 if (isParsingFragment()) |
| 546 return 0; | 546 return nullptr; |
| 547 return document(); | 547 return document(); |
| 548 } | 548 } |
| 549 | 549 |
| 550 static PassRefPtr<MediaValues> createMediaValues(Document* document) | 550 static PassRefPtr<MediaValues> createMediaValues(Document* document) |
| 551 { | 551 { |
| 552 ASSERT(document); | 552 ASSERT(document); |
| 553 RefPtr<MediaValues> mediaValues = MediaValuesCached::create(*document); | 553 RefPtr<MediaValues> mediaValues = MediaValuesCached::create(*document); |
| 554 ASSERT(mediaValues->isSafeToSendToAnotherThread()); | 554 ASSERT(mediaValues->isSafeToSendToAnotherThread()); |
| 555 return mediaValues; | 555 return mediaValues; |
| 556 } | 556 } |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 endIfDelayed(); | 709 endIfDelayed(); |
| 710 } | 710 } |
| 711 | 711 |
| 712 void HTMLDocumentParser::startBackgroundParser() | 712 void HTMLDocumentParser::startBackgroundParser() |
| 713 { | 713 { |
| 714 ASSERT(!isStopped()); | 714 ASSERT(!isStopped()); |
| 715 ASSERT(shouldUseThreading()); | 715 ASSERT(shouldUseThreading()); |
| 716 ASSERT(!m_haveBackgroundParser); | 716 ASSERT(!m_haveBackgroundParser); |
| 717 m_haveBackgroundParser = true; | 717 m_haveBackgroundParser = true; |
| 718 | 718 |
| 719 RefPtr<WeakReference<BackgroundHTMLParser> > reference = WeakReference<Backg
roundHTMLParser>::createUnbound(); | 719 RefPtr<WeakReference<BackgroundHTMLParser>> reference = WeakReference<Backgr
oundHTMLParser>::createUnbound(); |
| 720 m_backgroundParser = WeakPtr<BackgroundHTMLParser>(reference); | 720 m_backgroundParser = WeakPtr<BackgroundHTMLParser>(reference); |
| 721 | 721 |
| 722 // TODO(oysteine): Disabled due to crbug.com/398076 until a full fix can be
implemented. | 722 // TODO(oysteine): Disabled due to crbug.com/398076 until a full fix can be
implemented. |
| 723 if (RuntimeEnabledFeatures::threadedParserDataReceiverEnabled()) { | 723 if (RuntimeEnabledFeatures::threadedParserDataReceiverEnabled()) { |
| 724 if (DocumentLoader* loader = document()->loader()) | 724 if (DocumentLoader* loader = document()->loader()) |
| 725 loader->attachThreadedDataReceiver(adoptPtr(new ParserDataReceiver(m
_backgroundParser))); | 725 loader->attachThreadedDataReceiver(adoptPtr(new ParserDataReceiver(m
_backgroundParser))); |
| 726 } | 726 } |
| 727 | 727 |
| 728 OwnPtr<BackgroundHTMLParser::Configuration> config = adoptPtr(new Background
HTMLParser::Configuration); | 728 OwnPtr<BackgroundHTMLParser::Configuration> config = adoptPtr(new Background
HTMLParser::Configuration); |
| 729 config->options = m_options; | 729 config->options = m_options; |
| (...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1015 | 1015 |
| 1016 void HTMLDocumentParser::appendBytes(const char* data, size_t length) | 1016 void HTMLDocumentParser::appendBytes(const char* data, size_t length) |
| 1017 { | 1017 { |
| 1018 if (!length || isStopped()) | 1018 if (!length || isStopped()) |
| 1019 return; | 1019 return; |
| 1020 | 1020 |
| 1021 if (shouldUseThreading()) { | 1021 if (shouldUseThreading()) { |
| 1022 if (!m_haveBackgroundParser) | 1022 if (!m_haveBackgroundParser) |
| 1023 startBackgroundParser(); | 1023 startBackgroundParser(); |
| 1024 | 1024 |
| 1025 OwnPtr<Vector<char> > buffer = adoptPtr(new Vector<char>(length)); | 1025 OwnPtr<Vector<char>> buffer = adoptPtr(new Vector<char>(length)); |
| 1026 memcpy(buffer->data(), data, length); | 1026 memcpy(buffer->data(), data, length); |
| 1027 TRACE_EVENT1("net", "HTMLDocumentParser::appendBytes", "size", (unsigned
)length); | 1027 TRACE_EVENT1("net", "HTMLDocumentParser::appendBytes", "size", (unsigned
)length); |
| 1028 | 1028 |
| 1029 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::appendR
awBytesFromMainThread, m_backgroundParser, buffer.release())); | 1029 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::appendR
awBytesFromMainThread, m_backgroundParser, buffer.release())); |
| 1030 return; | 1030 return; |
| 1031 } | 1031 } |
| 1032 | 1032 |
| 1033 DecodedDataDocumentParser::appendBytes(data, length); | 1033 DecodedDataDocumentParser::appendBytes(data, length); |
| 1034 } | 1034 } |
| 1035 | 1035 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1048 void HTMLDocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder> decoder) | 1048 void HTMLDocumentParser::setDecoder(PassOwnPtr<TextResourceDecoder> decoder) |
| 1049 { | 1049 { |
| 1050 ASSERT(decoder); | 1050 ASSERT(decoder); |
| 1051 DecodedDataDocumentParser::setDecoder(decoder); | 1051 DecodedDataDocumentParser::setDecoder(decoder); |
| 1052 | 1052 |
| 1053 if (m_haveBackgroundParser) | 1053 if (m_haveBackgroundParser) |
| 1054 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::setDeco
der, m_backgroundParser, takeDecoder())); | 1054 HTMLParserThread::shared()->postTask(bind(&BackgroundHTMLParser::setDeco
der, m_backgroundParser, takeDecoder())); |
| 1055 } | 1055 } |
| 1056 | 1056 |
| 1057 } | 1057 } |
| OLD | NEW |