Chromium Code Reviews| 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 | 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All |
| 6 rights reserved. | 6 rights reserved. |
| 7 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ | 7 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ |
| 8 | 8 |
| 9 This library is free software; you can redistribute it and/or | 9 This library is free software; you can redistribute it and/or |
| 10 modify it under the terms of the GNU Library General Public | 10 modify it under the terms of the GNU Library General Public |
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 446 // Aims to count Resource only referenced from MemoryCache (i.e. what would be | 446 // Aims to count Resource only referenced from MemoryCache (i.e. what would be |
| 447 // dead if MemoryCache holds weak references to Resource). Currently we check | 447 // dead if MemoryCache holds weak references to Resource). Currently we check |
| 448 // references to Resource from ResourceClient and |m_preloads| only, because | 448 // references to Resource from ResourceClient and |m_preloads| only, because |
| 449 // they are major sources of references. | 449 // they are major sources of references. |
| 450 if (resource && !resource->isAlive() && | 450 if (resource && !resource->isAlive() && |
| 451 (!m_preloads || !m_preloads->contains(resource))) { | 451 (!m_preloads || !m_preloads->contains(resource))) { |
| 452 DEFINE_RESOURCE_HISTOGRAM("Dead."); | 452 DEFINE_RESOURCE_HISTOGRAM("Dead."); |
| 453 } | 453 } |
| 454 } | 454 } |
| 455 | 455 |
| 456 Resource* ResourceFetcher::requestResource( | 456 Resource* ResourceFetcher::prepareRequest(FetchRequest& request, |
| 457 FetchRequest& request, | 457 const ResourceFactory& factory, |
| 458 const ResourceFactory& factory, | 458 const SubstituteData& substituteData, |
| 459 const SubstituteData& substituteData) { | 459 unsigned long identifier, |
| 460 bool& isStaticData, | |
| 461 bool& shouldContinue) { | |
| 460 ResourceRequest& resourceRequest = request.mutableResourceRequest(); | 462 ResourceRequest& resourceRequest = request.mutableResourceRequest(); |
| 461 | 463 |
| 462 unsigned long identifier = createUniqueIdentifier(); | |
| 463 network_instrumentation::ScopedResourceLoadTracker scopedResourceLoadTracker( | |
| 464 identifier, resourceRequest); | |
| 465 SCOPED_BLINK_UMA_HISTOGRAM_TIMER("Blink.Fetch.RequestResourceTime"); | |
| 466 DCHECK(request.options().synchronousPolicy == RequestAsynchronously || | 464 DCHECK(request.options().synchronousPolicy == RequestAsynchronously || |
| 467 factory.type() == Resource::Raw || | 465 factory.type() == Resource::Raw || |
| 468 factory.type() == Resource::XSLStyleSheet); | 466 factory.type() == Resource::XSLStyleSheet); |
| 469 | 467 |
| 470 context().populateResourceRequest( | 468 context().populateResourceRequest( |
| 471 factory.type(), request.clientHintsPreferences(), | 469 factory.type(), request.clientHintsPreferences(), |
| 472 request.getResourceWidth(), resourceRequest); | 470 request.getResourceWidth(), resourceRequest); |
| 473 | 471 |
| 474 // TODO(dproy): Remove this. http://crbug.com/659666 | 472 // TODO(dproy): Remove this. http://crbug.com/659666 |
| 475 TRACE_EVENT1("blink", "ResourceFetcher::requestResource", "url", | 473 TRACE_EVENT1("blink", "ResourceFetcher::requestResource", "url", |
|
Charlie Harrison
2017/01/30 22:02:58
This changes behavior, as trace events are scoped
| |
| 476 urlForTraceEvent(request.url())); | 474 urlForTraceEvent(request.url())); |
| 477 | 475 |
| 478 if (!request.url().isValid()) | 476 if (!request.url().isValid()) |
| 479 return nullptr; | 477 return nullptr; |
| 480 | 478 |
| 481 resourceRequest.setPriority(computeLoadPriority( | 479 resourceRequest.setPriority(computeLoadPriority( |
| 482 factory.type(), request.resourceRequest(), ResourcePriority::NotVisible, | 480 factory.type(), request.resourceRequest(), ResourcePriority::NotVisible, |
| 483 request.defer(), request.forPreload())); | 481 request.defer(), request.forPreload())); |
| 484 initializeResourceRequest(resourceRequest, factory.type(), request.defer()); | 482 initializeResourceRequest(resourceRequest, factory.type(), request.defer()); |
| 485 network_instrumentation::resourcePrioritySet(identifier, | 483 network_instrumentation::resourcePrioritySet(identifier, |
| 486 resourceRequest.priority()); | 484 resourceRequest.priority()); |
| 487 | 485 |
| 488 ResourceRequestBlockedReason blockedReason = context().canRequest( | 486 ResourceRequestBlockedReason blockedReason = context().canRequest( |
| 489 factory.type(), resourceRequest, | 487 factory.type(), resourceRequest, |
| 490 MemoryCache::removeFragmentIdentifierIfNeeded(request.url()), | 488 MemoryCache::removeFragmentIdentifierIfNeeded(request.url()), |
| 491 request.options(), request.forPreload(), request.getOriginRestriction()); | 489 request.options(), request.forPreload(), request.getOriginRestriction()); |
| 490 Resource* resource = nullptr; | |
| 492 if (blockedReason != ResourceRequestBlockedReason::None) { | 491 if (blockedReason != ResourceRequestBlockedReason::None) { |
| 493 DCHECK(!substituteData.forceSynchronousLoad()); | 492 DCHECK(!substituteData.forceSynchronousLoad()); |
| 494 return resourceForBlockedRequest(request, factory, blockedReason); | 493 return resourceForBlockedRequest(request, factory, blockedReason); |
| 495 } | 494 } |
| 496 | 495 |
| 497 context().willStartLoadingResource( | 496 context().willStartLoadingResource( |
| 498 identifier, resourceRequest, factory.type(), | 497 identifier, resourceRequest, factory.type(), |
| 499 request.options().initiatorInfo.name, request.forPreload()); | 498 request.options().initiatorInfo.name, request.forPreload()); |
| 500 if (!request.url().isValid()) | 499 if (!request.url().isValid()) |
| 501 return nullptr; | 500 return nullptr; |
| 502 | 501 |
| 503 bool isDataUrl = resourceRequest.url().protocolIsData(); | 502 bool isDataUrl = resourceRequest.url().protocolIsData(); |
| 504 bool isStaticData = isDataUrl || substituteData.isValid() || m_archive; | 503 isStaticData = isDataUrl || substituteData.isValid() || m_archive; |
| 505 Resource* resource(nullptr); | |
| 506 if (isStaticData) { | 504 if (isStaticData) { |
| 507 resource = resourceForStaticData(request, factory, substituteData); | 505 resource = resourceForStaticData(request, factory, substituteData); |
| 508 // Abort the request if the archive doesn't contain the resource, except in | 506 // Abort the request if the archive doesn't contain the resource, except in |
| 509 // the case of data URLs which might have resources such as fonts that need | 507 // the case of data URLs which might have resources such as fonts that need |
| 510 // to be decoded only on demand. These data URLs are allowed to be | 508 // to be decoded only on demand. These data URLs are allowed to be |
| 511 // processed using the normal ResourceFetcher machinery. | 509 // processed using the normal ResourceFetcher machinery. |
| 512 if (!resource && !isDataUrl && m_archive) | 510 if (!resource && !isDataUrl && m_archive) |
| 513 return nullptr; | 511 return nullptr; |
| 514 } | 512 } |
| 513 resourceRequest.setAllowStoredCredentials( | |
| 514 request.options().allowCredentials == AllowStoredCredentials); | |
| 515 shouldContinue = true; | |
| 516 return resource; | |
| 517 } | |
| 518 | |
| 519 Resource* ResourceFetcher::requestResource( | |
| 520 FetchRequest& request, | |
| 521 const ResourceFactory& factory, | |
| 522 const SubstituteData& substituteData) { | |
| 523 unsigned long identifier = createUniqueIdentifier(); | |
| 524 ResourceRequest& resourceRequest = request.mutableResourceRequest(); | |
| 525 network_instrumentation::ScopedResourceLoadTracker scopedResourceLoadTracker( | |
| 526 identifier, resourceRequest); | |
| 527 SCOPED_BLINK_UMA_HISTOGRAM_TIMER("Blink.Fetch.RequestResourceTime"); | |
| 528 | |
| 529 bool isStaticData = false; | |
| 530 bool shouldContinue = false; | |
| 531 Resource* resource = prepareRequest(request, factory, substituteData, | |
| 532 identifier, isStaticData, shouldContinue); | |
| 533 if (shouldContinue) | |
| 534 return resource; | |
| 535 | |
| 515 if (!resource) { | 536 if (!resource) { |
| 516 resource = | 537 resource = |
| 517 memoryCache()->resourceForURL(request.url(), getCacheIdentifier()); | 538 memoryCache()->resourceForURL(request.url(), getCacheIdentifier()); |
| 518 } | 539 } |
| 519 | 540 |
| 520 // See if we can use an existing resource from the cache. If so, we need to | 541 // See if we can use an existing resource from the cache. If so, we need to |
| 521 // move it to be load blocking. | 542 // move it to be load blocking. |
| 522 moveCachedNonBlockingResourceToBlocking(resource, request); | 543 moveCachedNonBlockingResourceToBlocking(resource, request); |
| 523 | 544 |
| 524 const RevalidationPolicy policy = determineRevalidationPolicy( | 545 const RevalidationPolicy policy = determineRevalidationPolicy( |
| 525 factory.type(), request, resource, isStaticData); | 546 factory.type(), request, resource, isStaticData); |
| 526 TRACE_EVENT_INSTANT1("blink", "ResourceFetcher::determineRevalidationPolicy", | 547 TRACE_EVENT_INSTANT1("blink", "ResourceFetcher::determineRevalidationPolicy", |
| 527 TRACE_EVENT_SCOPE_THREAD, "revalidationPolicy", policy); | 548 TRACE_EVENT_SCOPE_THREAD, "revalidationPolicy", policy); |
| 528 | 549 |
| 529 updateMemoryCacheStats(resource, policy, request, factory, isStaticData); | 550 updateMemoryCacheStats(resource, policy, request, factory, isStaticData); |
| 530 | 551 |
| 531 resourceRequest.setAllowStoredCredentials( | |
| 532 request.options().allowCredentials == AllowStoredCredentials); | |
| 533 | |
| 534 switch (policy) { | 552 switch (policy) { |
| 535 case Reload: | 553 case Reload: |
| 536 memoryCache()->remove(resource); | 554 memoryCache()->remove(resource); |
| 537 // Fall through | 555 // Fall through |
| 538 case Load: | 556 case Load: |
| 539 resource = createResourceForLoading(request, request.charset(), factory); | 557 resource = createResourceForLoading(request, request.charset(), factory); |
| 540 break; | 558 break; |
| 541 case Revalidate: | 559 case Revalidate: |
| 542 initializeRevalidation(resourceRequest, resource); | 560 initializeRevalidation(resourceRequest, resource); |
| 543 break; | 561 break; |
| (...skipping 962 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1506 visitor->trace(m_context); | 1524 visitor->trace(m_context); |
| 1507 visitor->trace(m_archive); | 1525 visitor->trace(m_archive); |
| 1508 visitor->trace(m_loaders); | 1526 visitor->trace(m_loaders); |
| 1509 visitor->trace(m_nonBlockingLoaders); | 1527 visitor->trace(m_nonBlockingLoaders); |
| 1510 visitor->trace(m_documentResources); | 1528 visitor->trace(m_documentResources); |
| 1511 visitor->trace(m_preloads); | 1529 visitor->trace(m_preloads); |
| 1512 visitor->trace(m_resourceTimingInfoMap); | 1530 visitor->trace(m_resourceTimingInfoMap); |
| 1513 } | 1531 } |
| 1514 | 1532 |
| 1515 } // namespace blink | 1533 } // namespace blink |
| OLD | NEW |