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

Unified Diff: Source/core/fetch/ImageResource.cpp

Issue 1170503003: Remove resource type-specific fetching logic from ResourceFetcher (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Null-check Document::loader() before calling startPreload() Created 5 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/fetch/ImageResource.h ('k') | Source/core/fetch/ImageResourceTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/fetch/ImageResource.cpp
diff --git a/Source/core/fetch/ImageResource.cpp b/Source/core/fetch/ImageResource.cpp
index 148082b3acea4382870eaaba98be9d46295c5490..1028f311b68d14f8c1d52603480fa3fd3f349fb1 100644
--- a/Source/core/fetch/ImageResource.cpp
+++ b/Source/core/fetch/ImageResource.cpp
@@ -39,11 +39,60 @@
#include "platform/SharedBuffer.h"
#include "platform/TraceEvent.h"
#include "platform/graphics/BitmapImage.h"
+#include "public/platform/Platform.h"
#include "wtf/CurrentTime.h"
#include "wtf/StdLibExtras.h"
namespace blink {
+void ImageResource::preCacheDataURIImage(const FetchRequest& request, ResourceFetcher* fetcher)
+{
+ const KURL& url = request.resourceRequest().url();
+ ASSERT(url.protocolIsData());
+
+ const String cacheIdentifier = fetcher->getCacheIdentifier();
+ if (memoryCache()->resourceForURL(url, cacheIdentifier))
+ return;
+
+ WebString mimetype;
+ WebString charset;
+ RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(Platform::current()->parseDataURL(url, mimetype, charset));
+ if (!data)
+ return;
+ ResourceResponse response(url, mimetype, data->size(), charset, String());
+
+ Resource* resource = new ImageResource(request.resourceRequest());
+ resource->setOptions(request.options());
+ // FIXME: We should provide a body stream here.
+ resource->responseReceived(response, nullptr);
+ if (data->size())
+ resource->setResourceBuffer(data);
+ resource->setCacheIdentifier(cacheIdentifier);
+ resource->finish();
+ memoryCache()->add(resource);
+ fetcher->scheduleDocumentResourcesGC();
+}
+
+ResourcePtr<ImageResource> ImageResource::fetch(FetchRequest& request, ResourceFetcher* fetcher)
+{
+ if (request.resourceRequest().requestContext() == WebURLRequest::RequestContextUnspecified)
+ request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextImage);
+ if (fetcher->context().pageDismissalEventBeingDispatched()) {
+ KURL requestURL = request.resourceRequest().url();
+ if (requestURL.isValid() && fetcher->context().canRequest(Resource::Image, request.resourceRequest(), requestURL, request.options(), request.forPreload(), request.originRestriction()))
+ fetcher->context().sendImagePing(requestURL);
+ return 0;
+ }
+
+ if (request.resourceRequest().url().protocolIsData())
+ ImageResource::preCacheDataURIImage(request, fetcher);
+
+ if (fetcher->clientDefersImage(request.resourceRequest().url()))
+ request.setDefer(FetchRequest::DeferredByClient);
+
+ return toImageResource(fetcher->requestResource(request, ImageResourceFactory()));
+}
+
ImageResource::ImageResource(const ResourceRequest& resourceRequest)
: Resource(resourceRequest, Image)
, m_devicePixelRatioHeaderValue(1.0)
« no previous file with comments | « Source/core/fetch/ImageResource.h ('k') | Source/core/fetch/ImageResourceTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698