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

Side by Side Diff: Source/core/fetch/ResourceFetcher.cpp

Issue 355043002: Fix loading of data: URI images wrt loadsImagesAutomatically setting (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Addressed comments and fixed SVG image tests Created 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « LayoutTests/loader/data-uri-images-load-when-loading-images-automatically-disabled-expected.txt ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 return ResourceLoadPriorityVeryLow; 136 return ResourceLoadPriorityVeryLow;
137 case Resource::LinkSubresource: 137 case Resource::LinkSubresource:
138 return ResourceLoadPriorityLow; 138 return ResourceLoadPriorityLow;
139 case Resource::TextTrack: 139 case Resource::TextTrack:
140 return ResourceLoadPriorityLow; 140 return ResourceLoadPriorityLow;
141 } 141 }
142 ASSERT_NOT_REACHED(); 142 ASSERT_NOT_REACHED();
143 return ResourceLoadPriorityUnresolved; 143 return ResourceLoadPriorityUnresolved;
144 } 144 }
145 145
146 static Resource* resourceFromDataURIRequest(const ResourceRequest& request, cons t ResourceLoaderOptions& resourceOptions) 146 static Resource* imageResourceFromDataURIRequest(const ResourceRequest& request, const ResourceLoaderOptions& resourceOptions)
147 { 147 {
148 const KURL& url = request.url(); 148 const KURL& url = request.url();
149 ASSERT(url.protocolIsData()); 149 ASSERT(url.protocolIsData());
150 150
151 blink::WebString mimetype; 151 blink::WebString mimetype;
152 blink::WebString charset; 152 blink::WebString charset;
153 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(blink::Platform::curren t()->parseDataURL(url, mimetype, charset)); 153 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(blink::Platform::curren t()->parseDataURL(url, mimetype, charset));
154 if (!data) 154 if (!data || mimetype == "image/svg+xml")
eseidel 2014/06/26 17:37:17 Comments would be helpful. :)
155 return 0; 155 return 0;
156 ResourceResponse response(url, mimetype, data->size(), charset, String()); 156 ResourceResponse response(url, mimetype, data->size(), charset, String());
157 157
158 Resource* resource = createResource(Resource::Image, request, charset); 158 Resource* resource = createResource(Resource::Image, request, charset);
159 resource->setOptions(resourceOptions); 159 resource->setOptions(resourceOptions);
160 resource->responseReceived(response); 160 resource->responseReceived(response);
161 if (data->size()) 161 if (data->size())
162 resource->setResourceBuffer(data); 162 resource->setResourceBuffer(data);
163 resource->finish(); 163 resource->finish();
164 return resource; 164 return resource;
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 } 295 }
296 296
297 void ResourceFetcher::preCacheDataURIImage(const FetchRequest& request) 297 void ResourceFetcher::preCacheDataURIImage(const FetchRequest& request)
298 { 298 {
299 const KURL& url = request.resourceRequest().url(); 299 const KURL& url = request.resourceRequest().url();
300 ASSERT(url.protocolIsData()); 300 ASSERT(url.protocolIsData());
301 301
302 if (memoryCache()->resourceForURL(url)) 302 if (memoryCache()->resourceForURL(url))
303 return; 303 return;
304 304
305 if (Resource* resource = resourceFromDataURIRequest(request.resourceRequest( ), request.options())) { 305 if (Resource* resource = imageResourceFromDataURIRequest(request.resourceReq uest(), request.options())) {
306 memoryCache()->add(resource); 306 memoryCache()->add(resource);
307 scheduleDocumentResourcesGC(); 307 scheduleDocumentResourcesGC();
308 } 308 }
309 } 309 }
310 310
311 ResourcePtr<FontResource> ResourceFetcher::fetchFont(FetchRequest& request) 311 ResourcePtr<FontResource> ResourceFetcher::fetchFont(FetchRequest& request)
312 { 312 {
313 return toFontResource(requestResource(Resource::Font, request)); 313 return toFontResource(requestResource(Resource::Font, request));
314 } 314 }
315 315
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 return newResource; 863 return newResource;
864 } 864 }
865 865
866 ResourcePtr<Resource> ResourceFetcher::createResourceForLoading(Resource::Type t ype, FetchRequest& request, const String& charset) 866 ResourcePtr<Resource> ResourceFetcher::createResourceForLoading(Resource::Type t ype, FetchRequest& request, const String& charset)
867 { 867 {
868 ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url())); 868 ASSERT(!memoryCache()->resourceForURL(request.resourceRequest().url()));
869 869
870 WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceReque st().url().elidedString().latin1().data()); 870 WTF_LOG(ResourceLoading, "Loading Resource for '%s'.", request.resourceReque st().url().elidedString().latin1().data());
871 871
872 addAdditionalRequestHeaders(request.mutableResourceRequest(), type); 872 addAdditionalRequestHeaders(request.mutableResourceRequest(), type);
873 ResourcePtr<Resource> resource = createResource(type, request.resourceReques t(), charset); 873 ResourcePtr<Resource> resource;
874 // data: URI images are a special case because they must ignore autoLoadImag es setting.
875 if (type == Resource::Image && request.resourceRequest().url().protocolIsDat a())
eseidel 2014/06/26 17:37:17 Are any other callers going to want this wrapping
876 resource = imageResourceFromDataURIRequest(request.resourceRequest(), re quest.options());
877 if (!resource)
878 resource = createResource(type, request.resourceRequest(), charset);
874 879
875 memoryCache()->add(resource.get()); 880 memoryCache()->add(resource.get());
876 return resource; 881 return resource;
877 } 882 }
878 883
879 void ResourceFetcher::storeResourceTimingInitiatorInformation(Resource* resource ) 884 void ResourceFetcher::storeResourceTimingInitiatorInformation(Resource* resource )
880 { 885 {
881 if (resource->options().requestInitiatorContext != DocumentContext) 886 if (resource->options().requestInitiatorContext != DocumentContext)
882 return; 887 return;
883 888
(...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
1485 } 1490 }
1486 } 1491 }
1487 1492
1488 void ResourceFetcher::trace(Visitor* visitor) 1493 void ResourceFetcher::trace(Visitor* visitor)
1489 { 1494 {
1490 visitor->trace(m_document); 1495 visitor->trace(m_document);
1491 ResourceLoaderHost::trace(visitor); 1496 ResourceLoaderHost::trace(visitor);
1492 } 1497 }
1493 1498
1494 } 1499 }
OLDNEW
« no previous file with comments | « LayoutTests/loader/data-uri-images-load-when-loading-images-automatically-disabled-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698