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

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

Issue 1235563004: Apply meta tag referrer policy for preloaded requests (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: fix conflicting policies test Created 5 years, 5 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
3 * Copyright (C) 2009 Torch Mobile, Inc. http://www.torchmobile.com/ 3 * Copyright (C) 2009 Torch Mobile, Inc. http://www.torchmobile.com/
4 * Copyright (C) 2010 Google Inc. All Rights Reserved. 4 * Copyright (C) 2010 Google Inc. All Rights Reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
8 * are met: 8 * are met:
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 const Checkpoint& checkpoint = m_checkpoints[checkpointIndex]; 443 const Checkpoint& checkpoint = m_checkpoints[checkpointIndex];
444 m_predictedBaseElementURL = checkpoint.predictedBaseElementURL; 444 m_predictedBaseElementURL = checkpoint.predictedBaseElementURL;
445 m_inStyle = checkpoint.inStyle; 445 m_inStyle = checkpoint.inStyle;
446 m_isAppCacheEnabled = checkpoint.isAppCacheEnabled; 446 m_isAppCacheEnabled = checkpoint.isAppCacheEnabled;
447 m_isCSPEnabled = checkpoint.isCSPEnabled; 447 m_isCSPEnabled = checkpoint.isCSPEnabled;
448 m_templateCount = checkpoint.templateCount; 448 m_templateCount = checkpoint.templateCount;
449 m_cssScanner.reset(); 449 m_cssScanner.reset();
450 m_checkpoints.clear(); 450 m_checkpoints.clear();
451 } 451 }
452 452
453 void TokenPreloadScanner::scan(const HTMLToken& token, const SegmentedString& so urce, PreloadRequestStream& requests) 453 void TokenPreloadScanner::scan(const HTMLToken& token, const SegmentedString& so urce, PreloadRequestStream& requests, String* preloadedReferrerPolicy)
454 { 454 {
455 scanCommon(token, source, requests); 455 scanCommon(token, source, requests, preloadedReferrerPolicy);
456 } 456 }
457 457
458 void TokenPreloadScanner::scan(const CompactHTMLToken& token, const SegmentedStr ing& source, PreloadRequestStream& requests) 458 void TokenPreloadScanner::scan(const CompactHTMLToken& token, const SegmentedStr ing& source, PreloadRequestStream& requests, String* preloadedReferrerPolicy)
459 { 459 {
460 scanCommon(token, source, requests); 460 scanCommon(token, source, requests, preloadedReferrerPolicy);
461 } 461 }
462 462
463 static void handleMetaViewport(const String& attributeValue, CachedDocumentParam eters* documentParameters) 463 static void handleMetaViewport(const String& attributeValue, CachedDocumentParam eters* documentParameters)
464 { 464 {
465 if (!documentParameters->viewportMetaEnabled) 465 if (!documentParameters->viewportMetaEnabled)
466 return; 466 return;
467 ViewportDescription description(ViewportDescription::ViewportMeta); 467 ViewportDescription description(ViewportDescription::ViewportMeta);
468 HTMLMetaElement::getViewportDescriptionFromContentAttribute(attributeValue, description, nullptr, documentParameters->viewportMetaZeroValuesQuirk); 468 HTMLMetaElement::getViewportDescriptionFromContentAttribute(attributeValue, description, nullptr, documentParameters->viewportMetaZeroValuesQuirk);
469 FloatSize initialViewport(documentParameters->mediaValues->viewportHeight(), documentParameters->mediaValues->viewportWidth()); 469 FloatSize initialViewport(documentParameters->mediaValues->viewportHeight(), documentParameters->mediaValues->viewportWidth());
470 PageScaleConstraints constraints = description.resolve(initialViewport, docu mentParameters->defaultViewportMinWidth); 470 PageScaleConstraints constraints = description.resolve(initialViewport, docu mentParameters->defaultViewportMinWidth);
471 MediaValuesCached* cachedMediaValues = static_cast<MediaValuesCached*>(docum entParameters->mediaValues.get()); 471 MediaValuesCached* cachedMediaValues = static_cast<MediaValuesCached*>(docum entParameters->mediaValues.get());
472 cachedMediaValues->setViewportHeight(constraints.layoutSize.height()); 472 cachedMediaValues->setViewportHeight(constraints.layoutSize.height());
473 cachedMediaValues->setViewportWidth(constraints.layoutSize.width()); 473 cachedMediaValues->setViewportWidth(constraints.layoutSize.width());
474 } 474 }
475 475
476 template<typename Token> 476 template <typename Token>
477 void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& source, PreloadRequestStream& requests) 477 void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& source, PreloadRequestStream& requests, String* preloadedReferrerPolicy)
478 { 478 {
479 if (!m_documentParameters->doHtmlPreloadScanning) 479 if (!m_documentParameters->doHtmlPreloadScanning)
480 return; 480 return;
481 481
482 // Disable preload for documents with AppCache. 482 // Disable preload for documents with AppCache.
483 if (m_isAppCacheEnabled) 483 if (m_isAppCacheEnabled)
484 return; 484 return;
485 485
486 // http://crbug.com/434230 Disable preload for documents with CSP <meta> tag s 486 // http://crbug.com/434230 Disable preload for documents with CSP <meta> tag s
487 if (m_isCSPEnabled) 487 if (m_isCSPEnabled)
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 } 547 }
548 return; 548 return;
549 } 549 }
550 const typename Token::Attribute* nameAttribute = token.getAttributeI tem(nameAttr); 550 const typename Token::Attribute* nameAttribute = token.getAttributeI tem(nameAttr);
551 if (nameAttribute && equalIgnoringCase(String(nameAttribute->value), "viewport")) { 551 if (nameAttribute && equalIgnoringCase(String(nameAttribute->value), "viewport")) {
552 const typename Token::Attribute* contentAttribute = token.getAtt ributeItem(contentAttr); 552 const typename Token::Attribute* contentAttribute = token.getAtt ributeItem(contentAttr);
553 if (contentAttribute) 553 if (contentAttribute)
554 handleMetaViewport(String(contentAttribute->value), m_docume ntParameters.get()); 554 handleMetaViewport(String(contentAttribute->value), m_docume ntParameters.get());
555 return; 555 return;
556 } 556 }
557 if (nameAttribute && equalIgnoringCase(String(nameAttribute->value), "referrer")) {
558 const typename Token::Attribute* contentAttribute = token.getAtt ributeItem(contentAttr);
559 if (contentAttribute)
560 *preloadedReferrerPolicy = String(contentAttribute->value).i solatedCopy();
561 }
557 } 562 }
558 563
559 if (match(tagImpl, pictureTag)) { 564 if (match(tagImpl, pictureTag)) {
560 m_inPicture = true; 565 m_inPicture = true;
561 m_pictureData = PictureData(); 566 m_pictureData = PictureData();
562 return; 567 return;
563 } 568 }
564 569
565 StartTagScanner scanner(tagImpl, m_documentParameters->mediaValues); 570 StartTagScanner scanner(tagImpl, m_documentParameters->mediaValues);
566 scanner.processAttributes(token.attributes()); 571 scanner.processAttributes(token.attributes());
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 { 611 {
607 ASSERT(isMainThread()); // HTMLTokenizer::updateStateFor only works on the m ain thread. 612 ASSERT(isMainThread()); // HTMLTokenizer::updateStateFor only works on the m ain thread.
608 613
609 TRACE_EVENT1("blink", "HTMLPreloadScanner::scan", "source_length", m_source. length()); 614 TRACE_EVENT1("blink", "HTMLPreloadScanner::scan", "source_length", m_source. length());
610 615
611 // When we start scanning, our best prediction of the baseElementURL is the real one! 616 // When we start scanning, our best prediction of the baseElementURL is the real one!
612 if (!startingBaseElementURL.isEmpty()) 617 if (!startingBaseElementURL.isEmpty())
613 m_scanner.setPredictedBaseElementURL(startingBaseElementURL); 618 m_scanner.setPredictedBaseElementURL(startingBaseElementURL);
614 619
615 PreloadRequestStream requests; 620 PreloadRequestStream requests;
621 String preloadedReferrerPolicy;
616 622
617 while (m_tokenizer->nextToken(m_source, m_token)) { 623 while (m_tokenizer->nextToken(m_source, m_token)) {
618 if (m_token.type() == HTMLToken::StartTag) 624 if (m_token.type() == HTMLToken::StartTag)
619 m_tokenizer->updateStateFor(attemptStaticStringCreation(m_token.name (), Likely8Bit)); 625 m_tokenizer->updateStateFor(attemptStaticStringCreation(m_token.name (), Likely8Bit));
620 m_scanner.scan(m_token, m_source, requests); 626 m_scanner.scan(m_token, m_source, requests, &preloadedReferrerPolicy);
621 m_token.clear(); 627 m_token.clear();
622 } 628 }
623 629
630 if (!preloadedReferrerPolicy.isEmpty())
631 preloader->preloadReferrerPolicy(preloadedReferrerPolicy);
632
624 preloader->takeAndPreload(requests); 633 preloader->takeAndPreload(requests);
625 } 634 }
626 635
627 CachedDocumentParameters::CachedDocumentParameters(Document* document, PassRefPt r<MediaValues> givenMediaValues) 636 CachedDocumentParameters::CachedDocumentParameters(Document* document, PassRefPt r<MediaValues> givenMediaValues)
628 { 637 {
629 ASSERT(isMainThread()); 638 ASSERT(isMainThread());
630 ASSERT(document); 639 ASSERT(document);
631 doHtmlPreloadScanning = !document->settings() || document->settings()->doHtm lPreloadScanning(); 640 doHtmlPreloadScanning = !document->settings() || document->settings()->doHtm lPreloadScanning();
632 if (givenMediaValues) 641 if (givenMediaValues)
633 mediaValues = givenMediaValues; 642 mediaValues = givenMediaValues;
634 else 643 else
635 mediaValues = MediaValuesCached::create(*document); 644 mediaValues = MediaValuesCached::create(*document);
636 ASSERT(mediaValues->isSafeToSendToAnotherThread()); 645 ASSERT(mediaValues->isSafeToSendToAnotherThread());
637 defaultViewportMinWidth = document->viewportDefaultMinWidth(); 646 defaultViewportMinWidth = document->viewportDefaultMinWidth();
638 viewportMetaZeroValuesQuirk = document->settings() && document->settings()-> viewportMetaZeroValuesQuirk(); 647 viewportMetaZeroValuesQuirk = document->settings() && document->settings()-> viewportMetaZeroValuesQuirk();
639 viewportMetaEnabled = document->settings() && document->settings()->viewport MetaEnabled(); 648 viewportMetaEnabled = document->settings() && document->settings()->viewport MetaEnabled();
640 } 649 }
641 650
642 } 651 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698