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 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 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 203 , m_imagesEnabled(true) | 203 , m_imagesEnabled(true) |
| 204 , m_allowStaleResources(false) | 204 , m_allowStaleResources(false) |
| 205 { | 205 { |
| 206 ThreadState::current()->registerPreFinalizer(this); | 206 ThreadState::current()->registerPreFinalizer(this); |
| 207 } | 207 } |
| 208 | 208 |
| 209 ResourceFetcher::~ResourceFetcher() | 209 ResourceFetcher::~ResourceFetcher() |
| 210 { | 210 { |
| 211 } | 211 } |
| 212 | 212 |
| 213 WebTaskRunner* ResourceFetcher::loadingTaskRunner() | |
| 214 { | |
| 215 if (!m_context) | |
| 216 return nullptr; | |
| 217 | |
| 218 return m_context->loadingTaskRunner(); | |
| 219 } | |
| 220 | |
| 221 Resource* ResourceFetcher::cachedResource(const KURL& resourceURL) const | 213 Resource* ResourceFetcher::cachedResource(const KURL& resourceURL) const |
| 222 { | 214 { |
| 223 KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(resourceURL); | 215 KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(resourceURL); |
| 224 const WeakMember<Resource>& resource = m_documentResources.get(url); | 216 const WeakMember<Resource>& resource = m_documentResources.get(url); |
| 225 return resource.get(); | 217 return resource.get(); |
| 226 } | 218 } |
| 227 | 219 |
| 228 bool ResourceFetcher::canAccessResource(Resource* resource, SecurityOrigin* sour ceOrigin, const KURL& url, AccessControlLoggingDecision logErrorsDecision) const | 220 bool ResourceFetcher::canAccessResource(Resource* resource, SecurityOrigin* sour ceOrigin, const KURL& url, AccessControlLoggingDecision logErrorsDecision) const |
| 229 { | 221 { |
| 230 // Redirects can change the response URL different from one of request. | 222 // Redirects can change the response URL different from one of request. |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 482 } | 474 } |
| 483 | 475 |
| 484 // If only the fragment identifiers differ, it is the same resource. | 476 // If only the fragment identifiers differ, it is the same resource. |
| 485 ASSERT(equalIgnoringFragmentIdentifier(resource->url(), url)); | 477 ASSERT(equalIgnoringFragmentIdentifier(resource->url(), url)); |
| 486 requestLoadStarted(resource, request, policy == Use ? ResourceLoadingFromCac he : ResourceLoadingFromNetwork, isStaticData); | 478 requestLoadStarted(resource, request, policy == Use ? ResourceLoadingFromCac he : ResourceLoadingFromNetwork, isStaticData); |
| 487 m_documentResources.set(urlWithoutFragment, resource); | 479 m_documentResources.set(urlWithoutFragment, resource); |
| 488 | 480 |
| 489 if (!resourceNeedsLoad(resource, request, policy)) | 481 if (!resourceNeedsLoad(resource, request, policy)) |
| 490 return resource; | 482 return resource; |
| 491 | 483 |
| 492 if (!context().shouldLoadNewResource(factory.type())) { | 484 if (!startLoad(resource)) { |
| 493 if (memoryCache()->contains(resource)) | 485 if (memoryCache()->contains(resource)) |
| 494 memoryCache()->remove(resource); | 486 memoryCache()->remove(resource); |
| 495 return nullptr; | 487 return nullptr; |
| 496 } | 488 } |
| 497 | |
| 498 resource->load(this); | |
| 499 ASSERT(!resource->errorOccurred() || request.options().synchronousPolicy == RequestSynchronously); | 489 ASSERT(!resource->errorOccurred() || request.options().synchronousPolicy == RequestSynchronously); |
| 500 return resource; | 490 return resource; |
| 501 } | 491 } |
| 502 | 492 |
| 503 void ResourceFetcher::resourceTimingReportTimerFired(Timer<ResourceFetcher>* tim er) | 493 void ResourceFetcher::resourceTimingReportTimerFired(Timer<ResourceFetcher>* tim er) |
| 504 { | 494 { |
| 505 ASSERT_UNUSED(timer, timer == &m_resourceTimingReportTimer); | 495 ASSERT_UNUSED(timer, timer == &m_resourceTimingReportTimer); |
| 506 Vector<OwnPtr<ResourceTimingInfo>> timingReports; | 496 Vector<OwnPtr<ResourceTimingInfo>> timingReports; |
| 507 timingReports.swap(m_scheduledResourceTimingReports); | 497 timingReports.swap(m_scheduledResourceTimingReports); |
| 508 for (const auto& timingInfo : timingReports) | 498 for (const auto& timingInfo : timingReports) |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 814 | 804 |
| 815 bool ResourceFetcher::shouldDeferImageLoad(const KURL& url) const | 805 bool ResourceFetcher::shouldDeferImageLoad(const KURL& url) const |
| 816 { | 806 { |
| 817 return !context().allowImage(m_imagesEnabled, url) || !m_autoLoadImages; | 807 return !context().allowImage(m_imagesEnabled, url) || !m_autoLoadImages; |
| 818 } | 808 } |
| 819 | 809 |
| 820 void ResourceFetcher::reloadImagesIfNotDeferred() | 810 void ResourceFetcher::reloadImagesIfNotDeferred() |
| 821 { | 811 { |
| 822 for (Resource* resource : m_documentResources.values()) { | 812 for (Resource* resource : m_documentResources.values()) { |
| 823 if (resource->getType() == Resource::Image && resource->stillNeedsLoad() && !shouldDeferImageLoad(resource->url())) | 813 if (resource->getType() == Resource::Image && resource->stillNeedsLoad() && !shouldDeferImageLoad(resource->url())) |
| 824 const_cast<Resource*>(resource)->load(this); | 814 startLoad(resource); |
| 825 } | 815 } |
| 826 } | 816 } |
| 827 | 817 |
| 818 bool ResourceFetcher::startLoad(Resource* resource) | |
| 819 { | |
| 820 ASSERT(resource->stillNeedsLoad()); | |
|
Yoav Weiss
2016/04/20 08:52:08
I believe ASSERT is now deprecated and DCHECK is t
Nate Chapin
2016/05/18 23:56:04
Done.
| |
| 821 if (!context().shouldLoadNewResource(resource->getType())) | |
| 822 return false; | |
| 823 | |
| 824 ResourceRequest& request(resource->prepareRequestForLoadStart()); | |
| 825 KURL url = request.url(); | |
| 826 | |
| 827 ResourceLoader* loader = ResourceLoader::create(this, resource); | |
| 828 resource->setLoader(loader); | |
| 829 willStartLoadingResource(resource, loader, request); | |
| 830 loader->start(request, context().loadingTaskRunner(), context().defersLoadin g()); | |
| 831 | |
| 832 // If the request reference is null (i.e., a synchronous revalidation will | |
| 833 // null the request), don't make the request non-null by setting the url. | |
| 834 if (!request.isNull()) | |
| 835 request.setURL(url); | |
| 836 return true; | |
| 837 } | |
| 838 | |
| 828 void ResourceFetcher::didLoadResource(Resource* resource) | 839 void ResourceFetcher::didLoadResource(Resource* resource) |
| 829 { | 840 { |
| 830 context().didLoadResource(resource); | 841 context().didLoadResource(resource); |
| 831 } | 842 } |
| 832 | 843 |
| 833 int ResourceFetcher::requestCount() const | 844 int ResourceFetcher::requestCount() const |
| 834 { | 845 { |
| 835 return m_loaders ? m_loaders->size() : 0; | 846 return m_loaders ? m_loaders->size() : 0; |
| 836 } | 847 } |
| 837 | 848 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 951 void ResourceFetcher::moveResourceLoaderToNonBlocking(ResourceLoader* loader) | 962 void ResourceFetcher::moveResourceLoaderToNonBlocking(ResourceLoader* loader) |
| 952 { | 963 { |
| 953 if (!m_nonBlockingLoaders) | 964 if (!m_nonBlockingLoaders) |
| 954 m_nonBlockingLoaders = ResourceLoaderSet::create(); | 965 m_nonBlockingLoaders = ResourceLoaderSet::create(); |
| 955 m_nonBlockingLoaders->add(loader); | 966 m_nonBlockingLoaders->add(loader); |
| 956 m_loaders->remove(loader); | 967 m_loaders->remove(loader); |
| 957 } | 968 } |
| 958 | 969 |
| 959 void ResourceFetcher::willStartLoadingResource(Resource* resource, ResourceLoade r* loader, ResourceRequest& request) | 970 void ResourceFetcher::willStartLoadingResource(Resource* resource, ResourceLoade r* loader, ResourceRequest& request) |
| 960 { | 971 { |
| 961 if (loader->cachedResource()->shouldBlockLoadEvent()) { | 972 if (resource->shouldBlockLoadEvent()) { |
| 962 if (!m_loaders) | 973 if (!m_loaders) |
| 963 m_loaders = ResourceLoaderSet::create(); | 974 m_loaders = ResourceLoaderSet::create(); |
| 964 m_loaders->add(loader); | 975 m_loaders->add(loader); |
| 965 } else { | 976 } else { |
| 966 if (!m_nonBlockingLoaders) | 977 if (!m_nonBlockingLoaders) |
| 967 m_nonBlockingLoaders = ResourceLoaderSet::create(); | 978 m_nonBlockingLoaders = ResourceLoaderSet::create(); |
| 968 m_nonBlockingLoaders->add(loader); | 979 m_nonBlockingLoaders->add(loader); |
| 969 } | 980 } |
| 970 | 981 |
| 971 context().willStartLoadingResource(resource, request); | 982 context().willStartLoadingResource(resource, request); |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1175 visitor->trace(m_context); | 1186 visitor->trace(m_context); |
| 1176 visitor->trace(m_archive); | 1187 visitor->trace(m_archive); |
| 1177 visitor->trace(m_loaders); | 1188 visitor->trace(m_loaders); |
| 1178 visitor->trace(m_nonBlockingLoaders); | 1189 visitor->trace(m_nonBlockingLoaders); |
| 1179 visitor->trace(m_documentResources); | 1190 visitor->trace(m_documentResources); |
| 1180 visitor->trace(m_preloads); | 1191 visitor->trace(m_preloads); |
| 1181 visitor->trace(m_resourceTimingInfoMap); | 1192 visitor->trace(m_resourceTimingInfoMap); |
| 1182 } | 1193 } |
| 1183 | 1194 |
| 1184 } // namespace blink | 1195 } // namespace blink |
| OLD | NEW |