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 |