| Index: webkit/browser/blob/blob_url_request_job_factory.cc
|
| diff --git a/webkit/browser/blob/blob_url_request_job_factory.cc b/webkit/browser/blob/blob_url_request_job_factory.cc
|
| index cc600d1c228aa0d7ce467d5dd2160df67f939b0a..18198383c6e3eeb85801722b0821341ad2dcab54 100644
|
| --- a/webkit/browser/blob/blob_url_request_job_factory.cc
|
| +++ b/webkit/browser/blob/blob_url_request_job_factory.cc
|
| @@ -7,44 +7,65 @@
|
| #include "base/basictypes.h"
|
| #include "base/compiler_specific.h"
|
| #include "base/message_loop/message_loop_proxy.h"
|
| -#include "net/url_request/url_request.h"
|
| +#include "net/url_request/url_request_context.h"
|
| #include "net/url_request/url_request_job_factory.h"
|
| -#include "webkit/browser/blob/blob_storage_controller.h"
|
| +#include "webkit/browser/blob/blob_data_handle.h"
|
| #include "webkit/browser/blob/blob_url_request_job.h"
|
| #include "webkit/browser/fileapi/file_system_context.h"
|
|
|
| namespace webkit_blob {
|
|
|
| +namespace {
|
| +
|
| +int kUserDataKey; // The value is not important, the addr is a key.
|
| +
|
| +BlobDataHandle* GetRequestedBlobDataHandle(net::URLRequest* request) {
|
| + return static_cast<BlobDataHandle*>(request->GetUserData(&kUserDataKey));
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +// static
|
| +net::URLRequest* BlobProtocolHandler::CreateBlobRequest(
|
| + scoped_ptr<BlobDataHandle> blob_data_handle,
|
| + const net::URLRequestContext* request_context,
|
| + net::URLRequest::Delegate* request_delegate) {
|
| + const GURL kBlobUrl("blob://see_user_data/");
|
| + net::URLRequest* request = request_context->CreateRequest(
|
| + kBlobUrl, request_delegate);
|
| + SetRequestedBlobDataHandle(request, blob_data_handle.Pass());
|
| + return request;
|
| +}
|
| +
|
| +// static
|
| +void BlobProtocolHandler::SetRequestedBlobDataHandle(
|
| + net::URLRequest* request,
|
| + scoped_ptr<BlobDataHandle> blob_data_handle) {
|
| + request->SetUserData(&kUserDataKey, blob_data_handle.release());
|
| +}
|
| +
|
| BlobProtocolHandler::BlobProtocolHandler(
|
| - webkit_blob::BlobStorageController* blob_storage_controller,
|
| fileapi::FileSystemContext* file_system_context,
|
| base::MessageLoopProxy* loop_proxy)
|
| - : blob_storage_controller_(blob_storage_controller),
|
| - file_system_context_(file_system_context),
|
| + : file_system_context_(file_system_context),
|
| file_loop_proxy_(loop_proxy) {
|
| - DCHECK(blob_storage_controller_);
|
| - DCHECK(file_system_context_.get());
|
| - DCHECK(file_loop_proxy_.get());
|
| }
|
|
|
| -BlobProtocolHandler::~BlobProtocolHandler() {}
|
| +BlobProtocolHandler::~BlobProtocolHandler() {
|
| +}
|
|
|
| net::URLRequestJob* BlobProtocolHandler::MaybeCreateJob(
|
| net::URLRequest* request, net::NetworkDelegate* network_delegate) const {
|
| - scoped_refptr<webkit_blob::BlobData> data = LookupBlobData(request);
|
| - if (!data.get()) {
|
| - // This request is not coming through resource dispatcher host.
|
| - data = blob_storage_controller_->GetBlobDataFromUrl(request->url());
|
| - }
|
| - return new webkit_blob::BlobURLRequestJob(request,
|
| - network_delegate,
|
| - data.get(),
|
| - file_system_context_.get(),
|
| - file_loop_proxy_.get());
|
| + return new webkit_blob::BlobURLRequestJob(
|
| + request, network_delegate, LookupBlobData(request),
|
| + file_system_context_, file_loop_proxy_);
|
| }
|
|
|
| scoped_refptr<webkit_blob::BlobData>
|
| BlobProtocolHandler::LookupBlobData(net::URLRequest* request) const {
|
| + BlobDataHandle* blob_data_handle = GetRequestedBlobDataHandle(request);
|
| + if (blob_data_handle)
|
| + return blob_data_handle->data();
|
| return NULL;
|
| }
|
|
|
|
|