Index: chrome/browser/net/blob_url_request_job_factory.cc |
=================================================================== |
--- chrome/browser/net/blob_url_request_job_factory.cc (revision 60837) |
+++ chrome/browser/net/blob_url_request_job_factory.cc (working copy) |
@@ -7,6 +7,8 @@ |
#include "chrome/browser/chrome_blob_storage_context.h" |
#include "chrome/browser/chrome_thread.h" |
#include "chrome/browser/net/chrome_url_request_context.h" |
+#include "chrome/browser/renderer_host/resource_dispatcher_host.h" |
+#include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h" |
#include "chrome/common/url_constants.h" |
#include "webkit/blob/blob_storage_controller.h" |
#include "webkit/blob/blob_url_request_job.h" |
@@ -15,12 +17,20 @@ |
URLRequestJob* BlobURLRequestJobFactory(URLRequest* request, |
const std::string& scheme) { |
- webkit_blob::BlobStorageController* blob_storage_controller = |
- static_cast<ChromeURLRequestContext*>(request->context())-> |
- blob_storage_context()->controller(); |
+ scoped_refptr<webkit_blob::BlobData> data; |
+ ResourceDispatcherHostRequestInfo* info = |
+ ResourceDispatcherHost::InfoForRequest(request); |
+ if (info) { |
+ // Resource dispatcher host already looked up the blob data. |
+ data = info->requested_blob_data(); |
+ } else { |
+ // This request is not coming thru resource dispatcher host. |
+ data = static_cast<ChromeURLRequestContext*>(request->context())-> |
+ blob_storage_context()-> |
+ controller()->GetBlobDataFromUrl(request->url()); |
+ } |
return new webkit_blob::BlobURLRequestJob( |
- request, |
- blob_storage_controller->GetBlobDataFromUrl(request->url()), |
+ request, data, |
ChromeThread::GetMessageLoopProxyForThread(ChromeThread::FILE)); |
} |