Title: [207281] trunk/Source/WebCore
Revision
207281
Author
commit-qu...@webkit.org
Date
2016-10-13 03:34:15 -0700 (Thu, 13 Oct 2016)

Log Message

Remove CachedResourceRequest::mutableResourceRequest
https://bugs.webkit.org/show_bug.cgi?id=163277

Patch by Youenn Fablet <you...@apple.com> on 2016-10-13
Reviewed by Sam Weinig.

No change of behavior.

Removing CachedResourceRequest::mutableResourceRequest requires call sites to either update the ResourceRequest
before creating the CachedResourceRequest or to add methods at CachedResourceRequest.

Adding CachedResourceRequest::releaseResourceRequest for CachedResource constructor.

Most new CachedResourceRequest methods are used by CachedResourceLoader which is passed a CachedResourceRequest.
This allows code in CachedResourceLoader to be easier to read.

* css/CSSImageSetValue.cpp:
(WebCore::CSSImageSetValue::loadBestFitImage):
* css/CSSImageValue.cpp:
(WebCore::CSSImageValue::loadImage):
* dom/ScriptElement.cpp:
(WebCore::ScriptElement::requestScriptWithCache):
* loader/CrossOriginAccessControl.cpp:
(WebCore::createAccessControlPreflightRequest):
* loader/CrossOriginAccessControl.h:
* loader/CrossOriginPreflightChecker.cpp:
(WebCore::CrossOriginPreflightChecker::startPreflight):
(WebCore::CrossOriginPreflightChecker::doPreflight):
* loader/DocumentThreadableLoader.cpp:
(WebCore::DocumentThreadableLoader::loadRequest):
* loader/MediaResourceLoader.cpp:
(WebCore::MediaResourceLoader::requestResource):
* loader/cache/CachedResource.cpp:
(WebCore::CachedResource::CachedResource):
* loader/cache/CachedResourceLoader.cpp:
(WebCore::CachedResourceLoader::requestImage):
(WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
(WebCore::CachedResourceLoader::prepareFetch):
(WebCore::CachedResourceLoader::updateHTTPRequestHeaders):
(WebCore::CachedResourceLoader::requestResource):
(WebCore::acceptHeaderValueFromType): Deleted.
(WebCore::updateRequestAccordingCacheMode): Deleted.
* loader/cache/CachedResourceRequest.cpp:
(WebCore::CachedResourceRequest::setAsPotentiallyCrossOrigin):
(WebCore::CachedResourceRequest::updateForAccessControl):
(WebCore::CachedResourceRequest::upgradeInsecureRequestIfNeeded):
(WebCore::CachedResourceRequest::setDomainForCachePartition):
(WebCore::acceptHeaderValueFromType):
(WebCore::CachedResourceRequest::setAcceptHeaderIfNone):
(WebCore::CachedResourceRequest::updateAccordingCacheMode):
(WebCore::CachedResourceRequest::removeFragmentIdentifierIfNeeded):
(WebCore::CachedResourceRequest::applyBlockedStatus):
* loader/cache/CachedResourceRequest.h:
(WebCore::CachedResourceRequest::releaseResourceRequest):
(WebCore::CachedResourceRequest::setCachingPolicy):
(WebCore::CachedResourceRequest::mutableResourceRequest): Deleted.
(WebCore::CachedResourceRequest::setCacheModeToNoStore): Deleted.
* loader/icon/IconLoader.cpp:
(WebCore::IconLoader::startLoading):
* platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
(WebCore::WebCoreAVCFResourceLoader::startLoading):
* platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
(WebCore::WebCoreAVFResourceLoader::startLoading):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (207280 => 207281)


--- trunk/Source/WebCore/ChangeLog	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/ChangeLog	2016-10-13 10:34:15 UTC (rev 207281)
@@ -1,3 +1,68 @@
+2016-10-13  Youenn Fablet  <you...@apple.com>
+
+        Remove CachedResourceRequest::mutableResourceRequest
+        https://bugs.webkit.org/show_bug.cgi?id=163277
+
+        Reviewed by Sam Weinig.
+
+        No change of behavior.
+
+        Removing CachedResourceRequest::mutableResourceRequest requires call sites to either update the ResourceRequest
+        before creating the CachedResourceRequest or to add methods at CachedResourceRequest.
+
+        Adding CachedResourceRequest::releaseResourceRequest for CachedResource constructor.
+
+        Most new CachedResourceRequest methods are used by CachedResourceLoader which is passed a CachedResourceRequest.
+        This allows code in CachedResourceLoader to be easier to read.
+
+        * css/CSSImageSetValue.cpp:
+        (WebCore::CSSImageSetValue::loadBestFitImage):
+        * css/CSSImageValue.cpp:
+        (WebCore::CSSImageValue::loadImage):
+        * dom/ScriptElement.cpp:
+        (WebCore::ScriptElement::requestScriptWithCache):
+        * loader/CrossOriginAccessControl.cpp:
+        (WebCore::createAccessControlPreflightRequest):
+        * loader/CrossOriginAccessControl.h:
+        * loader/CrossOriginPreflightChecker.cpp:
+        (WebCore::CrossOriginPreflightChecker::startPreflight):
+        (WebCore::CrossOriginPreflightChecker::doPreflight):
+        * loader/DocumentThreadableLoader.cpp:
+        (WebCore::DocumentThreadableLoader::loadRequest):
+        * loader/MediaResourceLoader.cpp:
+        (WebCore::MediaResourceLoader::requestResource):
+        * loader/cache/CachedResource.cpp:
+        (WebCore::CachedResource::CachedResource):
+        * loader/cache/CachedResourceLoader.cpp:
+        (WebCore::CachedResourceLoader::requestImage):
+        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
+        (WebCore::CachedResourceLoader::prepareFetch):
+        (WebCore::CachedResourceLoader::updateHTTPRequestHeaders):
+        (WebCore::CachedResourceLoader::requestResource):
+        (WebCore::acceptHeaderValueFromType): Deleted.
+        (WebCore::updateRequestAccordingCacheMode): Deleted.
+        * loader/cache/CachedResourceRequest.cpp:
+        (WebCore::CachedResourceRequest::setAsPotentiallyCrossOrigin):
+        (WebCore::CachedResourceRequest::updateForAccessControl):
+        (WebCore::CachedResourceRequest::upgradeInsecureRequestIfNeeded):
+        (WebCore::CachedResourceRequest::setDomainForCachePartition):
+        (WebCore::acceptHeaderValueFromType):
+        (WebCore::CachedResourceRequest::setAcceptHeaderIfNone):
+        (WebCore::CachedResourceRequest::updateAccordingCacheMode):
+        (WebCore::CachedResourceRequest::removeFragmentIdentifierIfNeeded):
+        (WebCore::CachedResourceRequest::applyBlockedStatus):
+        * loader/cache/CachedResourceRequest.h:
+        (WebCore::CachedResourceRequest::releaseResourceRequest):
+        (WebCore::CachedResourceRequest::setCachingPolicy):
+        (WebCore::CachedResourceRequest::mutableResourceRequest): Deleted.
+        (WebCore::CachedResourceRequest::setCacheModeToNoStore): Deleted.
+        * loader/icon/IconLoader.cpp:
+        (WebCore::IconLoader::startLoading):
+        * platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp:
+        (WebCore::WebCoreAVCFResourceLoader::startLoading):
+        * platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm:
+        (WebCore::WebCoreAVFResourceLoader::startLoading):
+
 2016-10-13  Antti Koivisto  <an...@apple.com>
 
         Support scoped style for user agent shadow trees

Modified: trunk/Source/WebCore/css/CSSImageSetValue.cpp (207280 => 207281)


--- trunk/Source/WebCore/css/CSSImageSetValue.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/css/CSSImageSetValue.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -90,6 +90,8 @@
 std::pair<CachedImage*, float> CSSImageSetValue::loadBestFitImage(CachedResourceLoader& loader, const ResourceLoaderOptions& options)
 {
     Document* document = loader.document();
+    ASSERT(document);
+
     updateDeviceScaleFactor(*document);
 
     if (!m_accessedBestFitImage) {
@@ -101,10 +103,9 @@
         ImageWithScale image = bestImageForScaleFactor();
         CachedResourceRequest request(ResourceRequest(document->completeURL(image.imageURL)), options);
         request.setInitiator(cachedResourceRequestInitiators().css);
-        if (options.mode == FetchOptions::Mode::Cors) {
-            ASSERT(document->securityOrigin());
-            updateRequestForAccessControl(request.mutableResourceRequest(), *document->securityOrigin(), options.allowCredentials);
-        }
+        if (options.mode == FetchOptions::Mode::Cors)
+            request.updateForAccessControl(*document);
+
         m_cachedImage = loader.requestImage(WTFMove(request));
         m_bestFitImageScaleFactor = image.scaleFactor;
     }

Modified: trunk/Source/WebCore/css/CSSImageValue.cpp (207280 => 207281)


--- trunk/Source/WebCore/css/CSSImageValue.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/css/CSSImageValue.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -72,8 +72,8 @@
             request.setInitiator(m_initiatorName);
 
         if (options.mode == FetchOptions::Mode::Cors) {
-            ASSERT(loader.document()->securityOrigin());
-            updateRequestForAccessControl(request.mutableResourceRequest(), *loader.document()->securityOrigin(), options.allowCredentials);
+            ASSERT(loader.document());
+            request.updateForAccessControl(*loader.document());
         }
         m_cachedImage = loader.requestImage(WTFMove(request));
     }

Modified: trunk/Source/WebCore/dom/ScriptElement.cpp (207280 => 207281)


--- trunk/Source/WebCore/dom/ScriptElement.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/dom/ScriptElement.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -293,9 +293,8 @@
 
     CachedResourceRequest request(ResourceRequest(sourceURL), options);
     request.setAsPotentiallyCrossOrigin(m_element.attributeWithoutSynchronization(HTMLNames::crossoriginAttr), document);
+    request.upgradeInsecureRequestIfNeeded(document);
 
-    document.contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request.mutableResourceRequest(), ContentSecurityPolicy::InsecureRequestType::Load);
-
     request.setCharset(scriptCharset());
     request.setInitiator(&element());
 

Modified: trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp (207280 => 207281)


--- trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/loader/CrossOriginAccessControl.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -103,7 +103,7 @@
     request.setHTTPOrigin(securityOrigin.toString());
 }
 
-ResourceRequest createAccessControlPreflightRequest(const ResourceRequest& request, SecurityOrigin& securityOrigin)
+ResourceRequest createAccessControlPreflightRequest(const ResourceRequest& request, SecurityOrigin& securityOrigin, const String& referrer)
 {
     ResourceRequest preflightRequest(request.url());
     updateRequestForAccessControl(preflightRequest, securityOrigin, DoNotAllowStoredCredentials);
@@ -110,6 +110,8 @@
     preflightRequest.setHTTPMethod("OPTIONS");
     preflightRequest.setHTTPHeaderField(HTTPHeaderName::AccessControlRequestMethod, request.httpMethod());
     preflightRequest.setPriority(request.priority());
+    if (!referrer.isNull())
+        preflightRequest.setHTTPReferrer(referrer);
 
     const HTTPHeaderMap& requestHeaderFields = request.httpHeaderFields();
 

Modified: trunk/Source/WebCore/loader/CrossOriginAccessControl.h (207280 => 207281)


--- trunk/Source/WebCore/loader/CrossOriginAccessControl.h	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/loader/CrossOriginAccessControl.h	2016-10-13 10:34:15 UTC (rev 207281)
@@ -45,7 +45,7 @@
 bool isOnAccessControlResponseHeaderWhitelist(const String&);
 
 void updateRequestForAccessControl(ResourceRequest&, SecurityOrigin&, StoredCredentials);
-ResourceRequest createAccessControlPreflightRequest(const ResourceRequest&, SecurityOrigin&);
+ResourceRequest createAccessControlPreflightRequest(const ResourceRequest&, SecurityOrigin&, const String&);
 
 bool isValidCrossOriginRedirectionURL(const URL&);
 void cleanRedirectedRequestForAccessControl(ResourceRequest&);

Modified: trunk/Source/WebCore/loader/CrossOriginPreflightChecker.cpp (207280 => 207281)


--- trunk/Source/WebCore/loader/CrossOriginPreflightChecker.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/loader/CrossOriginPreflightChecker.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -109,13 +109,10 @@
     options.redirect = FetchOptions::Redirect::Manual;
     options.contentSecurityPolicyImposition = ContentSecurityPolicyImposition::SkipPolicyCheck;
 
-    CachedResourceRequest preflightRequest(createAccessControlPreflightRequest(m_request, m_loader.securityOrigin()), options);
+    CachedResourceRequest preflightRequest(createAccessControlPreflightRequest(m_request, m_loader.securityOrigin(), m_loader.referrer()), options);
     if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled())
         preflightRequest.setInitiator(m_loader.options().initiator);
 
-    if (!m_loader.referrer().isNull())
-        preflightRequest.mutableResourceRequest().setHTTPReferrer(m_loader.referrer());
-
     ASSERT(!m_resource);
     m_resource = m_loader.document().cachedResourceLoader().requestRawResource(WTFMove(preflightRequest));
     if (m_resource)
@@ -127,14 +124,11 @@
     if (!loader.document().frame())
         return;
 
-    ResourceRequest preflightRequest = createAccessControlPreflightRequest(request, loader.securityOrigin());
+    ResourceRequest preflightRequest = createAccessControlPreflightRequest(request, loader.securityOrigin(), loader.referrer());
     ResourceError error;
     ResourceResponse response;
     RefPtr<SharedBuffer> data;
 
-    if (!loader.referrer().isNull())
-        preflightRequest.setHTTPReferrer(loader.referrer());
-
     unsigned identifier = loader.document().frame()->loader().loadResourceSynchronously(preflightRequest, DoNotAllowStoredCredentials, ClientCredentialPolicy::CannotAskClientForCredentials, error, response, data);
 
     if (!error.isNull()) {

Modified: trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp (207280 => 207281)


--- trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -380,10 +380,10 @@
         options.clientCredentialPolicy = m_sameOriginRequest ? ClientCredentialPolicy::MayAskClientForCredentials : ClientCredentialPolicy::CannotAskClientForCredentials;
         options.contentSecurityPolicyImposition = ContentSecurityPolicyImposition::SkipPolicyCheck;
 
+        request.setAllowCookies(m_options.allowCredentials == AllowStoredCredentials);
         CachedResourceRequest newRequest(WTFMove(request), options);
         if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled())
             newRequest.setInitiator(m_options.initiator);
-        newRequest.mutableResourceRequest().setAllowCookies(m_options.allowCredentials == AllowStoredCredentials);
         newRequest.setOrigin(&securityOrigin());
 
         ASSERT(!m_resource);

Modified: trunk/Source/WebCore/loader/MediaResourceLoader.cpp (207280 => 207281)


--- trunk/Source/WebCore/loader/MediaResourceLoader.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/loader/MediaResourceLoader.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -65,19 +65,17 @@
     DataBufferingPolicy bufferingPolicy = options & LoadOption::BufferData ? WebCore::BufferData : WebCore::DoNotBufferData;
     auto cachingPolicy = options & LoadOption::DisallowCaching ? CachingPolicy::DisallowCaching : CachingPolicy::AllowCaching;
 
+    request.setRequester(ResourceRequest::Requester::Media);
+#if HAVE(AVFOUNDATION_LOADER_DELEGATE) && PLATFORM(MAC)
+    // FIXME: Workaround for <rdar://problem/26071607>. We are not able to do CORS checking on 304 responses because they are usually missing the headers we need.
+    if (!m_crossOriginMode.isNull())
+        request.makeUnconditional();
+#endif
+
     // FIXME: Skip Content Security Policy check if the element that initiated this request is in a user-agent shadow tree. See <https://bugs.webkit.org/show_bug.cgi?id=155505>.
     CachedResourceRequest cacheRequest(WTFMove(request), ResourceLoaderOptions(SendCallbacks, DoNotSniffContent, bufferingPolicy, AllowStoredCredentials, ClientCredentialPolicy::MayAskClientForCredentials, FetchOptions::Credentials::Include, DoSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, cachingPolicy));
-
     cacheRequest.setAsPotentiallyCrossOrigin(m_crossOriginMode, *m_document);
 
-    cacheRequest.mutableResourceRequest().setRequester(ResourceRequest::Requester::Media);
-#if HAVE(AVFOUNDATION_LOADER_DELEGATE) && PLATFORM(MAC)
-    // FIXME: Workaround for <rdar://problem/26071607>. We are not able to do CORS checking on 304 responses because they
-    // are usually missing the headers we need.
-    if (cacheRequest.options().mode == FetchOptions::Mode::Cors)
-        cacheRequest.mutableResourceRequest().makeUnconditional();
-#endif
-
     CachedResourceHandle<CachedRawResource> resource = m_document->cachedResourceLoader().requestMedia(WTFMove(cacheRequest));
     if (!resource)
         return nullptr;

Modified: trunk/Source/WebCore/loader/cache/CachedResource.cpp (207280 => 207281)


--- trunk/Source/WebCore/loader/cache/CachedResource.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/loader/cache/CachedResource.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -115,7 +115,7 @@
 DEFINE_DEBUG_ONLY_GLOBAL(RefCountedLeakCounter, cachedResourceLeakCounter, ("CachedResource"));
 
 CachedResource::CachedResource(CachedResourceRequest&& request, Type type, SessionID sessionID)
-    : m_resourceRequest(WTFMove(request.mutableResourceRequest()))
+    : m_resourceRequest(request.releaseResourceRequest())
     , m_options(request.options())
     , m_decodedDataDeletionTimer(*this, &CachedResource::destroyDecodedData, deadDecodedDataDeletionIntervalForResourceType(type))
     , m_sessionID(sessionID)

Modified: trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp (207280 => 207281)


--- trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -51,7 +51,6 @@
 #include "FrameLoaderClient.h"
 #include "HTMLElement.h"
 #include "HTMLFrameOwnerElement.h"
-#include "HTTPHeaderValues.h"
 #include "LoaderStrategy.h"
 #include "LocalizedStrings.h"
 #include "Logging.h"
@@ -182,7 +181,7 @@
     if (Frame* frame = this->frame()) {
         if (frame->loader().pageDismissalEventBeingDispatched() != FrameLoader::PageDismissalType::None) {
             if (Document* document = frame->document())
-                document->contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request.mutableResourceRequest(), ContentSecurityPolicy::InsecureRequestType::Load);
+                request.upgradeInsecureRequestIfNeeded(*document);
             URL requestURL = request.resourceRequest().url();
             if (requestURL.isValid() && canRequest(CachedResource::ImageResource, requestURL, request, ForPreload::No))
                 PingLoader::loadImage(*frame, requestURL);
@@ -219,10 +218,9 @@
 
 CachedResourceHandle<CachedCSSStyleSheet> CachedResourceLoader::requestUserCSSStyleSheet(CachedResourceRequest&& request)
 {
-    URL url = ""
-
 #if ENABLE(CACHE_PARTITIONING)
-    request.mutableResourceRequest().setDomainForCachePartition(document()->topOrigin()->domainForCachePartition());
+    ASSERT(document());
+    request.setDomainForCachePartition(*document());
 #endif
 
     auto& memoryCache = MemoryCache::singleton();
@@ -234,8 +232,7 @@
         }
     }
 
-    if (url.string() != request.resourceRequest().url())
-        request.mutableResourceRequest().setURL(url);
+    request.removeFragmentIdentifierIfNeeded();
 
     CachedResourceHandle<CachedCSSStyleSheet> userSheet = new CachedCSSStyleSheet(WTFMove(request), sessionID());
 
@@ -633,27 +630,6 @@
         frame->page()->diagnosticLoggingClient().logDiagnosticMessageWithValue(DiagnosticLoggingKeys::resourceRequestKey(), description, value, ShouldSample::Yes);
 }
 
-static inline String acceptHeaderValueFromType(CachedResource::Type type)
-{
-    switch (type) {
-    case CachedResource::Type::MainResource:
-        return ASCIILiteral("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
-    case CachedResource::Type::ImageResource:
-        return ASCIILiteral("image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5");
-    case CachedResource::Type::CSSStyleSheet:
-        return ASCIILiteral("text/css,*/*;q=0.1");
-    case CachedResource::Type::SVGDocumentResource:
-        return ASCIILiteral("image/svg+xml");
-#if ENABLE(XSLT)
-    case CachedResource::Type::XSLStyleSheet:
-        // FIXME: This should accept more general xml formats */*+xml, image/svg+xml for example.
-        return ASCIILiteral("text/xml,application/xml,application/xhtml+xml,text/xsl,application/rss+xml,application/atom+xml");
-#endif
-    default:
-        return ASCIILiteral("*/*");
-    }
-}
-
 void CachedResourceLoader::prepareFetch(CachedResource::Type type, CachedResourceRequest& request)
 {
     // Implementing step 1 to 7 of https://fetch.spec.whatwg.org/#fetching
@@ -661,60 +637,23 @@
     if (!request.origin() && document())
         request.setOrigin(document()->securityOrigin());
 
-    if (!request.resourceRequest().hasHTTPHeader(HTTPHeaderName::Accept))
-        request.mutableResourceRequest().setHTTPHeaderField(HTTPHeaderName::Accept, acceptHeaderValueFromType(type));
+    request.setAcceptHeaderIfNone(type);
 
     // Accept-Language value is handled in underlying port-specific code.
     // FIXME: Decide whether to support client hints
 }
 
-static inline void updateRequestAccordingCacheMode(CachedResourceRequest& request)
-{
-    if (request.options().cache == FetchOptions::Cache::Default
-            && (request.resourceRequest().hasHTTPHeaderField(HTTPHeaderName::IfModifiedSince)
-                || request.resourceRequest().hasHTTPHeaderField(HTTPHeaderName::IfNoneMatch)
-                || request.resourceRequest().hasHTTPHeaderField(HTTPHeaderName::IfUnmodifiedSince)
-                || request.resourceRequest().hasHTTPHeaderField(HTTPHeaderName::IfMatch)
-                || request.resourceRequest().hasHTTPHeaderField(HTTPHeaderName::IfRange)))
-        request.setCacheModeToNoStore();
 
-    switch (request.options().cache) {
-    case FetchOptions::Cache::NoCache:
-        request.mutableResourceRequest().setCachePolicy(ReloadIgnoringCacheData);
-        request.mutableResourceRequest().addHTTPHeaderFieldIfNotPresent(HTTPHeaderName::CacheControl, HTTPHeaderValues::maxAge0());
-        break;
-    case FetchOptions::Cache::NoStore:
-        request.setCachingPolicy(CachingPolicy::DisallowCaching);
-        request.mutableResourceRequest().setCachePolicy(ReloadIgnoringCacheData);
-        request.mutableResourceRequest().addHTTPHeaderFieldIfNotPresent(HTTPHeaderName::Pragma, HTTPHeaderValues::noCache());
-        request.mutableResourceRequest().addHTTPHeaderFieldIfNotPresent(HTTPHeaderName::CacheControl, HTTPHeaderValues::noCache());
-        break;
-    case FetchOptions::Cache::Reload:
-        request.mutableResourceRequest().setCachePolicy(ReloadIgnoringCacheData);
-        request.mutableResourceRequest().addHTTPHeaderFieldIfNotPresent(HTTPHeaderName::Pragma, HTTPHeaderValues::noCache());
-        request.mutableResourceRequest().addHTTPHeaderFieldIfNotPresent(HTTPHeaderName::CacheControl, HTTPHeaderValues::noCache());
-        break;
-    case FetchOptions::Cache::Default:
-        break;
-    case FetchOptions::Cache::ForceCache:
-        request.mutableResourceRequest().setCachePolicy(ReturnCacheDataElseLoad);
-        break;
-    case FetchOptions::Cache::OnlyIfCached:
-        request.mutableResourceRequest().setCachePolicy(ReturnCacheDataDontLoad);
-        break;
-    }
-}
-
-void CachedResourceLoader::updateHTTPRequestHeaders(CachedResourceRequest& resourceRequest)
+void CachedResourceLoader::updateHTTPRequestHeaders(CachedResourceRequest& request)
 {
     // Implementing steps 10 to 12 of https://fetch.spec.whatwg.org/#http-network-or-cache-fetch
-    updateRequestAccordingCacheMode(resourceRequest);
+    request.updateAccordingCacheMode();
 }
 
 CachedResourceHandle<CachedResource> CachedResourceLoader::requestResource(CachedResource::Type type, CachedResourceRequest&& request, ForPreload forPreload, DeferOption defer)
 {
     if (Document* document = this->document())
-        document->contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(request.mutableResourceRequest(), ContentSecurityPolicy::InsecureRequestType::Load);
+        request.upgradeInsecureRequestIfNeeded(*document);
 
     URL url = ""
 
@@ -738,9 +677,9 @@
 
 #if ENABLE(CONTENT_EXTENSIONS)
     if (frame() && frame()->mainFrame().page() && m_documentLoader) {
-        auto& resourceRequest = request.mutableResourceRequest();
+        const auto& resourceRequest = request.resourceRequest();
         auto blockedStatus = frame()->mainFrame().page()->userContentProvider().processContentExtensionRulesForLoad(resourceRequest.url(), toResourceType(type), *m_documentLoader);
-        applyBlockedStatusToRequest(blockedStatus, resourceRequest);
+        request.applyBlockedStatus(blockedStatus);
         if (blockedStatus.blockedLoad) {
             RELEASE_LOG_IF_ALLOWED("requestResource: Resource blocked by content blocker (frame = %p)", frame());
             if (type == CachedResource::Type::MainResource) {
@@ -747,7 +686,7 @@
                 auto resource = createResource(type, WTFMove(request), sessionID());
                 ASSERT(resource);
                 resource->error(CachedResource::Status::LoadError);
-                resource->setResourceError(ResourceError(ContentExtensions::WebKitContentBlockerDomain, 0, request.resourceRequest().url(), WEB_UI_STRING("The URL was blocked by a content blocker", "WebKitErrorBlockedByContentBlocker description")));
+                resource->setResourceError(ResourceError(ContentExtensions::WebKitContentBlockerDomain, 0, resourceRequest.url(), WEB_UI_STRING("The URL was blocked by a content blocker", "WebKitErrorBlockedByContentBlocker description")));
                 return resource;
             }
             return nullptr;
@@ -784,7 +723,7 @@
     CachedResourceHandle<CachedResource> resource;
 #if ENABLE(CACHE_PARTITIONING)
     if (document())
-        request.mutableResourceRequest().setDomainForCachePartition(document()->topOrigin()->domainForCachePartition());
+        request.setDomainForCachePartition(*document());
 #endif
 
     if (request.allowsCaching())

Modified: trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp (207280 => 207281)


--- trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/loader/cache/CachedResourceRequest.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -27,9 +27,12 @@
 #include "CachedResourceRequest.h"
 
 #include "CachedResourceLoader.h"
+#include "ContentExtensionActions.h"
 #include "CrossOriginAccessControl.h"
 #include "Document.h"
 #include "Element.h"
+#include "HTTPHeaderValues.h"
+#include "MemoryCache.h"
 #include <wtf/NeverDestroyed.h>
 
 namespace WebCore {
@@ -78,7 +81,115 @@
     m_options.credentials = equalLettersIgnoringASCIICase(mode, "use-credentials") ? FetchOptions::Credentials::Include : FetchOptions::Credentials::SameOrigin;
     m_options.allowCredentials = equalLettersIgnoringASCIICase(mode, "use-credentials") ? AllowStoredCredentials : DoNotAllowStoredCredentials;
 
-    updateRequestForAccessControl(m_resourceRequest, *document.securityOrigin(), m_options.allowCredentials);
+    WebCore::updateRequestForAccessControl(m_resourceRequest, *document.securityOrigin(), m_options.allowCredentials);
 }
 
+void CachedResourceRequest::updateForAccessControl(Document& document)
+{
+    ASSERT(m_options.mode == FetchOptions::Mode::Cors);
+    ASSERT(document.securityOrigin());
+
+    m_origin = document.securityOrigin();
+    WebCore::updateRequestForAccessControl(m_resourceRequest, *document.securityOrigin(), m_options.allowCredentials);
+}
+
+void CachedResourceRequest::upgradeInsecureRequestIfNeeded(Document& document)
+{
+    URL url = ""
+
+    ASSERT(document.contentSecurityPolicy());
+    document.contentSecurityPolicy()->upgradeInsecureRequestIfNeeded(url, ContentSecurityPolicy::InsecureRequestType::Load);
+
+    if (url == m_resourceRequest.url())
+        return;
+
+    m_resourceRequest.setURL(url);
+}
+
+#if ENABLE(CACHE_PARTITIONING)
+void CachedResourceRequest::setDomainForCachePartition(Document& document)
+{
+    ASSERT(document.topOrigin());
+    m_resourceRequest.setDomainForCachePartition(document.topOrigin()->domainForCachePartition());
+}
+#endif
+
+static inline String acceptHeaderValueFromType(CachedResource::Type type)
+{
+    switch (type) {
+    case CachedResource::Type::MainResource:
+        return ASCIILiteral("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
+    case CachedResource::Type::ImageResource:
+        return ASCIILiteral("image/png,image/svg+xml,image/*;q=0.8,*/*;q=0.5");
+    case CachedResource::Type::CSSStyleSheet:
+        return ASCIILiteral("text/css,*/*;q=0.1");
+    case CachedResource::Type::SVGDocumentResource:
+        return ASCIILiteral("image/svg+xml");
+#if ENABLE(XSLT)
+    case CachedResource::Type::XSLStyleSheet:
+        // FIXME: This should accept more general xml formats */*+xml, image/svg+xml for example.
+        return ASCIILiteral("text/xml,application/xml,application/xhtml+xml,text/xsl,application/rss+xml,application/atom+xml");
+#endif
+    default:
+        return ASCIILiteral("*/*");
+    }
+}
+
+void CachedResourceRequest::setAcceptHeaderIfNone(CachedResource::Type type)
+{
+    if (!m_resourceRequest.hasHTTPHeader(HTTPHeaderName::Accept))
+        m_resourceRequest.setHTTPHeaderField(HTTPHeaderName::Accept, acceptHeaderValueFromType(type));
+}
+
+void CachedResourceRequest::updateAccordingCacheMode()
+{
+    if (m_options.cache == FetchOptions::Cache::Default
+        && (m_resourceRequest.hasHTTPHeaderField(HTTPHeaderName::IfModifiedSince)
+            || m_resourceRequest.hasHTTPHeaderField(HTTPHeaderName::IfNoneMatch)
+            || m_resourceRequest.hasHTTPHeaderField(HTTPHeaderName::IfUnmodifiedSince)
+            || m_resourceRequest.hasHTTPHeaderField(HTTPHeaderName::IfMatch)
+            || m_resourceRequest.hasHTTPHeaderField(HTTPHeaderName::IfRange)))
+        m_options.cache = FetchOptions::Cache::NoStore;
+
+    switch (m_options.cache) {
+    case FetchOptions::Cache::NoCache:
+        m_resourceRequest.setCachePolicy(ReloadIgnoringCacheData);
+        m_resourceRequest.addHTTPHeaderFieldIfNotPresent(HTTPHeaderName::CacheControl, HTTPHeaderValues::maxAge0());
+        break;
+    case FetchOptions::Cache::NoStore:
+        m_options.cachingPolicy = CachingPolicy::DisallowCaching;
+        m_resourceRequest.setCachePolicy(ReloadIgnoringCacheData);
+        m_resourceRequest.addHTTPHeaderFieldIfNotPresent(HTTPHeaderName::Pragma, HTTPHeaderValues::noCache());
+        m_resourceRequest.addHTTPHeaderFieldIfNotPresent(HTTPHeaderName::CacheControl, HTTPHeaderValues::noCache());
+        break;
+    case FetchOptions::Cache::Reload:
+        m_resourceRequest.setCachePolicy(ReloadIgnoringCacheData);
+        m_resourceRequest.addHTTPHeaderFieldIfNotPresent(HTTPHeaderName::Pragma, HTTPHeaderValues::noCache());
+        m_resourceRequest.addHTTPHeaderFieldIfNotPresent(HTTPHeaderName::CacheControl, HTTPHeaderValues::noCache());
+        break;
+    case FetchOptions::Cache::Default:
+        break;
+    case FetchOptions::Cache::ForceCache:
+        m_resourceRequest.setCachePolicy(ReturnCacheDataElseLoad);
+        break;
+    case FetchOptions::Cache::OnlyIfCached:
+        m_resourceRequest.setCachePolicy(ReturnCacheDataDontLoad);
+        break;
+    }
+}
+
+void CachedResourceRequest::removeFragmentIdentifierIfNeeded()
+{
+    URL url = ""
+    if (url.string() != m_resourceRequest.url())
+        m_resourceRequest.setURL(url);
+}
+
+#if ENABLE(CONTENT_EXTENSIONS)
+void CachedResourceRequest::applyBlockedStatus(const ContentExtensions::BlockedStatus& blockedStatus)
+{
+    ContentExtensions::applyBlockedStatusToRequest(blockedStatus, m_resourceRequest);
+}
+#endif
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/loader/cache/CachedResourceRequest.h (207280 => 207281)


--- trunk/Source/WebCore/loader/cache/CachedResourceRequest.h	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/loader/cache/CachedResourceRequest.h	2016-10-13 10:34:15 UTC (rev 207281)
@@ -26,6 +26,7 @@
 #ifndef CachedResourceRequest_h
 #define CachedResourceRequest_h
 
+#include "CachedResource.h"
 #include "DocumentLoader.h"
 #include "Element.h"
 #include "ResourceLoadPriority.h"
@@ -36,6 +37,10 @@
 #include <wtf/text/AtomicString.h>
 
 namespace WebCore {
+
+namespace ContentExtensions {
+struct BlockedStatus;
+}
 class Document;
 
 class CachedResourceRequest {
@@ -42,7 +47,7 @@
 public:
     CachedResourceRequest(ResourceRequest&&, const ResourceLoaderOptions&, Optional<ResourceLoadPriority> = Nullopt, String&& charset = String());
 
-    ResourceRequest& mutableResourceRequest() { return m_resourceRequest; }
+    ResourceRequest&& releaseResourceRequest() { return WTFMove(m_resourceRequest); }
     const ResourceRequest& resourceRequest() const { return m_resourceRequest; }
     const String& charset() const { return m_charset; }
     void setCharset(const String& charset) { m_charset = charset; }
@@ -53,15 +58,26 @@
     void setInitiator(const AtomicString& name);
     const AtomicString& initiatorName() const;
     bool allowsCaching() const { return m_options.cachingPolicy == CachingPolicy::AllowCaching; }
-    void setCachingPolicy(CachingPolicy policy) { m_options.cachingPolicy = policy; }
+    void setCachingPolicy(CachingPolicy policy) { m_options.cachingPolicy = policy;  }
 
     void setAsPotentiallyCrossOrigin(const String&, Document&);
+    void updateForAccessControl(Document&);
+
+    void upgradeInsecureRequestIfNeeded(Document&);
+    void setAcceptHeaderIfNone(CachedResource::Type);
+    void updateAccordingCacheMode();
+    void removeFragmentIdentifierIfNeeded();
+#if ENABLE(CONTENT_EXTENSIONS)
+    void applyBlockedStatus(const ContentExtensions::BlockedStatus&);
+#endif
+#if ENABLE(CACHE_PARTITIONING)
+    void setDomainForCachePartition(Document&);
+#endif
+
     void setOrigin(RefPtr<SecurityOrigin>&& origin) { ASSERT(!m_origin); m_origin = WTFMove(origin); }
     RefPtr<SecurityOrigin> releaseOrigin() { return WTFMove(m_origin); }
     SecurityOrigin* origin() const { return m_origin.get(); }
 
-    void setCacheModeToNoStore() { m_options.cache = FetchOptions::Cache::NoStore; }
-
 private:
     ResourceRequest m_resourceRequest;
     String m_charset;

Modified: trunk/Source/WebCore/loader/icon/IconLoader.cpp (207280 => 207281)


--- trunk/Source/WebCore/loader/icon/IconLoader.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/loader/icon/IconLoader.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -58,10 +58,12 @@
     if (m_resource || !m_frame.document())
         return;
 
+    ResourceRequest resourceRequest(m_frame.loader().icon().url());
+    resourceRequest.setPriority(ResourceLoadPriority::Low);
+
     // ContentSecurityPolicyImposition::DoPolicyCheck is a placeholder value. It does not affect the request since Content Security Policy does not apply to raw resources.
-    CachedResourceRequest request(ResourceRequest(m_frame.loader().icon().url()), ResourceLoaderOptions(SendCallbacks, SniffContent, BufferData, DoNotAllowStoredCredentials, ClientCredentialPolicy::CannotAskClientForCredentials, FetchOptions::Credentials::Omit, DoSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, CachingPolicy::AllowCaching));
+    CachedResourceRequest request(WTFMove(resourceRequest), ResourceLoaderOptions(SendCallbacks, SniffContent, BufferData, DoNotAllowStoredCredentials, ClientCredentialPolicy::CannotAskClientForCredentials, FetchOptions::Credentials::Omit, DoSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, CachingPolicy::AllowCaching));
 
-    request.mutableResourceRequest().setPriority(ResourceLoadPriority::Low);
     request.setInitiator(cachedResourceRequestInitiators().icon);
 
     m_resource = m_frame.document()->cachedResourceLoader().requestRawResource(WTFMove(request));

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp (207280 => 207281)


--- trunk/Source/WebCore/platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/cf/WebCoreAVCFResourceLoader.cpp	2016-10-13 10:34:15 UTC (rev 207281)
@@ -70,10 +70,12 @@
 
     RetainPtr<CFURLRequestRef> urlRequest = AVCFAssetResourceLoadingRequestGetURLRequest(m_avRequest.get());
 
+    ResourceRequest resourceRequest(urlRequest.get());
+    resourceRequest.setPriority(ResourceLoadPriority::Low);
+
     // ContentSecurityPolicyImposition::DoPolicyCheck is a placeholder value. It does not affect the request since Content Security Policy does not apply to raw resources.
-    CachedResourceRequest request(ResourceRequest(urlRequest.get()), ResourceLoaderOptions(SendCallbacks, DoNotSniffContent, BufferData, DoNotAllowStoredCredentials, ClientCredentialPolicy::CannotAskClientForCredentials, FetchOptions::Credentials::Omit, DoSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, CachingPolicy::DisallowCaching));
+    CachedResourceRequest request(WTFMove(resourceRequest), ResourceLoaderOptions(SendCallbacks, DoNotSniffContent, BufferData, DoNotAllowStoredCredentials, ClientCredentialPolicy::CannotAskClientForCredentials, FetchOptions::Credentials::Omit, DoSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, CachingPolicy::DisallowCaching));
 
-    request.mutableResourceRequest().setPriority(ResourceLoadPriority::Low);
     CachedResourceLoader* loader = m_parent->player()->cachedResourceLoader();
     m_resource = loader ? loader->requestRawResource(WTFMove(request)) : 0;
     if (m_resource)

Modified: trunk/Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm (207280 => 207281)


--- trunk/Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm	2016-10-13 09:22:38 UTC (rev 207280)
+++ trunk/Source/WebCore/platform/graphics/avfoundation/objc/WebCoreAVFResourceLoader.mm	2016-10-13 10:34:15 UTC (rev 207281)
@@ -67,10 +67,12 @@
 
     NSURLRequest *nsRequest = [m_avRequest.get() request];
 
+    ResourceRequest resourceRequest(nsRequest);
+    resourceRequest.setPriority(ResourceLoadPriority::Low);
+
     // FIXME: Skip Content Security Policy check if the element that inititated this request
     // is in a user-agent shadow tree. See <https://bugs.webkit.org/show_bug.cgi?id=155505>.
-    CachedResourceRequest request(nsRequest, ResourceLoaderOptions(SendCallbacks, DoNotSniffContent, BufferData, DoNotAllowStoredCredentials, ClientCredentialPolicy::CannotAskClientForCredentials, FetchOptions::Credentials::Omit, DoSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, CachingPolicy::DisallowCaching));
-    request.mutableResourceRequest().setPriority(ResourceLoadPriority::Low);
+    CachedResourceRequest request(WTFMove(resourceRequest), ResourceLoaderOptions(SendCallbacks, DoNotSniffContent, BufferData, DoNotAllowStoredCredentials, ClientCredentialPolicy::CannotAskClientForCredentials, FetchOptions::Credentials::Omit, DoSecurityCheck, FetchOptions::Mode::NoCors, DoNotIncludeCertificateInfo, ContentSecurityPolicyImposition::DoPolicyCheck, DefersLoadingPolicy::AllowDefersLoading, CachingPolicy::DisallowCaching));
     if (auto* loader = m_parent->player()->cachedResourceLoader())
         m_resource = loader->requestMedia(WTFMove(request));
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to