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

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: style fix 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
« no previous file with comments | « Source/core/html/parser/HTMLPreloadScanner.h ('k') | Source/core/html/parser/PreloadRequest.h » ('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) 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 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 if (match(m_tagImpl, sourceTag) && m_matchedMediaAttribute && pictureDat a.sourceURL.isEmpty()) { 166 if (match(m_tagImpl, sourceTag) && m_matchedMediaAttribute && pictureDat a.sourceURL.isEmpty()) {
167 pictureData.sourceURL = m_srcsetImageCandidate.toString(); 167 pictureData.sourceURL = m_srcsetImageCandidate.toString();
168 pictureData.sourceSizeSet = m_sourceSizeSet; 168 pictureData.sourceSizeSet = m_sourceSizeSet;
169 pictureData.sourceSize = m_sourceSize; 169 pictureData.sourceSize = m_sourceSize;
170 pictureData.picked = true; 170 pictureData.picked = true;
171 } else if (match(m_tagImpl, imgTag) && !pictureData.sourceURL.isEmpty()) { 171 } else if (match(m_tagImpl, imgTag) && !pictureData.sourceURL.isEmpty()) {
172 setUrlToLoad(pictureData.sourceURL, AllowURLReplacement); 172 setUrlToLoad(pictureData.sourceURL, AllowURLReplacement);
173 } 173 }
174 } 174 }
175 175
176 PassOwnPtr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL , const SegmentedString& source, const ClientHintsPreferences& clientHintsPrefer ences, const PictureData& pictureData) 176 PassOwnPtr<PreloadRequest> createPreloadRequest(const KURL& predictedBaseURL , const SegmentedString& source, const ClientHintsPreferences& clientHintsPrefer ences, const PictureData& pictureData, const ReferrerPolicy referrerPolicy)
177 { 177 {
178 PreloadRequest::RequestType requestType = PreloadRequest::RequestTypePre load; 178 PreloadRequest::RequestType requestType = PreloadRequest::RequestTypePre load;
179 if (shouldPreconnect()) 179 if (shouldPreconnect())
180 requestType = PreloadRequest::RequestTypePreconnect; 180 requestType = PreloadRequest::RequestTypePreconnect;
181 else if (!shouldPreload() || !m_matchedMediaAttribute) 181 else if (!shouldPreload() || !m_matchedMediaAttribute)
182 return nullptr; 182 return nullptr;
183 183
184 TextPosition position = TextPosition(source.currentLine(), source.curren tColumn()); 184 TextPosition position = TextPosition(source.currentLine(), source.curren tColumn());
185 FetchRequest::ResourceWidth resourceWidth; 185 FetchRequest::ResourceWidth resourceWidth;
186 float sourceSize = m_sourceSize; 186 float sourceSize = m_sourceSize;
187 bool sourceSizeSet = m_sourceSizeSet; 187 bool sourceSizeSet = m_sourceSizeSet;
188 if (pictureData.picked) { 188 if (pictureData.picked) {
189 sourceSizeSet = pictureData.sourceSizeSet; 189 sourceSizeSet = pictureData.sourceSizeSet;
190 sourceSize = pictureData.sourceSize; 190 sourceSize = pictureData.sourceSize;
191 } 191 }
192 if (sourceSizeSet) { 192 if (sourceSizeSet) {
193 resourceWidth.width = sourceSize; 193 resourceWidth.width = sourceSize;
194 resourceWidth.isSet = true; 194 resourceWidth.isSet = true;
195 } 195 }
196 196
197 OwnPtr<PreloadRequest> request = PreloadRequest::create(initiatorFor(m_t agImpl), position, m_urlToLoad, predictedBaseURL, resourceType(), resourceWidth, clientHintsPreferences, requestType); 197 OwnPtr<PreloadRequest> request = PreloadRequest::create(initiatorFor(m_t agImpl), position, m_urlToLoad, predictedBaseURL, resourceType(), referrerPolicy , resourceWidth, clientHintsPreferences, requestType);
198 if (isCORSEnabled()) 198 if (isCORSEnabled())
199 request->setCrossOriginEnabled(allowStoredCredentials()); 199 request->setCrossOriginEnabled(allowStoredCredentials());
200 request->setCharset(charset()); 200 request->setCharset(charset());
201 request->setDefer(m_defer); 201 request->setDefer(m_defer);
202 return request.release(); 202 return request.release();
203 } 203 }
204 204
205 private: 205 private:
206 template<typename NameType> 206 template<typename NameType>
207 void processScriptAttribute(const NameType& attributeName, const String& att ributeValue) 207 void processScriptAttribute(const NameType& attributeName, const String& att ributeValue)
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 static void handleMetaReferrer(const String& attributeValue, CachedDocumentParam eters* documentParameters, CSSPreloadScanner* cssScanner)
477 {
478 if (attributeValue.isEmpty() || attributeValue.isNull() || !SecurityPolicy:: referrerPolicyFromString(attributeValue, &documentParameters->referrerPolicy)) {
479 documentParameters->referrerPolicy = ReferrerPolicyDefault;
480 }
481 cssScanner->setReferrerPolicy(documentParameters->referrerPolicy);
482 }
483
484 template <typename Token>
485 static void handleMetaNameAttribute(const Token& token, CachedDocumentParameters * documentParameters, CSSPreloadScanner* cssScanner)
486 {
487 const typename Token::Attribute* nameAttribute = token.getAttributeItem(name Attr);
488 if (!nameAttribute)
489 return;
490
491 String nameAttributeValue(nameAttribute->value);
492 const typename Token::Attribute* contentAttribute = token.getAttributeItem(c ontentAttr);
493 if (!contentAttribute)
494 return;
495
496 String contentAttributeValue(contentAttribute->value);
497 if (equalIgnoringCase(nameAttributeValue, "viewport")) {
498 handleMetaViewport(contentAttributeValue, documentParameters);
499 return;
500 }
501
502 if (equalIgnoringCase(nameAttributeValue, "referrer")) {
503 handleMetaReferrer(contentAttributeValue, documentParameters, cssScanner );
504 }
505 }
506
507 template <typename Token>
477 void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& source, PreloadRequestStream& requests) 508 void TokenPreloadScanner::scanCommon(const Token& token, const SegmentedString& source, PreloadRequestStream& requests)
478 { 509 {
479 if (!m_documentParameters->doHtmlPreloadScanning) 510 if (!m_documentParameters->doHtmlPreloadScanning)
480 return; 511 return;
481 512
482 // Disable preload for documents with AppCache. 513 // Disable preload for documents with AppCache.
483 if (m_isAppCacheEnabled) 514 if (m_isAppCacheEnabled)
484 return; 515 return;
485 516
486 // http://crbug.com/434230 Disable preload for documents with CSP <meta> tag s 517 // http://crbug.com/434230 Disable preload for documents with CSP <meta> tag s
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 String equivAttributeValue(equivAttribute->value); 571 String equivAttributeValue(equivAttribute->value);
541 if (equalIgnoringCase(equivAttributeValue, "content-security-pol icy")) { 572 if (equalIgnoringCase(equivAttributeValue, "content-security-pol icy")) {
542 m_isCSPEnabled = true; 573 m_isCSPEnabled = true;
543 } else if (equalIgnoringCase(equivAttributeValue, "accept-ch")) { 574 } else if (equalIgnoringCase(equivAttributeValue, "accept-ch")) {
544 const typename Token::Attribute* contentAttribute = token.ge tAttributeItem(contentAttr); 575 const typename Token::Attribute* contentAttribute = token.ge tAttributeItem(contentAttr);
545 if (contentAttribute) 576 if (contentAttribute)
546 handleAcceptClientHintsHeader(String(contentAttribute->v alue), m_clientHintsPreferences, nullptr); 577 handleAcceptClientHintsHeader(String(contentAttribute->v alue), m_clientHintsPreferences, nullptr);
547 } 578 }
548 return; 579 return;
549 } 580 }
550 const typename Token::Attribute* nameAttribute = token.getAttributeI tem(nameAttr); 581
551 if (nameAttribute && equalIgnoringCase(String(nameAttribute->value), "viewport")) { 582 handleMetaNameAttribute(token, m_documentParameters.get(), &m_cssSca nner);
552 const typename Token::Attribute* contentAttribute = token.getAtt ributeItem(contentAttr);
553 if (contentAttribute)
554 handleMetaViewport(String(contentAttribute->value), m_docume ntParameters.get());
555 return;
556 }
557 } 583 }
558 584
559 if (match(tagImpl, pictureTag)) { 585 if (match(tagImpl, pictureTag)) {
560 m_inPicture = true; 586 m_inPicture = true;
561 m_pictureData = PictureData(); 587 m_pictureData = PictureData();
562 return; 588 return;
563 } 589 }
564 590
565 StartTagScanner scanner(tagImpl, m_documentParameters->mediaValues); 591 StartTagScanner scanner(tagImpl, m_documentParameters->mediaValues);
566 scanner.processAttributes(token.attributes()); 592 scanner.processAttributes(token.attributes());
567 if (m_inPicture) 593 if (m_inPicture)
568 scanner.handlePictureSourceURL(m_pictureData); 594 scanner.handlePictureSourceURL(m_pictureData);
569 OwnPtr<PreloadRequest> request = scanner.createPreloadRequest(m_predicte dBaseElementURL, source, m_clientHintsPreferences, m_pictureData); 595 OwnPtr<PreloadRequest> request = scanner.createPreloadRequest(m_predicte dBaseElementURL, source, m_clientHintsPreferences, m_pictureData, m_documentPara meters->referrerPolicy);
570 if (request) 596 if (request)
571 requests.append(request.release()); 597 requests.append(request.release());
572 return; 598 return;
573 } 599 }
574 default: { 600 default: {
575 return; 601 return;
576 } 602 }
577 } 603 }
578 } 604 }
579 605
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 ASSERT(document); 656 ASSERT(document);
631 doHtmlPreloadScanning = !document->settings() || document->settings()->doHtm lPreloadScanning(); 657 doHtmlPreloadScanning = !document->settings() || document->settings()->doHtm lPreloadScanning();
632 if (givenMediaValues) 658 if (givenMediaValues)
633 mediaValues = givenMediaValues; 659 mediaValues = givenMediaValues;
634 else 660 else
635 mediaValues = MediaValuesCached::create(*document); 661 mediaValues = MediaValuesCached::create(*document);
636 ASSERT(mediaValues->isSafeToSendToAnotherThread()); 662 ASSERT(mediaValues->isSafeToSendToAnotherThread());
637 defaultViewportMinWidth = document->viewportDefaultMinWidth(); 663 defaultViewportMinWidth = document->viewportDefaultMinWidth();
638 viewportMetaZeroValuesQuirk = document->settings() && document->settings()-> viewportMetaZeroValuesQuirk(); 664 viewportMetaZeroValuesQuirk = document->settings() && document->settings()-> viewportMetaZeroValuesQuirk();
639 viewportMetaEnabled = document->settings() && document->settings()->viewport MetaEnabled(); 665 viewportMetaEnabled = document->settings() && document->settings()->viewport MetaEnabled();
666 referrerPolicy = ReferrerPolicyDefault;
640 } 667 }
641 668
642 } 669 }
OLDNEW
« no previous file with comments | « Source/core/html/parser/HTMLPreloadScanner.h ('k') | Source/core/html/parser/PreloadRequest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698