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

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

Issue 14876022: Threaded HTML parser ASSERTs on Android (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « LayoutTests/http/tests/resources/slow-notify-done.php ('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) 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 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 for (XSSInfoStream::const_iterator it = chunk->xssInfos.begin(); it != chunk ->xssInfos.end(); ++it) { 397 for (XSSInfoStream::const_iterator it = chunk->xssInfos.begin(); it != chunk ->xssInfos.end(); ++it) {
398 m_textPosition = (*it)->m_textPosition; 398 m_textPosition = (*it)->m_textPosition;
399 m_xssAuditorDelegate.didBlockScript(**it); 399 m_xssAuditorDelegate.didBlockScript(**it);
400 if (isStopped()) 400 if (isStopped())
401 break; 401 break;
402 } 402 }
403 403
404 for (Vector<CompactHTMLToken>::const_iterator it = tokens->begin(); it != to kens->end(); ++it) { 404 for (Vector<CompactHTMLToken>::const_iterator it = tokens->begin(); it != to kens->end(); ++it) {
405 ASSERT(!isWaitingForScripts()); 405 ASSERT(!isWaitingForScripts());
406 406
407 m_textPosition = it->textPosition();
408
409 constructTreeFromCompactHTMLToken(*it);
410
411 if (isStopped())
412 break;
413
414 if (!isParsingFragment() 407 if (!isParsingFragment()
415 && document()->frame() && document()->frame()->navigationScheduler() ->locationChangePending()) { 408 && document()->frame() && document()->frame()->navigationScheduler() ->locationChangePending()) {
416 409
417 // To match main-thread parser behavior (which never checks location ChangePending on the EOF path) 410 // To match main-thread parser behavior (which never checks location ChangePending on the EOF path)
418 // we peek to see if this chunk has an EOF and process it anyway. 411 // we peek to see if this chunk has an EOF and process it anyway.
419 if (tokens->last().type() == HTMLToken::EndOfFile) { 412 if (tokens->last().type() == HTMLToken::EndOfFile) {
420 ASSERT(m_speculations.isEmpty()); // There should never be any c hunks after the EOF. 413 ASSERT(m_speculations.isEmpty()); // There should never be any c hunks after the EOF.
421 prepareToStopParsing(); 414 prepareToStopParsing();
422 } 415 }
423 break; 416 break;
424 } 417 }
425 418
419 m_textPosition = it->textPosition();
420
421 constructTreeFromCompactHTMLToken(*it);
422
423 if (isStopped())
424 break;
425
426 if (isWaitingForScripts()) { 426 if (isWaitingForScripts()) {
427 ASSERT(it + 1 == tokens->end()); // The </script> is assumed to be t he last token of this bunch. 427 ASSERT(it + 1 == tokens->end()); // The </script> is assumed to be t he last token of this bunch.
428 runScriptsForPausedTreeBuilder(); 428 runScriptsForPausedTreeBuilder();
429 validateSpeculations(chunk.release()); 429 validateSpeculations(chunk.release());
430 break; 430 break;
431 } 431 }
432 432
433 if (it->type() == HTMLToken::EndOfFile) { 433 if (it->type() == HTMLToken::EndOfFile) {
434 ASSERT(it + 1 == tokens->end()); // The EOF is assumed to be the las t token of this bunch. 434 ASSERT(it + 1 == tokens->end()); // The EOF is assumed to be the las t token of this bunch.
435 ASSERT(m_speculations.isEmpty()); // There should never be any chunk s after the EOF. 435 ASSERT(m_speculations.isEmpty()); // There should never be any chunk s after the EOF.
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 m_parserScheduler->suspend(); 936 m_parserScheduler->suspend();
937 } 937 }
938 938
939 void HTMLDocumentParser::resumeScheduledTasks() 939 void HTMLDocumentParser::resumeScheduledTasks()
940 { 940 {
941 if (m_parserScheduler) 941 if (m_parserScheduler)
942 m_parserScheduler->resume(); 942 m_parserScheduler->resume();
943 } 943 }
944 944
945 } 945 }
OLDNEW
« no previous file with comments | « LayoutTests/http/tests/resources/slow-notify-done.php ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698