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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 52 #include "core/loader/FrameLoaderClient.h" | 52 #include "core/loader/FrameLoaderClient.h" |
| 53 #include "core/loader/PingLoader.h" | 53 #include "core/loader/PingLoader.h" |
| 54 #include "core/loader/UniqueIdentifier.h" | 54 #include "core/loader/UniqueIdentifier.h" |
| 55 #include "core/loader/appcache/ApplicationCacheHost.h" | 55 #include "core/loader/appcache/ApplicationCacheHost.h" |
| 56 #include "core/page/ContentSecurityPolicy.h" | 56 #include "core/page/ContentSecurityPolicy.h" |
| 57 #include "core/page/DOMWindow.h" | 57 #include "core/page/DOMWindow.h" |
| 58 #include "core/page/Frame.h" | 58 #include "core/page/Frame.h" |
| 59 #include "core/page/Performance.h" | 59 #include "core/page/Performance.h" |
| 60 #include "core/page/ResourceTimingInfo.h" | 60 #include "core/page/ResourceTimingInfo.h" |
| 61 #include "core/page/Settings.h" | 61 #include "core/page/Settings.h" |
| 62 #include "core/platform/HistogramSupport.h" | |
| 62 #include "core/platform/Logging.h" | 63 #include "core/platform/Logging.h" |
| 63 #include "core/platform/chromium/TraceEvent.h" | 64 #include "core/platform/chromium/TraceEvent.h" |
| 64 #include "public/platform/Platform.h" | 65 #include "public/platform/Platform.h" |
| 65 #include "public/platform/WebURL.h" | 66 #include "public/platform/WebURL.h" |
| 66 #include "weborigin/SecurityOrigin.h" | 67 #include "weborigin/SecurityOrigin.h" |
| 67 #include "weborigin/SecurityPolicy.h" | 68 #include "weborigin/SecurityPolicy.h" |
| 68 #include "wtf/text/CString.h" | 69 #include "wtf/text/CString.h" |
| 69 #include "wtf/text/WTFString.h" | 70 #include "wtf/text/WTFString.h" |
| 70 | 71 |
| 71 #define PRELOAD_DEBUG 0 | 72 #define PRELOAD_DEBUG 0 |
| 72 | 73 |
| 73 namespace WebCore { | 74 namespace WebCore { |
| 75 namespace { | |
|
abarth-chromium
2013/09/13 17:38:18
We usually have a blank line above anonymous names
Philippe
2013/09/16 11:47:21
Done.
| |
| 74 | 76 |
| 75 static Resource* createResource(Resource::Type type, const ResourceRequest& requ est, const String& charset) | 77 // Used for histograms. |
|
abarth-chromium
2013/09/13 17:38:18
No need for this comment.
Philippe
2013/09/16 11:47:21
Done.
| |
| 78 enum ActionUponResourceRequest { | |
| 79 LoadResource = 0, | |
| 80 RevalidateResource = 1, | |
| 81 UseResourceFromCache = 2, | |
| 82 ActionUponResourceRequestBoundaryValue = 3, | |
|
abarth-chromium
2013/09/13 17:38:18
No need to list these numbers explicitly.
What is
Philippe
2013/09/16 11:47:21
Boundary value is the terminology used in Histogra
| |
| 83 }; | |
| 84 | |
| 85 Resource* createResource(Resource::Type type, const ResourceRequest& request, co nst String& charset) | |
| 76 { | 86 { |
| 77 switch (type) { | 87 switch (type) { |
| 78 case Resource::Image: | 88 case Resource::Image: |
| 79 return new ImageResource(request); | 89 return new ImageResource(request); |
| 80 case Resource::CSSStyleSheet: | 90 case Resource::CSSStyleSheet: |
| 81 return new CSSStyleSheetResource(request, charset); | 91 return new CSSStyleSheetResource(request, charset); |
| 82 case Resource::Script: | 92 case Resource::Script: |
| 83 return new ScriptResource(request, charset); | 93 return new ScriptResource(request, charset); |
| 84 case Resource::SVGDocument: | 94 case Resource::SVGDocument: |
| 85 return new DocumentResource(request, Resource::SVGDocument); | 95 return new DocumentResource(request, Resource::SVGDocument); |
| 86 case Resource::Font: | 96 case Resource::Font: |
| 87 return new FontResource(request); | 97 return new FontResource(request); |
| 88 case Resource::Raw: | 98 case Resource::Raw: |
| 89 case Resource::MainResource: | 99 case Resource::MainResource: |
| 90 return new RawResource(request, type); | 100 return new RawResource(request, type); |
| 91 case Resource::XSLStyleSheet: | 101 case Resource::XSLStyleSheet: |
| 92 return new XSLStyleSheetResource(request); | 102 return new XSLStyleSheetResource(request); |
| 93 case Resource::LinkPrefetch: | 103 case Resource::LinkPrefetch: |
| 94 return new Resource(request, Resource::LinkPrefetch); | 104 return new Resource(request, Resource::LinkPrefetch); |
| 95 case Resource::LinkSubresource: | 105 case Resource::LinkSubresource: |
| 96 return new Resource(request, Resource::LinkSubresource); | 106 return new Resource(request, Resource::LinkSubresource); |
| 97 case Resource::TextTrack: | 107 case Resource::TextTrack: |
| 98 return new TextTrackResource(request); | 108 return new TextTrackResource(request); |
| 99 case Resource::Shader: | 109 case Resource::Shader: |
| 100 return new ShaderResource(request); | 110 return new ShaderResource(request); |
| 101 case Resource::ImportResource: | 111 case Resource::ImportResource: |
| 102 return new RawResource(request, type); | 112 return new RawResource(request, type); |
| 103 } | 113 } |
|
abarth-chromium
2013/09/13 17:38:18
Why doesn't the compiler complain that you're miss
Philippe
2013/09/16 11:47:21
We don't provide any specific warning flags (on Li
Philippe
2013/09/16 14:09:09
Correction, the build does fail with Clang at leas
| |
| 104 | 114 |
| 105 ASSERT_NOT_REACHED(); | 115 ASSERT_NOT_REACHED(); |
| 106 return 0; | 116 return 0; |
| 107 } | 117 } |
| 108 | 118 |
| 109 static ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest & request) | 119 ResourceLoadPriority loadPriority(Resource::Type type, const FetchRequest& reque st) |
| 110 { | 120 { |
| 111 if (request.priority() != ResourceLoadPriorityUnresolved) | 121 if (request.priority() != ResourceLoadPriorityUnresolved) |
| 112 return request.priority(); | 122 return request.priority(); |
| 113 | 123 |
| 114 switch (type) { | 124 switch (type) { |
| 115 case Resource::MainResource: | 125 case Resource::MainResource: |
| 116 return ResourceLoadPriorityVeryHigh; | 126 return ResourceLoadPriorityVeryHigh; |
| 117 case Resource::CSSStyleSheet: | 127 case Resource::CSSStyleSheet: |
| 118 return ResourceLoadPriorityHigh; | 128 return ResourceLoadPriorityHigh; |
| 119 case Resource::Script: | 129 case Resource::Script: |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 133 return ResourceLoadPriorityLow; | 143 return ResourceLoadPriorityLow; |
| 134 case Resource::TextTrack: | 144 case Resource::TextTrack: |
| 135 return ResourceLoadPriorityLow; | 145 return ResourceLoadPriorityLow; |
| 136 case Resource::Shader: | 146 case Resource::Shader: |
| 137 return ResourceLoadPriorityMedium; | 147 return ResourceLoadPriorityMedium; |
| 138 } | 148 } |
| 139 ASSERT_NOT_REACHED(); | 149 ASSERT_NOT_REACHED(); |
| 140 return ResourceLoadPriorityUnresolved; | 150 return ResourceLoadPriorityUnresolved; |
| 141 } | 151 } |
| 142 | 152 |
| 143 static Resource* resourceFromDataURIRequest(const ResourceRequest& request) | 153 Resource* resourceFromDataURIRequest(const ResourceRequest& request) |
| 144 { | 154 { |
| 145 const KURL& url = request.url(); | 155 const KURL& url = request.url(); |
| 146 ASSERT(url.protocolIsData()); | 156 ASSERT(url.protocolIsData()); |
| 147 | 157 |
| 148 WebKit::WebString mimetype; | 158 WebKit::WebString mimetype; |
| 149 WebKit::WebString charset; | 159 WebKit::WebString charset; |
| 150 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(WebKit::Platform::curre nt()->parseDataURL(url, mimetype, charset)); | 160 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(WebKit::Platform::curre nt()->parseDataURL(url, mimetype, charset)); |
| 151 if (!data) | 161 if (!data) |
| 152 return 0; | 162 return 0; |
| 153 ResourceResponse response(url, mimetype, data->size(), charset, String()); | 163 ResourceResponse response(url, mimetype, data->size(), charset, String()); |
| 154 | 164 |
| 155 Resource* resource = createResource(Resource::Image, request, charset); | 165 Resource* resource = createResource(Resource::Image, request, charset); |
| 156 resource->responseReceived(response); | 166 resource->responseReceived(response); |
| 157 // FIXME: AppendData causes an unnecessary memcpy. | 167 // FIXME: AppendData causes an unnecessary memcpy. |
| 158 if (data->size()) | 168 if (data->size()) |
| 159 resource->appendData(data->data(), data->size()); | 169 resource->appendData(data->data(), data->size()); |
| 160 resource->finish(); | 170 resource->finish(); |
| 161 return resource; | 171 return resource; |
| 162 } | 172 } |
| 163 | 173 |
| 174 } // namespace | |
| 175 | |
| 164 ResourceFetcher::ResourceFetcher(DocumentLoader* documentLoader) | 176 ResourceFetcher::ResourceFetcher(DocumentLoader* documentLoader) |
| 165 : m_document(0) | 177 : m_document(0) |
| 166 , m_documentLoader(documentLoader) | 178 , m_documentLoader(documentLoader) |
| 167 , m_requestCount(0) | 179 , m_requestCount(0) |
| 168 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl ectDocumentResourcesTimerFired) | 180 , m_garbageCollectDocumentResourcesTimer(this, &ResourceFetcher::garbageColl ectDocumentResourcesTimerFired) |
| 169 , m_autoLoadImages(true) | 181 , m_autoLoadImages(true) |
| 170 , m_imagesEnabled(true) | 182 , m_imagesEnabled(true) |
| 171 , m_allowStaleResources(false) | 183 , m_allowStaleResources(false) |
| 172 { | 184 { |
| 173 } | 185 } |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 534 // See if we can use an existing resource from the cache. | 546 // See if we can use an existing resource from the cache. |
| 535 ResourcePtr<Resource> resource = memoryCache()->resourceForURL(url); | 547 ResourcePtr<Resource> resource = memoryCache()->resourceForURL(url); |
| 536 | 548 |
| 537 const RevalidationPolicy policy = determineRevalidationPolicy(type, request. mutableResourceRequest(), request.forPreload(), resource.get(), request.defer()) ; | 549 const RevalidationPolicy policy = determineRevalidationPolicy(type, request. mutableResourceRequest(), request.forPreload(), resource.get(), request.defer()) ; |
| 538 switch (policy) { | 550 switch (policy) { |
| 539 case Reload: | 551 case Reload: |
| 540 memoryCache()->remove(resource.get()); | 552 memoryCache()->remove(resource.get()); |
| 541 // Fall through | 553 // Fall through |
| 542 case Load: | 554 case Load: |
| 543 resource = loadResource(type, request, request.charset()); | 555 resource = loadResource(type, request, request.charset()); |
| 556 HistogramSupport::histogramEnumeration( | |
| 557 "Renderer.ResourceFetcher.ActionUponResourceRequest", LoadResource, | |
|
abarth-chromium
2013/09/13 17:38:18
Renderer -> WebCore
Philippe
2013/09/16 11:47:21
Done.
| |
| 558 ActionUponResourceRequestBoundaryValue); | |
| 544 break; | 559 break; |
| 545 case Revalidate: | 560 case Revalidate: |
| 546 resource = revalidateResource(request, resource.get()); | 561 resource = revalidateResource(request, resource.get()); |
| 562 HistogramSupport::histogramEnumeration( | |
| 563 "Renderer.ResourceFetcher.ActionUponResourceRequest", RevalidateReso urce, | |
| 564 ActionUponResourceRequestBoundaryValue); | |
| 547 break; | 565 break; |
| 548 case Use: | 566 case Use: |
| 549 resource->updateForAccess(); | 567 resource->updateForAccess(); |
| 550 notifyLoadedFromMemoryCache(resource.get()); | 568 notifyLoadedFromMemoryCache(resource.get()); |
| 569 HistogramSupport::histogramEnumeration( | |
| 570 "Renderer.ResourceFetcher.ActionUponResourceRequest", UseResourceFro mCache, | |
| 571 ActionUponResourceRequestBoundaryValue); | |
| 572 HistogramSupport::histogramEnumeration( | |
| 573 "Renderer.ResourceFetcher.ResourceHasClientUponCacheHit", resource-> hasClients(), 2); | |
| 574 HistogramSupport::histogramEnumeration( | |
| 575 "Renderer.ResourceFetcher.ResourceTypeUponCacheHit", resource->type( ), | |
| 576 Resource::TypeBoundaryValue); | |
| 551 break; | 577 break; |
| 552 } | 578 } |
| 553 | 579 |
| 554 if (!resource) | 580 if (!resource) |
| 555 return 0; | 581 return 0; |
| 556 | 582 |
| 557 if (policy != Use) | 583 if (policy != Use) |
| 558 resource->setIdentifier(createUniqueIdentifier()); | 584 resource->setIdentifier(createUniqueIdentifier()); |
| 559 | 585 |
| 560 if (!request.forPreload() || policy != Use) { | 586 if (!request.forPreload() || policy != Use) { |
| (...skipping 749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1310 } | 1336 } |
| 1311 #endif | 1337 #endif |
| 1312 | 1338 |
| 1313 const ResourceLoaderOptions& ResourceFetcher::defaultResourceOptions() | 1339 const ResourceLoaderOptions& ResourceFetcher::defaultResourceOptions() |
| 1314 { | 1340 { |
| 1315 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul tOriginRestrictionsForType, DocumentContext)); | 1341 DEFINE_STATIC_LOCAL(ResourceLoaderOptions, options, (SendCallbacks, SniffCon tent, BufferData, AllowStoredCredentials, ClientRequestedCredentials, AskClientF orCrossOriginCredentials, DoSecurityCheck, CheckContentSecurityPolicy, UseDefaul tOriginRestrictionsForType, DocumentContext)); |
| 1316 return options; | 1342 return options; |
| 1317 } | 1343 } |
| 1318 | 1344 |
| 1319 } | 1345 } |
| OLD | NEW |