| OLD | NEW | 
|---|
| 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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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 } | 
| OLD | NEW | 
|---|