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 KURL url = request.url(); | |
abarth-chromium
2013/06/05 23:42:51
this can be a const KURL& rather than a KURL
pdr.
2013/06/05 23:53:25
Done.
| |
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 || !data->size()) | |
abarth-chromium
2013/06/05 23:42:51
Checking the size here doesn't seem right. It's b
pdr.
2013/06/05 23:53:25
Done.
| |
112 return 0; | |
113 ResourceResponse response(url, mimetype, data->size(), charset, String()); | |
114 | |
115 CachedResource* resource = createResource(CachedResource::ImageResource, req uest, charset); | |
116 resource->responseReceived(response); | |
117 // FIXME: This is an unnecessary memcpy. | |
118 resource->appendData(data->data(), data->size()); | |
119 resource->finish(); | |
120 return resource; | |
121 } | |
122 | |
102 CachedResourceLoader::CachedResourceLoader(DocumentLoader* documentLoader) | 123 CachedResourceLoader::CachedResourceLoader(DocumentLoader* documentLoader) |
103 : m_document(0) | 124 : m_document(0) |
104 , m_documentLoader(documentLoader) | 125 , m_documentLoader(documentLoader) |
105 , m_requestCount(0) | 126 , m_requestCount(0) |
106 , m_garbageCollectDocumentResourcesTimer(this, &CachedResourceLoader::garbag eCollectDocumentResourcesTimerFired) | 127 , m_garbageCollectDocumentResourcesTimer(this, &CachedResourceLoader::garbag eCollectDocumentResourcesTimerFired) |
107 , m_autoLoadImages(true) | 128 , m_autoLoadImages(true) |
108 , m_imagesEnabled(true) | 129 , m_imagesEnabled(true) |
109 , m_allowStaleResources(false) | 130 , m_allowStaleResources(false) |
110 { | 131 { |
111 } | 132 } |
(...skipping 29 matching lines...) Expand all Loading... | |
141 CachedResourceHandle<CachedImage> CachedResourceLoader::requestImage(CachedResou rceRequest& request) | 162 CachedResourceHandle<CachedImage> CachedResourceLoader::requestImage(CachedResou rceRequest& request) |
142 { | 163 { |
143 if (Frame* f = frame()) { | 164 if (Frame* f = frame()) { |
144 if (f->loader()->pageDismissalEventBeingDispatched() != FrameLoader::NoD ismissal) { | 165 if (f->loader()->pageDismissalEventBeingDispatched() != FrameLoader::NoD ismissal) { |
145 KURL requestURL = request.resourceRequest().url(); | 166 KURL requestURL = request.resourceRequest().url(); |
146 if (requestURL.isValid() && canRequest(CachedResource::ImageResource , requestURL, CheckContentSecurityPolicy)) | 167 if (requestURL.isValid() && canRequest(CachedResource::ImageResource , requestURL, CheckContentSecurityPolicy)) |
147 PingLoader::loadImage(f, requestURL); | 168 PingLoader::loadImage(f, requestURL); |
148 return 0; | 169 return 0; |
149 } | 170 } |
150 } | 171 } |
172 | |
173 if (request.resourceRequest().url().protocolIsData()) | |
174 preCacheDataURIImage(request); | |
Nate Chapin
2013/06/05 23:50:54
Should this early return? Otherwise, won't we run
pdr.
2013/06/05 23:53:25
That's the idea: we pre-populate the memory cache
| |
175 | |
151 request.setDefer(clientDefersImage(request.resourceRequest().url()) ? Cached ResourceRequest::DeferredByClient : CachedResourceRequest::NoDefer); | 176 request.setDefer(clientDefersImage(request.resourceRequest().url()) ? Cached ResourceRequest::DeferredByClient : CachedResourceRequest::NoDefer); |
152 return static_cast<CachedImage*>(requestResource(CachedResource::ImageResour ce, request).get()); | 177 return static_cast<CachedImage*>(requestResource(CachedResource::ImageResour ce, request).get()); |
153 } | 178 } |
154 | 179 |
180 void CachedResourceLoader::preCacheDataURIImage(CachedResourceRequest& request) | |
181 { | |
182 KURL url = request.resourceRequest().url(); | |
abarth-chromium
2013/06/05 23:42:51
const KURL&
pdr.
2013/06/05 23:53:25
Done.
| |
183 ASSERT(url.protocolIsData()); | |
184 | |
185 if (CachedResource* existing = memoryCache()->resourceForURL(url)) { | |
186 if (existing->type() == CachedResource::ImageResource) | |
187 return; | |
188 memoryCache()->remove(existing); // Cache entry is incorrect. | |
189 } | |
190 | |
191 if (CachedResource* resource = resourceFromDataURIRequest(request.mutableRes ourceRequest())) | |
192 memoryCache()->add(resource); | |
193 } | |
194 | |
155 CachedResourceHandle<CachedFont> CachedResourceLoader::requestFont(CachedResourc eRequest& request) | 195 CachedResourceHandle<CachedFont> CachedResourceLoader::requestFont(CachedResourc eRequest& request) |
156 { | 196 { |
157 return static_cast<CachedFont*>(requestResource(CachedResource::FontResource , request).get()); | 197 return static_cast<CachedFont*>(requestResource(CachedResource::FontResource , request).get()); |
158 } | 198 } |
159 | 199 |
160 CachedResourceHandle<CachedTextTrack> CachedResourceLoader::requestTextTrack(Cac hedResourceRequest& request) | 200 CachedResourceHandle<CachedTextTrack> CachedResourceLoader::requestTextTrack(Cac hedResourceRequest& request) |
161 { | 201 { |
162 return static_cast<CachedTextTrack*>(requestResource(CachedResource::TextTra ckResource, request).get()); | 202 return static_cast<CachedTextTrack*>(requestResource(CachedResource::TextTra ckResource, request).get()); |
163 } | 203 } |
164 | 204 |
(...skipping 862 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1027 info.addMember(m_garbageCollectDocumentResourcesTimer, "garbageCollectDocume ntResourcesTimer"); | 1067 info.addMember(m_garbageCollectDocumentResourcesTimer, "garbageCollectDocume ntResourcesTimer"); |
1028 } | 1068 } |
1029 | 1069 |
1030 const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions( ) | 1070 const ResourceLoaderOptions& CachedResourceLoader::defaultCachedResourceOptions( ) |
1031 { | 1071 { |
1032 static ResourceLoaderOptions options(SendCallbacks, SniffContent, BufferData , AllowStoredCredentials, ClientRequestedCredentials, AskClientForCrossOriginCre dentials, DoSecurityCheck, CheckContentSecurityPolicy); | 1072 static ResourceLoaderOptions options(SendCallbacks, SniffContent, BufferData , AllowStoredCredentials, ClientRequestedCredentials, AskClientForCrossOriginCre dentials, DoSecurityCheck, CheckContentSecurityPolicy); |
1033 return options; | 1073 return options; |
1034 } | 1074 } |
1035 | 1075 |
1036 } | 1076 } |
OLD | NEW |