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

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

Issue 1322063002: Run HTMLSourceTracker hooks only when XSSAuditor is enabled (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 3 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 | « no previous file | Source/core/html/parser/HTMLDocumentParser.cpp » ('j') | 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) 2013 Google, Inc. All Rights Reserved. 2 * Copyright (C) 2013 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 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 216
217 void BackgroundHTMLParser::pumpTokenizer() 217 void BackgroundHTMLParser::pumpTokenizer()
218 { 218 {
219 HTMLTreeBuilderSimulator::SimulatedToken simulatedToken = HTMLTreeBuilderSim ulator::OtherToken; 219 HTMLTreeBuilderSimulator::SimulatedToken simulatedToken = HTMLTreeBuilderSim ulator::OtherToken;
220 220
221 // No need to start speculating until the main thread has almost caught up. 221 // No need to start speculating until the main thread has almost caught up.
222 if (m_input.totalCheckpointTokenCount() > m_outstandingTokenLimit) 222 if (m_input.totalCheckpointTokenCount() > m_outstandingTokenLimit)
223 return; 223 return;
224 224
225 while (true) { 225 while (true) {
226 m_sourceTracker.start(m_input.current(), m_tokenizer.get(), *m_token); 226 if (m_xssAuditor->isEnabled())
227 m_sourceTracker.start(m_input.current(), m_tokenizer.get(), *m_token );
228
227 if (!m_tokenizer->nextToken(m_input.current(), *m_token)) { 229 if (!m_tokenizer->nextToken(m_input.current(), *m_token)) {
228 // We've reached the end of our current input. 230 // We've reached the end of our current input.
229 sendTokensToMainThread(); 231 sendTokensToMainThread();
230 break; 232 break;
231 } 233 }
232 m_sourceTracker.end(m_input.current(), m_tokenizer.get(), *m_token); 234
235 if (m_xssAuditor->isEnabled())
236 m_sourceTracker.end(m_input.current(), m_tokenizer.get(), *m_token);
233 237
234 { 238 {
235 TextPosition position = TextPosition(m_input.current().currentLine() , m_input.current().currentColumn()); 239 TextPosition position = TextPosition(m_input.current().currentLine() , m_input.current().currentColumn());
236 240
237 if (OwnPtr<XSSInfo> xssInfo = m_xssAuditor->filterToken(FilterTokenR equest(*m_token, m_sourceTracker, m_tokenizer->shouldAllowCDATA()))) { 241 if (OwnPtr<XSSInfo> xssInfo = m_xssAuditor->filterToken(FilterTokenR equest(*m_token, m_sourceTracker, m_tokenizer->shouldAllowCDATA()))) {
238 xssInfo->m_textPosition = position; 242 xssInfo->m_textPosition = position;
239 m_pendingXSSInfos.append(xssInfo.release()); 243 m_pendingXSSInfos.append(xssInfo.release());
240 } 244 }
241 245
242 CompactHTMLToken token(m_token.get(), TextPosition(m_input.current() .currentLine(), m_input.current().currentColumn())); 246 CompactHTMLToken token(m_token.get(), position);
243 247
244 m_preloadScanner->scan(token, m_input.current(), m_pendingPreloads); 248 m_preloadScanner->scan(token, m_input.current(), m_pendingPreloads);
245 simulatedToken = m_treeBuilderSimulator.simulate(token, m_tokenizer. get()); 249 simulatedToken = m_treeBuilderSimulator.simulate(token, m_tokenizer. get());
246 250
247 // Break chunks before a script tag is inserted and flag the chunk a s starting a script 251 // Break chunks before a script tag is inserted and flag the chunk a s starting a script
248 // so the main parser can decide if it should yield before processin g the chunk. 252 // so the main parser can decide if it should yield before processin g the chunk.
249 if (simulatedToken == HTMLTreeBuilderSimulator::ScriptStart) { 253 if (simulatedToken == HTMLTreeBuilderSimulator::ScriptStart) {
250 sendTokensToMainThread(); 254 sendTokensToMainThread();
251 m_startingScript = true; 255 m_startingScript = true;
252 } 256 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 m_startingScript = false; 292 m_startingScript = false;
289 293
290 m_scheduler->postLoadingTask( 294 m_scheduler->postLoadingTask(
291 FROM_HERE, 295 FROM_HERE,
292 new Task(threadSafeBind(&HTMLDocumentParser::didReceiveParsedChunkFromBa ckgroundParser, AllowCrossThreadAccess(m_parser), chunk.release()))); 296 new Task(threadSafeBind(&HTMLDocumentParser::didReceiveParsedChunkFromBa ckgroundParser, AllowCrossThreadAccess(m_parser), chunk.release())));
293 297
294 m_pendingTokens = adoptPtr(new CompactHTMLTokenStream); 298 m_pendingTokens = adoptPtr(new CompactHTMLTokenStream);
295 } 299 }
296 300
297 } 301 }
OLDNEW
« no previous file with comments | « no previous file | Source/core/html/parser/HTMLDocumentParser.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698