Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(407)

Side by Side Diff: third_party/WebKit/Source/core/fetch/ResourceFetcher.cpp

Issue 1889973002: Refactoring starting a resource load (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698