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

Unified Diff: webkit/browser/blob/blob_url_request_job_factory.cc

Issue 23223003: Chromium Blob hacking (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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
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;
}
« no previous file with comments | « webkit/browser/blob/blob_url_request_job_factory.h ('k') | webkit/browser/blob/mock_blob_url_request_context.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698