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

Unified Diff: Source/core/loader/cache/CachedResourceLoader.cpp

Issue 16433002: Prepopulate the memoryCache with data:uri images. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Address reviewer comments Created 7 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/loader/cache/CachedResourceLoader.h ('k') | public/platform/Platform.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/loader/cache/CachedResourceLoader.cpp
diff --git a/Source/core/loader/cache/CachedResourceLoader.cpp b/Source/core/loader/cache/CachedResourceLoader.cpp
index b5ca77c14353e4b5fd59767861482c1cb8e02bd3..11cfbec7beb80f721e429694d6150b4403bdcfc1 100644
--- a/Source/core/loader/cache/CachedResourceLoader.cpp
+++ b/Source/core/loader/cache/CachedResourceLoader.cpp
@@ -50,6 +50,7 @@
#include "core/loader/cache/CachedResourceRequest.h"
#include "core/loader/cache/CachedScript.h"
#include "core/loader/cache/CachedShader.h"
+#include "core/loader/cache/CachedTextTrack.h"
#include "core/loader/cache/CachedXSLStyleSheet.h"
#include "core/loader/cache/MemoryCache.h"
#include "core/page/Console.h"
@@ -59,11 +60,11 @@
#include "core/page/Performance.h"
#include "core/page/Settings.h"
#include "core/platform/Logging.h"
+#include "public/platform/Platform.h"
+#include "public/platform/WebURL.h"
#include "weborigin/SecurityOrigin.h"
#include "weborigin/SecurityPolicy.h"
-#include "core/loader/cache/CachedTextTrack.h"
-
#define PRELOAD_DEBUG 0
namespace WebCore {
@@ -99,6 +100,27 @@ static CachedResource* createResource(CachedResource::Type type, ResourceRequest
return 0;
}
+static CachedResource* resourceFromDataURIRequest(ResourceRequest& request)
+{
+ const KURL& url = request.url();
+ ASSERT(url.protocolIsData());
+
+ WebKit::WebString mimetype;
+ WebKit::WebString charset;
+ RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(WebKit::Platform::current()->parseDataURL(url, mimetype, charset));
+ if (!data)
+ return 0;
+ ResourceResponse response(url, mimetype, data->size(), charset, String());
+
+ CachedResource* resource = createResource(CachedResource::ImageResource, request, charset);
abarth-chromium 2013/06/07 20:36:11 We'll eventually want to expand this beyond just i
+ resource->responseReceived(response);
+ // FIXME: AppendData caises an unnecessary memcpy.
abarth-chromium 2013/06/07 20:36:11 caises -> causes
pdr. 2013/06/07 22:00:23 Done.
+ if (data->size())
+ resource->appendData(data->data(), data->size());
+ resource->finish();
+ return resource;
+}
+
CachedResourceLoader::CachedResourceLoader(DocumentLoader* documentLoader)
: m_document(0)
, m_documentLoader(documentLoader)
@@ -148,10 +170,29 @@ CachedResourceHandle<CachedImage> CachedResourceLoader::requestImage(CachedResou
return 0;
}
}
+
+ if (request.resourceRequest().url().protocolIsData())
+ preCacheDataURIImage(request);
+
request.setDefer(clientDefersImage(request.resourceRequest().url()) ? CachedResourceRequest::DeferredByClient : CachedResourceRequest::NoDefer);
return static_cast<CachedImage*>(requestResource(CachedResource::ImageResource, request).get());
}
+void CachedResourceLoader::preCacheDataURIImage(CachedResourceRequest& request)
+{
+ const KURL& url = request.resourceRequest().url();
+ ASSERT(url.protocolIsData());
+
+ if (CachedResource* existing = memoryCache()->resourceForURL(url)) {
+ if (existing->type() == CachedResource::ImageResource)
+ return;
+ 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
+ }
+
+ if (CachedResource* resource = resourceFromDataURIRequest(request.mutableResourceRequest()))
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
+ memoryCache()->add(resource);
+}
+
CachedResourceHandle<CachedFont> CachedResourceLoader::requestFont(CachedResourceRequest& request)
{
return static_cast<CachedFont*>(requestResource(CachedResource::FontResource, request).get());
« no previous file with comments | « Source/core/loader/cache/CachedResourceLoader.h ('k') | public/platform/Platform.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698