| 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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 return ResourceLoadPriorityLow; | 107 return ResourceLoadPriorityLow; |
| 108 case Resource::LinkPrefetch: | 108 case Resource::LinkPrefetch: |
| 109 return ResourceLoadPriorityVeryLow; | 109 return ResourceLoadPriorityVeryLow; |
| 110 case Resource::LinkSubresource: | 110 case Resource::LinkSubresource: |
| 111 return ResourceLoadPriorityLow; | 111 return ResourceLoadPriorityLow; |
| 112 } | 112 } |
| 113 ASSERT_NOT_REACHED(); | 113 ASSERT_NOT_REACHED(); |
| 114 return ResourceLoadPriorityUnresolved; | 114 return ResourceLoadPriorityUnresolved; |
| 115 } | 115 } |
| 116 | 116 |
| 117 static Resource* resourceFromDataURIRequest(const ResourceRequest& request, cons
t ResourceLoaderOptions& resourceOptions) | |
| 118 { | |
| 119 const KURL& url = request.url(); | |
| 120 ASSERT(url.protocolIsData()); | |
| 121 | |
| 122 blink::WebString mimetype; | |
| 123 blink::WebString charset; | |
| 124 RefPtr<SharedBuffer> data = PassRefPtr<SharedBuffer>(blink::Platform::curren
t()->parseDataURL(url, mimetype, charset)); | |
| 125 if (!data) | |
| 126 return 0; | |
| 127 ResourceResponse response(url, mimetype, data->size(), charset, String()); | |
| 128 | |
| 129 Resource* resource = createResource(Resource::Image, request, charset); | |
| 130 resource->setOptions(resourceOptions); | |
| 131 resource->responseReceived(response); | |
| 132 if (data->size()) | |
| 133 resource->setResourceBuffer(data); | |
| 134 resource->finish(); | |
| 135 return resource; | |
| 136 } | |
| 137 | |
| 138 static WebURLRequest::RequestContext requestContextFromType(const ResourceFetche
r* fetcher, Resource::Type type) | 117 static WebURLRequest::RequestContext requestContextFromType(const ResourceFetche
r* fetcher, Resource::Type type) |
| 139 { | 118 { |
| 140 switch (type) { | 119 switch (type) { |
| 141 case Resource::MainResource: | 120 case Resource::MainResource: |
| 142 // FIXME: Change this to a context frame type (once we introduce them):
http://fetch.spec.whatwg.org/#concept-request-context-frame-type | 121 // FIXME: Change this to a context frame type (once we introduce them):
http://fetch.spec.whatwg.org/#concept-request-context-frame-type |
| 143 return WebURLRequest::RequestContextHyperlink; | 122 return WebURLRequest::RequestContextHyperlink; |
| 144 case Resource::Font: | 123 case Resource::Font: |
| 145 return WebURLRequest::RequestContextFont; | 124 return WebURLRequest::RequestContextFont; |
| 146 case Resource::Image: | 125 case Resource::Image: |
| 147 return WebURLRequest::RequestContextImage; | 126 return WebURLRequest::RequestContextImage; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 | 179 |
| 201 FetchContext& ResourceFetcher::context() const | 180 FetchContext& ResourceFetcher::context() const |
| 202 { | 181 { |
| 203 if (LocalFrame* frame = this->frame()) | 182 if (LocalFrame* frame = this->frame()) |
| 204 return frame->fetchContext(); | 183 return frame->fetchContext(); |
| 205 return FetchContext::nullInstance(); | 184 return FetchContext::nullInstance(); |
| 206 } | 185 } |
| 207 | 186 |
| 208 ResourcePtr<ImageResource> ResourceFetcher::fetchImage(FetchRequest& request) | 187 ResourcePtr<ImageResource> ResourceFetcher::fetchImage(FetchRequest& request) |
| 209 { | 188 { |
| 210 if (request.resourceRequest().url().protocolIsData()) | |
| 211 preCacheDataURIImage(request); | |
| 212 | |
| 213 request.setDefer(clientDefersImage(request.resourceRequest().url()) ? FetchR
equest::DeferredByClient : FetchRequest::NoDefer); | 189 request.setDefer(clientDefersImage(request.resourceRequest().url()) ? FetchR
equest::DeferredByClient : FetchRequest::NoDefer); |
| 214 ResourcePtr<Resource> resource = requestResource(Resource::Image, request); | 190 ResourcePtr<Resource> resource = requestResource(Resource::Image, request); |
| 215 return resource && resource->type() == Resource::Image ? toImageResource(res
ource) : 0; | 191 return resource && resource->type() == Resource::Image ? toImageResource(res
ource) : 0; |
| 216 } | 192 } |
| 217 | 193 |
| 218 void ResourceFetcher::preCacheDataURIImage(const FetchRequest& request) | |
| 219 { | |
| 220 const KURL& url = request.resourceRequest().url(); | |
| 221 ASSERT(url.protocolIsData()); | |
| 222 | |
| 223 if (memoryCache()->resourceForURL(url)) | |
| 224 return; | |
| 225 | |
| 226 if (Resource* resource = resourceFromDataURIRequest(request.resourceRequest(
), request.options())) { | |
| 227 memoryCache()->add(resource); | |
| 228 scheduleDocumentResourcesGC(); | |
| 229 } | |
| 230 } | |
| 231 | |
| 232 ResourcePtr<FontResource> ResourceFetcher::fetchFont(FetchRequest& request) | 194 ResourcePtr<FontResource> ResourceFetcher::fetchFont(FetchRequest& request) |
| 233 { | 195 { |
| 234 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone
); | 196 ASSERT(request.resourceRequest().frameType() == WebURLRequest::FrameTypeNone
); |
| 235 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon
textFont); | 197 request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestCon
textFont); |
| 236 return toFontResource(requestResource(Resource::Font, request)); | 198 return toFontResource(requestResource(Resource::Font, request)); |
| 237 } | 199 } |
| 238 | 200 |
| 239 bool ResourceFetcher::canRequest(Resource::Type type, const KURL& url, const Res
ourceLoaderOptions& options, bool forPreload, FetchRequest::OriginRestriction or
iginRestriction) const | 201 bool ResourceFetcher::canRequest(Resource::Type type, const KURL& url, const Res
ourceLoaderOptions& options, bool forPreload, FetchRequest::OriginRestriction or
iginRestriction) const |
| 240 { | 202 { |
| 241 // FIXME(sky): Remove | 203 // FIXME(sky): Remove |
| (...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 930 case Revalidate: | 892 case Revalidate: |
| 931 ++m_revalidateCount; | 893 ++m_revalidateCount; |
| 932 return; | 894 return; |
| 933 case Use: | 895 case Use: |
| 934 ++m_useCount; | 896 ++m_useCount; |
| 935 return; | 897 return; |
| 936 } | 898 } |
| 937 } | 899 } |
| 938 | 900 |
| 939 } | 901 } |
| OLD | NEW |