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

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

Issue 665613002: Move /fetch to use C++11 (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased Created 6 years, 2 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/fetch/ResourceFetcher.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 158
159 static Resource* resourceFromDataURIRequest(const ResourceRequest& request, cons t ResourceLoaderOptions& resourceOptions) 159 static Resource* resourceFromDataURIRequest(const ResourceRequest& request, cons t ResourceLoaderOptions& resourceOptions)
160 { 160 {
161 const KURL& url = request.url(); 161 const KURL& url = request.url();
162 ASSERT(url.protocolIsData()); 162 ASSERT(url.protocolIsData());
163 163
164 blink::WebString mimetype; 164 blink::WebString mimetype;
165 blink::WebString charset; 165 blink::WebString charset;
166 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(blink::Platform::curren t()->parseDataURL(url, mimetype, charset)); 166 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(blink::Platform::curren t()->parseDataURL(url, mimetype, charset));
167 if (!data) 167 if (!data)
168 return 0; 168 return nullptr;
169 ResourceResponse response(url, mimetype, data->size(), charset, String()); 169 ResourceResponse response(url, mimetype, data->size(), charset, String());
170 170
171 Resource* resource = createResource(Resource::Image, request, charset); 171 Resource* resource = createResource(Resource::Image, request, charset);
172 resource->setOptions(resourceOptions); 172 resource->setOptions(resourceOptions);
173 resource->responseReceived(response); 173 resource->responseReceived(response);
174 if (data->size()) 174 if (data->size())
175 resource->setResourceBuffer(data); 175 resource->setResourceBuffer(data);
176 resource->finish(); 176 resource->finish();
177 return resource; 177 return resource;
178 } 178 }
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl ectDocumentResourcesTimerFired) 256 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl ectDocumentResourcesTimerFired)
257 , m_resourceTimingReportTimer(this, &ResourceFetcher::resourceTimingReportTi merFired) 257 , m_resourceTimingReportTimer(this, &ResourceFetcher::resourceTimingReportTi merFired)
258 , m_autoLoadImages(true) 258 , m_autoLoadImages(true)
259 , m_imagesEnabled(true) 259 , m_imagesEnabled(true)
260 , m_allowStaleResources(false) 260 , m_allowStaleResources(false)
261 { 261 {
262 } 262 }
263 263
264 ResourceFetcher::~ResourceFetcher() 264 ResourceFetcher::~ResourceFetcher()
265 { 265 {
266 m_documentLoader = 0; 266 m_documentLoader = nullptr;
267 m_document = nullptr; 267 m_document = nullptr;
268 268
269 clearPreloads(); 269 clearPreloads();
270 270
271 // Make sure no requests still point to this ResourceFetcher 271 // Make sure no requests still point to this ResourceFetcher
272 ASSERT(!m_requestCount); 272 ASSERT(!m_requestCount);
273 } 273 }
274 274
275 Resource* ResourceFetcher::cachedResource(const KURL& resourceURL) const 275 Resource* ResourceFetcher::cachedResource(const KURL& resourceURL) const
276 { 276 {
(...skipping 404 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 TRACE_EVENT0("blink", "ResourceFetcher::requestResource"); 681 TRACE_EVENT0("blink", "ResourceFetcher::requestResource");
682 682
683 KURL url = request.resourceRequest().url(); 683 KURL url = request.resourceRequest().url();
684 684
685 WTF_LOG(ResourceLoading, "ResourceFetcher::requestResource '%s', charset '%s ', priority=%d, forPreload=%u, type=%s", url.elidedString().latin1().data(), req uest.charset().latin1().data(), request.priority(), request.forPreload(), Resour ceTypeName(type)); 685 WTF_LOG(ResourceLoading, "ResourceFetcher::requestResource '%s', charset '%s ', priority=%d, forPreload=%u, type=%s", url.elidedString().latin1().data(), req uest.charset().latin1().data(), request.priority(), request.forPreload(), Resour ceTypeName(type));
686 686
687 // If only the fragment identifiers differ, it is the same resource. 687 // If only the fragment identifiers differ, it is the same resource.
688 url = MemoryCache::removeFragmentIdentifierIfNeeded(url); 688 url = MemoryCache::removeFragmentIdentifierIfNeeded(url);
689 689
690 if (!url.isValid()) 690 if (!url.isValid())
691 return 0; 691 return nullptr;
692 692
693 if (!canRequest(type, request.resourceRequest(), url, request.options(), req uest.forPreload(), request.originRestriction())) 693 if (!canRequest(type, request.resourceRequest(), url, request.options(), req uest.forPreload(), request.originRestriction()))
694 return 0; 694 return nullptr;
695 695
696 if (LocalFrame* f = frame()) 696 if (LocalFrame* f = frame())
697 f->loader().client()->dispatchWillRequestResource(&request); 697 f->loader().client()->dispatchWillRequestResource(&request);
698 698
699 if (!request.forPreload()) { 699 if (!request.forPreload()) {
700 V8DOMActivityLogger* activityLogger = 0; 700 V8DOMActivityLogger* activityLogger = nullptr;
701 if (request.options().initiatorInfo.name == FetchInitiatorTypeNames::xml httprequest) 701 if (request.options().initiatorInfo.name == FetchInitiatorTypeNames::xml httprequest)
702 activityLogger = V8DOMActivityLogger::currentActivityLogger(); 702 activityLogger = V8DOMActivityLogger::currentActivityLogger();
703 else 703 else
704 activityLogger = V8DOMActivityLogger::currentActivityLoggerIfIsolate dWorld(); 704 activityLogger = V8DOMActivityLogger::currentActivityLoggerIfIsolate dWorld();
705 705
706 if (activityLogger) { 706 if (activityLogger) {
707 Vector<String> argv; 707 Vector<String> argv;
708 argv.append(Resource::resourceTypeToString(type, request.options().i nitiatorInfo)); 708 argv.append(Resource::resourceTypeToString(type, request.options().i nitiatorInfo));
709 argv.append(url); 709 argv.append(url);
710 activityLogger->logEvent("blinkRequestResource", argv.size(), argv.d ata()); 710 activityLogger->logEvent("blinkRequestResource", argv.size(), argv.d ata());
(...skipping 13 matching lines...) Expand all
724 break; 724 break;
725 case Revalidate: 725 case Revalidate:
726 resource = createResourceForRevalidation(request, resource.get()); 726 resource = createResourceForRevalidation(request, resource.get());
727 break; 727 break;
728 case Use: 728 case Use:
729 memoryCache()->updateForAccess(resource.get()); 729 memoryCache()->updateForAccess(resource.get());
730 break; 730 break;
731 } 731 }
732 732
733 if (!resource) 733 if (!resource)
734 return 0; 734 return nullptr;
735 735
736 if (!resource->hasClients()) 736 if (!resource->hasClients())
737 m_deadStatsRecorder.update(policy); 737 m_deadStatsRecorder.update(policy);
738 738
739 if (policy != Use) 739 if (policy != Use)
740 resource->setIdentifier(createUniqueIdentifier()); 740 resource->setIdentifier(createUniqueIdentifier());
741 741
742 if (!request.forPreload() || policy != Use) { 742 if (!request.forPreload() || policy != Use) {
743 ResourceLoadPriority priority = loadPriority(type, request); 743 ResourceLoadPriority priority = loadPriority(type, request);
744 // When issuing another request for a resource that is already in-flight make 744 // When issuing another request for a resource that is already in-flight make
745 // sure to not demote the priority of the in-flight request. If the new request 745 // sure to not demote the priority of the in-flight request. If the new request
746 // isn't at the same priority as the in-flight request, only allow promo tions. 746 // isn't at the same priority as the in-flight request, only allow promo tions.
747 // This can happen when a visible image's priority is increased and then another 747 // This can happen when a visible image's priority is increased and then another
748 // reference to the image is parsed (which would be at a lower priority) . 748 // reference to the image is parsed (which would be at a lower priority) .
749 if (priority > resource->resourceRequest().priority()) { 749 if (priority > resource->resourceRequest().priority()) {
750 resource->mutableResourceRequest().setPriority(priority); 750 resource->mutableResourceRequest().setPriority(priority);
751 resource->didChangePriority(priority, 0); 751 resource->didChangePriority(priority, 0);
752 } 752 }
753 } 753 }
754 754
755 if (resourceNeedsLoad(resource.get(), request, policy)) { 755 if (resourceNeedsLoad(resource.get(), request, policy)) {
756 if (!shouldLoadNewResource(type)) { 756 if (!shouldLoadNewResource(type)) {
757 if (memoryCache()->contains(resource.get())) 757 if (memoryCache()->contains(resource.get()))
758 memoryCache()->remove(resource.get()); 758 memoryCache()->remove(resource.get());
759 return 0; 759 return nullptr;
760 } 760 }
761 761
762 if (!m_documentLoader || !m_documentLoader->scheduleArchiveLoad(resource .get(), request.resourceRequest())) 762 if (!m_documentLoader || !m_documentLoader->scheduleArchiveLoad(resource .get(), request.resourceRequest()))
763 resource->load(this, request.options()); 763 resource->load(this, request.options());
764 764
765 // For asynchronous loads that immediately fail, it's sufficient to retu rn a 765 // For asynchronous loads that immediately fail, it's sufficient to retu rn a
766 // null Resource, as it indicates that something prevented the load from starting. 766 // null Resource, as it indicates that something prevented the load from starting.
767 // If there's a network error, that failure will happen asynchronously. However, if 767 // If there's a network error, that failure will happen asynchronously. However, if
768 // a sync load receives a network error, it will have already happened b y this point. 768 // a sync load receives a network error, it will have already happened b y this point.
769 // In that case, the requester should have access to the relevant Resour ceError, so 769 // In that case, the requester should have access to the relevant Resour ceError, so
770 // we need to return a non-null Resource. 770 // we need to return a non-null Resource.
771 if (resource->errorOccurred()) { 771 if (resource->errorOccurred()) {
772 if (memoryCache()->contains(resource.get())) 772 if (memoryCache()->contains(resource.get()))
773 memoryCache()->remove(resource.get()); 773 memoryCache()->remove(resource.get());
774 return request.options().synchronousPolicy == RequestSynchronously ? resource : 0; 774 return request.options().synchronousPolicy == RequestSynchronously ? resource : nullptr;
775 } 775 }
776 } 776 }
777 777
778 // FIXME: Temporarily leave main resource caching disabled for chromium, 778 // FIXME: Temporarily leave main resource caching disabled for chromium,
779 // see https://bugs.webkit.org/show_bug.cgi?id=107962. Before caching main 779 // see https://bugs.webkit.org/show_bug.cgi?id=107962. Before caching main
780 // resources, we should be sure to understand the implications for memory 780 // resources, we should be sure to understand the implications for memory
781 // use. 781 // use.
782 // Remove main resource from cache to prevent reuse. 782 // Remove main resource from cache to prevent reuse.
783 if (type == Resource::MainResource) { 783 if (type == Resource::MainResource) {
784 ASSERT(policy != Use || m_documentLoader->substituteData().isValid()); 784 ASSERT(policy != Use || m_documentLoader->substituteData().isValid());
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
1265 #if PRELOAD_DEBUG 1265 #if PRELOAD_DEBUG
1266 printf("PRELOADING %s\n", resource->url().string().latin1().data()); 1266 printf("PRELOADING %s\n", resource->url().string().latin1().data());
1267 #endif 1267 #endif
1268 } 1268 }
1269 1269
1270 bool ResourceFetcher::isPreloaded(const String& urlString) const 1270 bool ResourceFetcher::isPreloaded(const String& urlString) const
1271 { 1271 {
1272 const KURL& url = m_document->completeURL(urlString); 1272 const KURL& url = m_document->completeURL(urlString);
1273 1273
1274 if (m_preloads) { 1274 if (m_preloads) {
1275 for (const auto& resource : *m_preloads) { 1275 for (Resource* resource : *m_preloads) {
1276 if (resource->url() == url) 1276 if (resource->url() == url)
1277 return true; 1277 return true;
1278 } 1278 }
1279 } 1279 }
1280 1280
1281 return false; 1281 return false;
1282 } 1282 }
1283 1283
1284 void ResourceFetcher::clearPreloads() 1284 void ResourceFetcher::clearPreloads()
1285 { 1285 {
1286 #if PRELOAD_DEBUG 1286 #if PRELOAD_DEBUG
1287 printPreloadStats(); 1287 printPreloadStats();
1288 #endif 1288 #endif
1289 if (!m_preloads) 1289 if (!m_preloads)
1290 return; 1290 return;
1291 1291
1292 for (const auto& resource : *m_preloads) { 1292 for (Resource* resource : *m_preloads) {
1293 resource->decreasePreloadCount(); 1293 resource->decreasePreloadCount();
1294 bool deleted = resource->deleteIfPossible(); 1294 bool deleted = resource->deleteIfPossible();
1295 if (!deleted && resource->preloadResult() == Resource::PreloadNotReferen ced) 1295 if (!deleted && resource->preloadResult() == Resource::PreloadNotReferen ced)
1296 memoryCache()->remove(resource); 1296 memoryCache()->remove(resource);
1297 } 1297 }
1298 m_preloads.clear(); 1298 m_preloads.clear();
1299 } 1299 }
1300 1300
1301 void ResourceFetcher::didFinishLoading(const Resource* resource, double finishTi me, int64_t encodedDataLength) 1301 void ResourceFetcher::didFinishLoading(const Resource* resource, double finishTi me, int64_t encodedDataLength)
1302 { 1302 {
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 { 1456 {
1457 if (!m_preloads) 1457 if (!m_preloads)
1458 return; 1458 return;
1459 1459
1460 unsigned scripts = 0; 1460 unsigned scripts = 0;
1461 unsigned scriptMisses = 0; 1461 unsigned scriptMisses = 0;
1462 unsigned stylesheets = 0; 1462 unsigned stylesheets = 0;
1463 unsigned stylesheetMisses = 0; 1463 unsigned stylesheetMisses = 0;
1464 unsigned images = 0; 1464 unsigned images = 0;
1465 unsigned imageMisses = 0; 1465 unsigned imageMisses = 0;
1466 for (const auto& resource : *m_preloads) { 1466 for (Resource* resource : *m_preloads) {
1467 if (resource->preloadResult() == Resource::PreloadNotReferenced) 1467 if (resource->preloadResult() == Resource::PreloadNotReferenced)
1468 printf("!! UNREFERENCED PRELOAD %s\n", resource->url().string().lati n1().data()); 1468 printf("!! UNREFERENCED PRELOAD %s\n", resource->url().string().lati n1().data());
1469 else if (resource->preloadResult() == Resource::PreloadReferencedWhileCo mplete) 1469 else if (resource->preloadResult() == Resource::PreloadReferencedWhileCo mplete)
1470 printf("HIT COMPLETE PRELOAD %s\n", resource->url().string().latin1( ).data()); 1470 printf("HIT COMPLETE PRELOAD %s\n", resource->url().string().latin1( ).data());
1471 else if (resource->preloadResult() == Resource::PreloadReferencedWhileLo ading) 1471 else if (resource->preloadResult() == Resource::PreloadReferencedWhileLo ading)
1472 printf("HIT LOADING PRELOAD %s\n", resource->url().string().latin1() .data()); 1472 printf("HIT LOADING PRELOAD %s\n", resource->url().string().latin1() .data());
1473 1473
1474 if (resource->type() == Resource::Script) { 1474 if (resource->type() == Resource::Script) {
1475 scripts++; 1475 scripts++;
1476 if (resource->preloadResult() < Resource::PreloadReferencedWhileLoad ing) 1476 if (resource->preloadResult() < Resource::PreloadReferencedWhileLoad ing)
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
1542 1542
1543 void ResourceFetcher::trace(Visitor* visitor) 1543 void ResourceFetcher::trace(Visitor* visitor)
1544 { 1544 {
1545 visitor->trace(m_document); 1545 visitor->trace(m_document);
1546 visitor->trace(m_loaders); 1546 visitor->trace(m_loaders);
1547 visitor->trace(m_multipartLoaders); 1547 visitor->trace(m_multipartLoaders);
1548 ResourceLoaderHost::trace(visitor); 1548 ResourceLoaderHost::trace(visitor);
1549 } 1549 }
1550 1550
1551 } 1551 }
OLDNEW
« no previous file with comments | « Source/core/fetch/ResourceFetcher.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698