| OLD | NEW |
| 1 /* | 1 /* |
| 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) | 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) |
| 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) | 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) |
| 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) | 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) |
| 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. | 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. |
| 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ | 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ |
| 7 | 7 |
| 8 This library is free software; you can redistribute it and/or | 8 This library is free software; you can redistribute it and/or |
| 9 modify it under the terms of the GNU Library General Public | 9 modify it under the terms of the GNU Library General Public |
| 10 License as published by the Free Software Foundation; either | 10 License as published by the Free Software Foundation; either |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 | 101 |
| 102 static ResourceLoadPriority typeToPriority(Resource::Type type) | 102 static ResourceLoadPriority typeToPriority(Resource::Type type) |
| 103 { | 103 { |
| 104 switch (type) { | 104 switch (type) { |
| 105 case Resource::MainResource: | 105 case Resource::MainResource: |
| 106 case Resource::CSSStyleSheet: | 106 case Resource::CSSStyleSheet: |
| 107 case Resource::Font: | 107 case Resource::Font: |
| 108 // Also parser-blocking scripts (set explicitly in loadPriority) | 108 // Also parser-blocking scripts (set explicitly in loadPriority) |
| 109 return ResourceLoadPriorityVeryHigh; | 109 return ResourceLoadPriorityVeryHigh; |
| 110 case Resource::XSLStyleSheet: | 110 case Resource::XSLStyleSheet: |
| 111 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); | 111 DCHECK(RuntimeEnabledFeatures::xsltEnabled()); |
| 112 case Resource::Raw: | 112 case Resource::Raw: |
| 113 case Resource::ImportResource: | 113 case Resource::ImportResource: |
| 114 case Resource::Script: | 114 case Resource::Script: |
| 115 // Also visible resources/images (set explicitly in loadPriority) | 115 // Also visible resources/images (set explicitly in loadPriority) |
| 116 return ResourceLoadPriorityHigh; | 116 return ResourceLoadPriorityHigh; |
| 117 case Resource::Manifest: | 117 case Resource::Manifest: |
| 118 // Also late-body scripts discovered by the preload scanner (set explici
tly in loadPriority) | 118 // Also late-body scripts discovered by the preload scanner (set explici
tly in loadPriority) |
| 119 return ResourceLoadPriorityMedium; | 119 return ResourceLoadPriorityMedium; |
| 120 case Resource::Image: | 120 case Resource::Image: |
| 121 case Resource::TextTrack: | 121 case Resource::TextTrack: |
| 122 case Resource::Media: | 122 case Resource::Media: |
| 123 case Resource::SVGDocument: | 123 case Resource::SVGDocument: |
| 124 // Also async scripts (set explicitly in loadPriority) | 124 // Also async scripts (set explicitly in loadPriority) |
| 125 return ResourceLoadPriorityLow; | 125 return ResourceLoadPriorityLow; |
| 126 case Resource::LinkPrefetch: | 126 case Resource::LinkPrefetch: |
| 127 return ResourceLoadPriorityVeryLow; | 127 return ResourceLoadPriorityVeryLow; |
| 128 } | 128 } |
| 129 | 129 |
| 130 ASSERT_NOT_REACHED(); | 130 NOTREACHED(); |
| 131 return ResourceLoadPriorityUnresolved; | 131 return ResourceLoadPriorityUnresolved; |
| 132 } | 132 } |
| 133 | 133 |
| 134 ResourceLoadPriority ResourceFetcher::computeLoadPriority(Resource::Type type, c
onst FetchRequest& request, ResourcePriority::VisibilityStatus visibility) | 134 ResourceLoadPriority ResourceFetcher::computeLoadPriority(Resource::Type type, c
onst FetchRequest& request, ResourcePriority::VisibilityStatus visibility) |
| 135 { | 135 { |
| 136 ResourceLoadPriority priority = typeToPriority(type); | 136 ResourceLoadPriority priority = typeToPriority(type); |
| 137 | 137 |
| 138 // Visible resources (images in practice) get a boost to High priority. | 138 // Visible resources (images in practice) get a boost to High priority. |
| 139 if (visibility == ResourcePriority::Visible) | 139 if (visibility == ResourcePriority::Visible) |
| 140 priority = ResourceLoadPriorityHigh; | 140 priority = ResourceLoadPriorityHigh; |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 | 174 |
| 175 static WebURLRequest::RequestContext requestContextFromType(bool isMainFrame, Re
source::Type type) | 175 static WebURLRequest::RequestContext requestContextFromType(bool isMainFrame, Re
source::Type type) |
| 176 { | 176 { |
| 177 switch (type) { | 177 switch (type) { |
| 178 case Resource::MainResource: | 178 case Resource::MainResource: |
| 179 if (!isMainFrame) | 179 if (!isMainFrame) |
| 180 return WebURLRequest::RequestContextIframe; | 180 return WebURLRequest::RequestContextIframe; |
| 181 // FIXME: Change this to a context frame type (once we introduce them):
http://fetch.spec.whatwg.org/#concept-request-context-frame-type | 181 // FIXME: Change this to a context frame type (once we introduce them):
http://fetch.spec.whatwg.org/#concept-request-context-frame-type |
| 182 return WebURLRequest::RequestContextHyperlink; | 182 return WebURLRequest::RequestContextHyperlink; |
| 183 case Resource::XSLStyleSheet: | 183 case Resource::XSLStyleSheet: |
| 184 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); | 184 DCHECK(RuntimeEnabledFeatures::xsltEnabled()); |
| 185 case Resource::CSSStyleSheet: | 185 case Resource::CSSStyleSheet: |
| 186 return WebURLRequest::RequestContextStyle; | 186 return WebURLRequest::RequestContextStyle; |
| 187 case Resource::Script: | 187 case Resource::Script: |
| 188 return WebURLRequest::RequestContextScript; | 188 return WebURLRequest::RequestContextScript; |
| 189 case Resource::Font: | 189 case Resource::Font: |
| 190 return WebURLRequest::RequestContextFont; | 190 return WebURLRequest::RequestContextFont; |
| 191 case Resource::Image: | 191 case Resource::Image: |
| 192 return WebURLRequest::RequestContextImage; | 192 return WebURLRequest::RequestContextImage; |
| 193 case Resource::Raw: | 193 case Resource::Raw: |
| 194 return WebURLRequest::RequestContextSubresource; | 194 return WebURLRequest::RequestContextSubresource; |
| 195 case Resource::ImportResource: | 195 case Resource::ImportResource: |
| 196 return WebURLRequest::RequestContextImport; | 196 return WebURLRequest::RequestContextImport; |
| 197 case Resource::LinkPrefetch: | 197 case Resource::LinkPrefetch: |
| 198 return WebURLRequest::RequestContextPrefetch; | 198 return WebURLRequest::RequestContextPrefetch; |
| 199 case Resource::TextTrack: | 199 case Resource::TextTrack: |
| 200 return WebURLRequest::RequestContextTrack; | 200 return WebURLRequest::RequestContextTrack; |
| 201 case Resource::SVGDocument: | 201 case Resource::SVGDocument: |
| 202 return WebURLRequest::RequestContextImage; | 202 return WebURLRequest::RequestContextImage; |
| 203 case Resource::Media: // TODO: Split this. | 203 case Resource::Media: // TODO: Split this. |
| 204 return WebURLRequest::RequestContextVideo; | 204 return WebURLRequest::RequestContextVideo; |
| 205 case Resource::Manifest: | 205 case Resource::Manifest: |
| 206 return WebURLRequest::RequestContextManifest; | 206 return WebURLRequest::RequestContextManifest; |
| 207 } | 207 } |
| 208 ASSERT_NOT_REACHED(); | 208 NOTREACHED(); |
| 209 return WebURLRequest::RequestContextSubresource; | 209 return WebURLRequest::RequestContextSubresource; |
| 210 } | 210 } |
| 211 | 211 |
| 212 ResourceFetcher::ResourceFetcher(FetchContext* newContext) | 212 ResourceFetcher::ResourceFetcher(FetchContext* newContext) |
| 213 : m_context(newContext) | 213 : m_context(newContext) |
| 214 , m_archive(context().isMainFrame() ? nullptr : context().archive()) | 214 , m_archive(context().isMainFrame() ? nullptr : context().archive()) |
| 215 , m_resourceTimingReportTimer(this, &ResourceFetcher::resourceTimingReportTi
merFired) | 215 , m_resourceTimingReportTimer(this, &ResourceFetcher::resourceTimingReportTi
merFired) |
| 216 , m_autoLoadImages(true) | 216 , m_autoLoadImages(true) |
| 217 , m_imagesEnabled(true) | 217 , m_imagesEnabled(true) |
| 218 , m_allowStaleResources(false) | 218 , m_allowStaleResources(false) |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 static std::unique_ptr<TracedValue> urlForTraceEvent(const KURL& url) | 307 static std::unique_ptr<TracedValue> urlForTraceEvent(const KURL& url) |
| 308 { | 308 { |
| 309 std::unique_ptr<TracedValue> value = TracedValue::create(); | 309 std::unique_ptr<TracedValue> value = TracedValue::create(); |
| 310 value->setString("url", url.getString()); | 310 value->setString("url", url.getString()); |
| 311 return value; | 311 return value; |
| 312 } | 312 } |
| 313 | 313 |
| 314 Resource* ResourceFetcher::resourceForStaticData(const FetchRequest& request, co
nst ResourceFactory& factory, const SubstituteData& substituteData) | 314 Resource* ResourceFetcher::resourceForStaticData(const FetchRequest& request, co
nst ResourceFactory& factory, const SubstituteData& substituteData) |
| 315 { | 315 { |
| 316 const KURL& url = request.resourceRequest().url(); | 316 const KURL& url = request.resourceRequest().url(); |
| 317 ASSERT(url.protocolIsData() || substituteData.isValid() || m_archive); | 317 DCHECK(url.protocolIsData() || substituteData.isValid() || m_archive); |
| 318 | 318 |
| 319 // TODO(japhet): We only send main resource data: urls through WebURLLoader
for the benefit of | 319 // TODO(japhet): We only send main resource data: urls through WebURLLoader
for the benefit of |
| 320 // a service worker test (RenderViewImplTest.ServiceWorkerNetworkProviderSet
up), which is at a | 320 // a service worker test (RenderViewImplTest.ServiceWorkerNetworkProviderSet
up), which is at a |
| 321 // layer where it isn't easy to mock out a network load. It uses data: urls
to emulate the | 321 // layer where it isn't easy to mock out a network load. It uses data: urls
to emulate the |
| 322 // behavior it wants to test, which would otherwise be reserved for network
loads. | 322 // behavior it wants to test, which would otherwise be reserved for network
loads. |
| 323 if (!m_archive && !substituteData.isValid() && (factory.type() == Resource::
MainResource || factory.type() == Resource::Raw)) | 323 if (!m_archive && !substituteData.isValid() && (factory.type() == Resource::
MainResource || factory.type() == Resource::Raw)) |
| 324 return nullptr; | 324 return nullptr; |
| 325 | 325 |
| 326 const String cacheIdentifier = getCacheIdentifier(); | 326 const String cacheIdentifier = getCacheIdentifier(); |
| 327 if (Resource* oldResource = memoryCache()->resourceForURL(url, cacheIdentifi
er)) { | 327 if (Resource* oldResource = memoryCache()->resourceForURL(url, cacheIdentifi
er)) { |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 // would be dead if MemoryCache holds weak references to Resource). | 397 // would be dead if MemoryCache holds weak references to Resource). |
| 398 // Currently we check references to Resource from ResourceClient and | 398 // Currently we check references to Resource from ResourceClient and |
| 399 // |m_preloads| only, because they are major sources of references. | 399 // |m_preloads| only, because they are major sources of references. |
| 400 if (resource && !resource->isAlive() && (!m_preloads || !m_preloads->contain
s(resource))) { | 400 if (resource && !resource->isAlive() && (!m_preloads || !m_preloads->contain
s(resource))) { |
| 401 DEFINE_RESOURCE_HISTOGRAM("Dead."); | 401 DEFINE_RESOURCE_HISTOGRAM("Dead."); |
| 402 } | 402 } |
| 403 } | 403 } |
| 404 | 404 |
| 405 Resource* ResourceFetcher::requestResource(FetchRequest& request, const Resource
Factory& factory, const SubstituteData& substituteData) | 405 Resource* ResourceFetcher::requestResource(FetchRequest& request, const Resource
Factory& factory, const SubstituteData& substituteData) |
| 406 { | 406 { |
| 407 ASSERT(request.options().synchronousPolicy == RequestAsynchronously || facto
ry.type() == Resource::Raw || factory.type() == Resource::XSLStyleSheet); | 407 DCHECK(request.options().synchronousPolicy == RequestAsynchronously || facto
ry.type() == Resource::Raw || factory.type() == Resource::XSLStyleSheet); |
| 408 | 408 |
| 409 context().populateRequestData(request.mutableResourceRequest()); | 409 context().populateRequestData(request.mutableResourceRequest()); |
| 410 if (request.resourceRequest().httpHeaderField("Upgrade-Insecure-Requests") !
= AtomicString("1")) | 410 if (request.resourceRequest().httpHeaderField("Upgrade-Insecure-Requests") !
= AtomicString("1")) |
| 411 context().upgradeInsecureRequest(request.mutableResourceRequest()); | 411 context().upgradeInsecureRequest(request.mutableResourceRequest()); |
| 412 context().addClientHintsIfNecessary(request); | 412 context().addClientHintsIfNecessary(request); |
| 413 context().addCSPHeaderIfNecessary(factory.type(), request); | 413 context().addCSPHeaderIfNecessary(factory.type(), request); |
| 414 | 414 |
| 415 TRACE_EVENT1("blink", "ResourceFetcher::requestResource", "url", urlForTrace
Event(request.url())); | 415 TRACE_EVENT1("blink", "ResourceFetcher::requestResource", "url", urlForTrace
Event(request.url())); |
| 416 | 416 |
| 417 if (!request.url().isValid()) | 417 if (!request.url().isValid()) |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 initializeRevalidation(request.mutableResourceRequest(), resource); | 474 initializeRevalidation(request.mutableResourceRequest(), resource); |
| 475 break; | 475 break; |
| 476 case Use: | 476 case Use: |
| 477 memoryCache()->updateForAccess(resource); | 477 memoryCache()->updateForAccess(resource); |
| 478 break; | 478 break; |
| 479 } | 479 } |
| 480 | 480 |
| 481 if (!resource) | 481 if (!resource) |
| 482 return nullptr; | 482 return nullptr; |
| 483 if (resource->getType() != factory.type()) { | 483 if (resource->getType() != factory.type()) { |
| 484 ASSERT(request.forPreload()); | 484 DCHECK(request.forPreload()); |
| 485 return nullptr; | 485 return nullptr; |
| 486 } | 486 } |
| 487 | 487 |
| 488 if (!resource->isAlive()) | 488 if (!resource->isAlive()) |
| 489 m_deadStatsRecorder.update(policy); | 489 m_deadStatsRecorder.update(policy); |
| 490 | 490 |
| 491 if (policy != Use) | 491 if (policy != Use) |
| 492 resource->setIdentifier(identifier); | 492 resource->setIdentifier(identifier); |
| 493 | 493 |
| 494 if (!request.forPreload() || policy != Use) { | 494 if (!request.forPreload() || policy != Use) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 508 | 508 |
| 509 // Returns with an existing resource if the resource does not need to start | 509 // Returns with an existing resource if the resource does not need to start |
| 510 // loading immediately. | 510 // loading immediately. |
| 511 // If revalidation policy was determined as |Revalidate|, the resource was | 511 // If revalidation policy was determined as |Revalidate|, the resource was |
| 512 // already initialized for the revalidation here, but won't start loading. | 512 // already initialized for the revalidation here, but won't start loading. |
| 513 if (!resourceNeedsLoad(resource, request, policy)) | 513 if (!resourceNeedsLoad(resource, request, policy)) |
| 514 return resource; | 514 return resource; |
| 515 | 515 |
| 516 if (!startLoad(resource)) | 516 if (!startLoad(resource)) |
| 517 return nullptr; | 517 return nullptr; |
| 518 ASSERT(!resource->errorOccurred() || request.options().synchronousPolicy ==
RequestSynchronously); | 518 DCHECK(!resource->errorOccurred() || request.options().synchronousPolicy ==
RequestSynchronously); |
| 519 return resource; | 519 return resource; |
| 520 } | 520 } |
| 521 | 521 |
| 522 void ResourceFetcher::resourceTimingReportTimerFired(TimerBase* timer) | 522 void ResourceFetcher::resourceTimingReportTimerFired(TimerBase* timer) |
| 523 { | 523 { |
| 524 ASSERT_UNUSED(timer, timer == &m_resourceTimingReportTimer); | 524 DCHECK_EQ(timer, &m_resourceTimingReportTimer); |
| 525 Vector<std::unique_ptr<ResourceTimingInfo>> timingReports; | 525 Vector<std::unique_ptr<ResourceTimingInfo>> timingReports; |
| 526 timingReports.swap(m_scheduledResourceTimingReports); | 526 timingReports.swap(m_scheduledResourceTimingReports); |
| 527 for (const auto& timingInfo : timingReports) | 527 for (const auto& timingInfo : timingReports) |
| 528 context().addResourceTiming(*timingInfo); | 528 context().addResourceTiming(*timingInfo); |
| 529 } | 529 } |
| 530 | 530 |
| 531 void ResourceFetcher::determineRequestContext(ResourceRequest& request, Resource
::Type type, bool isMainFrame) | 531 void ResourceFetcher::determineRequestContext(ResourceRequest& request, Resource
::Type type, bool isMainFrame) |
| 532 { | 532 { |
| 533 WebURLRequest::RequestContext requestContext = requestContextFromType(isMain
Frame, type); | 533 WebURLRequest::RequestContext requestContext = requestContextFromType(isMain
Frame, type); |
| 534 request.setRequestContext(requestContext); | 534 request.setRequestContext(requestContext); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 546 if (request.requestContext() == WebURLRequest::RequestContextUnspecified) | 546 if (request.requestContext() == WebURLRequest::RequestContextUnspecified) |
| 547 determineRequestContext(request, type); | 547 determineRequestContext(request, type); |
| 548 if (type == Resource::LinkPrefetch) | 548 if (type == Resource::LinkPrefetch) |
| 549 request.setHTTPHeaderField(HTTPNames::Purpose, "prefetch"); | 549 request.setHTTPHeaderField(HTTPNames::Purpose, "prefetch"); |
| 550 | 550 |
| 551 context().addAdditionalRequestHeaders(request, (type == Resource::MainResour
ce) ? FetchMainResource : FetchSubresource); | 551 context().addAdditionalRequestHeaders(request, (type == Resource::MainResour
ce) ? FetchMainResource : FetchSubresource); |
| 552 } | 552 } |
| 553 | 553 |
| 554 void ResourceFetcher::initializeRevalidation(ResourceRequest& revalidatingReques
t, Resource* resource) | 554 void ResourceFetcher::initializeRevalidation(ResourceRequest& revalidatingReques
t, Resource* resource) |
| 555 { | 555 { |
| 556 ASSERT(resource); | 556 DCHECK(resource); |
| 557 ASSERT(memoryCache()->contains(resource)); | 557 DCHECK(memoryCache()->contains(resource)); |
| 558 ASSERT(resource->isLoaded()); | 558 DCHECK(resource->isLoaded()); |
| 559 ASSERT(resource->canUseCacheValidator()); | 559 DCHECK(resource->canUseCacheValidator()); |
| 560 ASSERT(!resource->isCacheValidator()); | 560 DCHECK(!resource->isCacheValidator()); |
| 561 ASSERT(!context().isControlledByServiceWorker()); | 561 DCHECK(!context().isControlledByServiceWorker()); |
| 562 | 562 |
| 563 const AtomicString& lastModified = resource->response().httpHeaderField(HTTP
Names::Last_Modified); | 563 const AtomicString& lastModified = resource->response().httpHeaderField(HTTP
Names::Last_Modified); |
| 564 const AtomicString& eTag = resource->response().httpHeaderField(HTTPNames::E
Tag); | 564 const AtomicString& eTag = resource->response().httpHeaderField(HTTPNames::E
Tag); |
| 565 if (!lastModified.isEmpty() || !eTag.isEmpty()) { | 565 if (!lastModified.isEmpty() || !eTag.isEmpty()) { |
| 566 ASSERT(context().getCachePolicy() != CachePolicyReload); | 566 DCHECK_NE(context().getCachePolicy(), CachePolicyReload); |
| 567 if (context().getCachePolicy() == CachePolicyRevalidate) | 567 if (context().getCachePolicy() == CachePolicyRevalidate) |
| 568 revalidatingRequest.setHTTPHeaderField(HTTPNames::Cache_Control, "ma
x-age=0"); | 568 revalidatingRequest.setHTTPHeaderField(HTTPNames::Cache_Control, "ma
x-age=0"); |
| 569 } | 569 } |
| 570 if (!lastModified.isEmpty()) | 570 if (!lastModified.isEmpty()) |
| 571 revalidatingRequest.setHTTPHeaderField(HTTPNames::If_Modified_Since, las
tModified); | 571 revalidatingRequest.setHTTPHeaderField(HTTPNames::If_Modified_Since, las
tModified); |
| 572 if (!eTag.isEmpty()) | 572 if (!eTag.isEmpty()) |
| 573 revalidatingRequest.setHTTPHeaderField(HTTPNames::If_None_Match, eTag); | 573 revalidatingRequest.setHTTPHeaderField(HTTPNames::If_None_Match, eTag); |
| 574 | 574 |
| 575 double stalenessLifetime = resource->stalenessLifetime(); | 575 double stalenessLifetime = resource->stalenessLifetime(); |
| 576 if (std::isfinite(stalenessLifetime) && stalenessLifetime > 0) { | 576 if (std::isfinite(stalenessLifetime) && stalenessLifetime > 0) { |
| 577 revalidatingRequest.setHTTPHeaderField(HTTPNames::Resource_Freshness, At
omicString(String::format("max-age=%.0lf,stale-while-revalidate=%.0lf,age=%.0lf"
, resource->freshnessLifetime(), stalenessLifetime, resource->currentAge()))); | 577 revalidatingRequest.setHTTPHeaderField(HTTPNames::Resource_Freshness, At
omicString(String::format("max-age=%.0lf,stale-while-revalidate=%.0lf,age=%.0lf"
, resource->freshnessLifetime(), stalenessLifetime, resource->currentAge()))); |
| 578 } | 578 } |
| 579 | 579 |
| 580 resource->setRevalidatingRequest(revalidatingRequest); | 580 resource->setRevalidatingRequest(revalidatingRequest); |
| 581 } | 581 } |
| 582 | 582 |
| 583 Resource* ResourceFetcher::createResourceForLoading(FetchRequest& request, const
String& charset, const ResourceFactory& factory) | 583 Resource* ResourceFetcher::createResourceForLoading(FetchRequest& request, const
String& charset, const ResourceFactory& factory) |
| 584 { | 584 { |
| 585 const String cacheIdentifier = getCacheIdentifier(); | 585 const String cacheIdentifier = getCacheIdentifier(); |
| 586 ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url(), cache
Identifier)); | 586 DCHECK(!memoryCache()->resourceForURL(request.resourceRequest().url(), cache
Identifier)); |
| 587 | 587 |
| 588 RESOURCE_LOADING_DVLOG(1) << "Loading Resource for " << request.resourceRequ
est().url().elidedString(); | 588 RESOURCE_LOADING_DVLOG(1) << "Loading Resource for " << request.resourceRequ
est().url().elidedString(); |
| 589 | 589 |
| 590 Resource* resource = factory.create(request.resourceRequest(), request.optio
ns(), charset); | 590 Resource* resource = factory.create(request.resourceRequest(), request.optio
ns(), charset); |
| 591 resource->setLinkPreload(request.isLinkPreload()); | 591 resource->setLinkPreload(request.isLinkPreload()); |
| 592 if (request.forPreload()) { | 592 if (request.forPreload()) { |
| 593 resource->setPreloadDiscoveryTime(request.preloadDiscoveryTime()); | 593 resource->setPreloadDiscoveryTime(request.preloadDiscoveryTime()); |
| 594 } | 594 } |
| 595 resource->setCacheIdentifier(cacheIdentifier); | 595 resource->setCacheIdentifier(cacheIdentifier); |
| 596 | 596 |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1044 return true; | 1044 return true; |
| 1045 } | 1045 } |
| 1046 | 1046 |
| 1047 void ResourceFetcher::removeResourceLoader(ResourceLoader* loader) | 1047 void ResourceFetcher::removeResourceLoader(ResourceLoader* loader) |
| 1048 { | 1048 { |
| 1049 if (m_loaders.contains(loader)) | 1049 if (m_loaders.contains(loader)) |
| 1050 m_loaders.remove(loader); | 1050 m_loaders.remove(loader); |
| 1051 else if (m_nonBlockingLoaders.contains(loader)) | 1051 else if (m_nonBlockingLoaders.contains(loader)) |
| 1052 m_nonBlockingLoaders.remove(loader); | 1052 m_nonBlockingLoaders.remove(loader); |
| 1053 else | 1053 else |
| 1054 ASSERT_NOT_REACHED(); | 1054 NOTREACHED(); |
| 1055 } | 1055 } |
| 1056 | 1056 |
| 1057 void ResourceFetcher::stopFetching() | 1057 void ResourceFetcher::stopFetching() |
| 1058 { | 1058 { |
| 1059 HeapVector<Member<ResourceLoader>> loadersToCancel; | 1059 HeapVector<Member<ResourceLoader>> loadersToCancel; |
| 1060 for (const auto& loader : m_nonBlockingLoaders) | 1060 for (const auto& loader : m_nonBlockingLoaders) |
| 1061 loadersToCancel.append(loader); | 1061 loadersToCancel.append(loader); |
| 1062 for (const auto& loader : m_loaders) | 1062 for (const auto& loader : m_loaders) |
| 1063 loadersToCancel.append(loader); | 1063 loadersToCancel.append(loader); |
| 1064 | 1064 |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1209 break; | 1209 break; |
| 1210 case Resource::ImportResource: | 1210 case Resource::ImportResource: |
| 1211 imports++; | 1211 imports++; |
| 1212 importMisses += missCount; | 1212 importMisses += missCount; |
| 1213 break; | 1213 break; |
| 1214 case Resource::Raw: | 1214 case Resource::Raw: |
| 1215 raws++; | 1215 raws++; |
| 1216 rawMisses += missCount; | 1216 rawMisses += missCount; |
| 1217 break; | 1217 break; |
| 1218 default: | 1218 default: |
| 1219 ASSERT_NOT_REACHED(); | 1219 NOTREACHED(); |
| 1220 } | 1220 } |
| 1221 } | 1221 } |
| 1222 // TODO(csharrison): These can falsely attribute link rel="preload" requests | 1222 // TODO(csharrison): These can falsely attribute link rel="preload" requests |
| 1223 // as misses if they are referenced after parsing completes. Migrate this | 1223 // as misses if they are referenced after parsing completes. Migrate this |
| 1224 // logic to the memory cache / individual resources to prevent this. | 1224 // logic to the memory cache / individual resources to prevent this. |
| 1225 DEFINE_STATIC_LOCAL(CustomCountHistogram, imagePreloads, ("PreloadScanner.Co
unts2.Image", 0, 100, 25)); | 1225 DEFINE_STATIC_LOCAL(CustomCountHistogram, imagePreloads, ("PreloadScanner.Co
unts2.Image", 0, 100, 25)); |
| 1226 DEFINE_STATIC_LOCAL(CustomCountHistogram, imagePreloadMisses, ("PreloadScann
er.Counts2.Miss.Image", 0, 100, 25)); | 1226 DEFINE_STATIC_LOCAL(CustomCountHistogram, imagePreloadMisses, ("PreloadScann
er.Counts2.Miss.Image", 0, 100, 25)); |
| 1227 DEFINE_STATIC_LOCAL(CustomCountHistogram, scriptPreloads, ("PreloadScanner.C
ounts2.Script", 0, 100, 25)); | 1227 DEFINE_STATIC_LOCAL(CustomCountHistogram, scriptPreloads, ("PreloadScanner.C
ounts2.Script", 0, 100, 25)); |
| 1228 DEFINE_STATIC_LOCAL(CustomCountHistogram, scriptPreloadMisses, ("PreloadScan
ner.Counts2.Miss.Script", 0, 100, 25)); | 1228 DEFINE_STATIC_LOCAL(CustomCountHistogram, scriptPreloadMisses, ("PreloadScan
ner.Counts2.Miss.Script", 0, 100, 25)); |
| 1229 DEFINE_STATIC_LOCAL(CustomCountHistogram, stylesheetPreloads, ("PreloadScann
er.Counts2.CSSStyleSheet", 0, 100, 25)); | 1229 DEFINE_STATIC_LOCAL(CustomCountHistogram, stylesheetPreloads, ("PreloadScann
er.Counts2.CSSStyleSheet", 0, 100, 25)); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1323 visitor->trace(m_context); | 1323 visitor->trace(m_context); |
| 1324 visitor->trace(m_archive); | 1324 visitor->trace(m_archive); |
| 1325 visitor->trace(m_loaders); | 1325 visitor->trace(m_loaders); |
| 1326 visitor->trace(m_nonBlockingLoaders); | 1326 visitor->trace(m_nonBlockingLoaders); |
| 1327 visitor->trace(m_documentResources); | 1327 visitor->trace(m_documentResources); |
| 1328 visitor->trace(m_preloads); | 1328 visitor->trace(m_preloads); |
| 1329 visitor->trace(m_resourceTimingInfoMap); | 1329 visitor->trace(m_resourceTimingInfoMap); |
| 1330 } | 1330 } |
| 1331 | 1331 |
| 1332 } // namespace blink | 1332 } // namespace blink |
| OLD | NEW |