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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 43 #include "core/loader/PingLoader.h" | 43 #include "core/loader/PingLoader.h" |
| 44 #include "core/loader/UniqueIdentifier.h" | 44 #include "core/loader/UniqueIdentifier.h" |
| 45 #include "core/loader/cache/CachedCSSStyleSheet.h" | 45 #include "core/loader/cache/CachedCSSStyleSheet.h" |
| 46 #include "core/loader/cache/CachedDocument.h" | 46 #include "core/loader/cache/CachedDocument.h" |
| 47 #include "core/loader/cache/CachedFont.h" | 47 #include "core/loader/cache/CachedFont.h" |
| 48 #include "core/loader/cache/CachedImage.h" | 48 #include "core/loader/cache/CachedImage.h" |
| 49 #include "core/loader/cache/CachedRawResource.h" | 49 #include "core/loader/cache/CachedRawResource.h" |
| 50 #include "core/loader/cache/CachedResourceRequest.h" | 50 #include "core/loader/cache/CachedResourceRequest.h" |
| 51 #include "core/loader/cache/CachedScript.h" | 51 #include "core/loader/cache/CachedScript.h" |
| 52 #include "core/loader/cache/CachedShader.h" | 52 #include "core/loader/cache/CachedShader.h" |
| 53 #include "core/loader/cache/CachedTextTrack.h" | |
| 53 #include "core/loader/cache/CachedXSLStyleSheet.h" | 54 #include "core/loader/cache/CachedXSLStyleSheet.h" |
| 54 #include "core/loader/cache/MemoryCache.h" | 55 #include "core/loader/cache/MemoryCache.h" |
| 55 #include "core/page/Console.h" | 56 #include "core/page/Console.h" |
| 56 #include "core/page/ContentSecurityPolicy.h" | 57 #include "core/page/ContentSecurityPolicy.h" |
| 57 #include "core/page/DOMWindow.h" | 58 #include "core/page/DOMWindow.h" |
| 58 #include "core/page/Frame.h" | 59 #include "core/page/Frame.h" |
| 59 #include "core/page/Performance.h" | 60 #include "core/page/Performance.h" |
| 60 #include "core/page/Settings.h" | 61 #include "core/page/Settings.h" |
| 61 #include "core/platform/Logging.h" | 62 #include "core/platform/Logging.h" |
| 63 #include "public/platform/Platform.h" | |
| 64 #include "public/platform/WebURL.h" | |
| 62 #include "weborigin/SecurityOrigin.h" | 65 #include "weborigin/SecurityOrigin.h" |
| 63 #include "weborigin/SecurityPolicy.h" | 66 #include "weborigin/SecurityPolicy.h" |
| 64 | 67 |
| 65 #include "core/loader/cache/CachedTextTrack.h" | |
| 66 | |
| 67 #define PRELOAD_DEBUG 0 | 68 #define PRELOAD_DEBUG 0 |
| 68 | 69 |
| 69 namespace WebCore { | 70 namespace WebCore { |
| 70 | 71 |
| 71 static CachedResource* createResource(CachedResource::Type type, ResourceRequest & request, const String& charset) | 72 static CachedResource* createResource(CachedResource::Type type, ResourceRequest & request, const String& charset) |
| 72 { | 73 { |
| 73 switch (type) { | 74 switch (type) { |
| 74 case CachedResource::ImageResource: | 75 case CachedResource::ImageResource: |
| 75 return new CachedImage(request); | 76 return new CachedImage(request); |
| 76 case CachedResource::CSSStyleSheet: | 77 case CachedResource::CSSStyleSheet: |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 92 return new CachedResource(request, CachedResource::LinkSubresource); | 93 return new CachedResource(request, CachedResource::LinkSubresource); |
| 93 case CachedResource::TextTrackResource: | 94 case CachedResource::TextTrackResource: |
| 94 return new CachedTextTrack(request); | 95 return new CachedTextTrack(request); |
| 95 case CachedResource::ShaderResource: | 96 case CachedResource::ShaderResource: |
| 96 return new CachedShader(request); | 97 return new CachedShader(request); |
| 97 } | 98 } |
| 98 ASSERT_NOT_REACHED(); | 99 ASSERT_NOT_REACHED(); |
| 99 return 0; | 100 return 0; |
| 100 } | 101 } |
| 101 | 102 |
| 103 static CachedResource* resourceFromDataURIRequest(ResourceRequest& request) | |
| 104 { | |
| 105 const KURL& url = request.url(); | |
| 106 ASSERT(url.protocolIsData()); | |
| 107 | |
| 108 WebKit::WebString mimetype; | |
| 109 WebKit::WebString charset; | |
| 110 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(WebKit::Platform::curre nt()->parseDataURL(url, mimetype, charset)); | |
| 111 if (!data) | |
| 112 return 0; | |
| 113 ResourceResponse response(url, mimetype, data->size(), charset, String()); | |
| 114 | |
| 115 CachedResource* resource = createResource(CachedResource::ImageResource, req uest, charset); | |
|
abarth-chromium
2013/06/07 20:36:11
We'll eventually want to expand this beyond just i
| |
| 116 resource->responseReceived(response); | |
| 117 // FIXME: AppendData caises an unnecessary memcpy. | |
|
abarth-chromium
2013/06/07 20:36:11
caises -> causes
pdr.
2013/06/07 22:00:23
Done.
| |
| 118 if (data->size()) | |
| 119 resource->appendData(data->data(), data->size()); | |
| 120 resource->finish(); | |
| 121 return resource; | |
| 122 } | |
| 123 | |
| 102 CachedResourceLoader::CachedResourceLoader(DocumentLoader* documentLoader) | 124 CachedResourceLoader::CachedResourceLoader(DocumentLoader* documentLoader) |
| 103 : m_document(0) | 125 : m_document(0) |
| 104 , m_documentLoader(documentLoader) | 126 , m_documentLoader(documentLoader) |
| 105 , m_requestCount(0) | 127 , m_requestCount(0) |
| 106 , m_garbageCollectDocumentResourcesTimer(this, &CachedResourceLoader::garbag eCollectDocumentResourcesTimerFired) | 128 , m_garbageCollectDocumentResourcesTimer(this, &CachedResourceLoader::garbag eCollectDocumentResourcesTimerFired) |
| 107 , m_autoLoadImages(true) | 129 , m_autoLoadImages(true) |
| 108 , m_imagesEnabled(true) | 130 , m_imagesEnabled(true) |
| 109 , m_allowStaleResources(false) | 131 , m_allowStaleResources(false) |
| 110 { | 132 { |
| 111 } | 133 } |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 141 CachedResourceHandle<CachedImage> CachedResourceLoader::requestImage(CachedResou rceRequest& request) | 163 CachedResourceHandle<CachedImage> CachedResourceLoader::requestImage(CachedResou rceRequest& request) |
| 142 { | 164 { |
| 143 if (Frame* f = frame()) { | 165 if (Frame* f = frame()) { |
| 144 if (f->loader()->pageDismissalEventBeingDispatched() != FrameLoader::NoD ismissal) { | 166 if (f->loader()->pageDismissalEventBeingDispatched() != FrameLoader::NoD ismissal) { |
| 145 KURL requestURL = request.resourceRequest().url(); | 167 KURL requestURL = request.resourceRequest().url(); |
| 146 if (requestURL.isValid() && canRequest(CachedResource::ImageResource , requestURL, CheckContentSecurityPolicy)) | 168 if (requestURL.isValid() && canRequest(CachedResource::ImageResource , requestURL, CheckContentSecurityPolicy)) |
| 147 PingLoader::loadImage(f, requestURL); | 169 PingLoader::loadImage(f, requestURL); |
| 148 return 0; | 170 return 0; |
| 149 } | 171 } |
| 150 } | 172 } |
| 173 | |
| 174 if (request.resourceRequest().url().protocolIsData()) | |
| 175 preCacheDataURIImage(request); | |
| 176 | |
| 151 request.setDefer(clientDefersImage(request.resourceRequest().url()) ? Cached ResourceRequest::DeferredByClient : CachedResourceRequest::NoDefer); | 177 request.setDefer(clientDefersImage(request.resourceRequest().url()) ? Cached ResourceRequest::DeferredByClient : CachedResourceRequest::NoDefer); |
| 152 return static_cast<CachedImage*>(requestResource(CachedResource::ImageResour ce, request).get()); | 178 return static_cast<CachedImage*>(requestResource(CachedResource::ImageResour ce, request).get()); |
| 153 } | 179 } |
| 154 | 180 |
| 181 void CachedResourceLoader::preCacheDataURIImage(CachedResourceRequest& request) | |
| 182 { | |
| 183 const KURL& url = request.resourceRequest().url(); | |
| 184 ASSERT(url.protocolIsData()); | |
| 185 | |
| 186 if (CachedResource* existing = memoryCache()->resourceForURL(url)) { | |
| 187 if (existing->type() == CachedResource::ImageResource) | |
| 188 return; | |
| 189 memoryCache()->remove(existing); // Cache entry is incorrect. | |
|
abarth-chromium
2013/06/07 20:36:11
Is there a test for this case?
pdr.
2013/06/07 22:00:23
I don't think a test can hit this codepath. I trie
| |
| 190 } | |
| 191 | |
| 192 if (CachedResource* resource = resourceFromDataURIRequest(request.mutableRes ourceRequest())) | |
|
abarth-chromium
2013/06/07 20:36:11
Why does this need to be mutable? It doesn't seem
pdr.
2013/06/07 22:00:23
Nope! Required some minor fixups to make this true
| |
| 193 memoryCache()->add(resource); | |
| 194 } | |
| 195 | |
| 155 CachedResourceHandle<CachedFont> CachedResourceLoader::requestFont(CachedResourc eRequest& request) | 196 CachedResourceHandle<CachedFont> CachedResourceLoader::requestFont(CachedResourc eRequest& request) |
| 156 { | 197 { |
| 157 return static_cast<CachedFont*>(requestResource(CachedResource::FontResource , request).get()); | 198 return static_cast<CachedFont*>(requestResource(CachedResource::FontResource , request).get()); |
| 158 } | 199 } |
| 159 | 200 |
| 160 CachedResourceHandle<CachedTextTrack> CachedResourceLoader::requestTextTrack(Cac hedResourceRequest& request) | 201 CachedResourceHandle<CachedTextTrack> CachedResourceLoader::requestTextTrack(Cac hedResourceRequest& request) |
| 161 { | 202 { |
| 162 return static_cast<CachedTextTrack*>(requestResource(CachedResource::TextTra ckResource, request).get()); | 203 return static_cast<CachedTextTrack*>(requestResource(CachedResource::TextTra ckResource, request).get()); |
| 163 } | 204 } |
| 164 | 205 |
| (...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1027 info.addMember(m_garbageCollectDocumentResourcesTimer, "garbageCollectDocume ntResourcesTimer"); | 1068 info.addMember(m_garbageCollectDocumentResourcesTimer, "garbageCollectDocume ntResourcesTimer"); |
| 1028 } | 1069 } |
| 1029 | 1070 |
| 1030 const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions( ) | 1071 const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions( ) |
| 1031 { | 1072 { |
| 1032 static ResourceLoaderOptions options(SendCallbacks, SniffContent, BufferData , AllowStoredCredentials, ClientRequestedCredentials, AskClientForCrossOriginCre dentials, DoSecurityCheck, CheckContentSecurityPolicy); | 1073 static ResourceLoaderOptions options(SendCallbacks, SniffContent, BufferData , AllowStoredCredentials, ClientRequestedCredentials, AskClientForCrossOriginCre dentials, DoSecurityCheck, CheckContentSecurityPolicy); |
| 1033 return options; | 1074 return options; |
| 1034 } | 1075 } |
| 1035 | 1076 |
| 1036 } | 1077 } |
| OLD | NEW |