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

Unified Diff: content/browser/blob_storage/blob_url_loader_factory.cc

Issue 2919313004: Get rid of URLLoaderFactory in browser-side case (Closed)
Patch Set: . Created 3 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/blob_storage/blob_url_loader_factory.cc
diff --git a/content/browser/blob_storage/blob_url_loader_factory.cc b/content/browser/blob_storage/blob_url_loader_factory.cc
index 8267654e8e835b188c94b10fd6e657e0df7da0fe..d1282c9d6cac141703ae6aec6e2ed2fc6373458e 100644
--- a/content/browser/blob_storage/blob_url_loader_factory.cc
+++ b/content/browser/blob_storage/blob_url_loader_factory.cc
@@ -34,49 +34,66 @@ namespace {
constexpr size_t kDefaultAllocationSize = 512 * 1024;
// This class handles a request for a blob:// url. It self-destructs (see
-// DeleteIfNeeded) when it has finished responding.
+// DeleteIfNeeded) when it has finished responding once Start() is called.
// Note: some of this code is duplicated from storage::BlobURLRequestJob.
class BlobURLLoader : public mojom::URLLoader {
public:
- BlobURLLoader(mojom::URLLoaderAssociatedRequest url_loader_request,
- const ResourceRequest& request,
- mojom::URLLoaderClientPtr client,
+ BlobURLLoader(const ResourceRequest& request,
storage::BlobStorageContext* blob_storage_context,
scoped_refptr<storage::FileSystemContext> file_system_context)
- : binding_(this, std::move(url_loader_request)),
+ : binding_(this),
request_(request),
- client_(std::move(client)),
writable_handle_watcher_(FROM_HERE,
mojo::SimpleWatcher::ArmingPolicy::MANUAL),
peer_closed_handle_watcher_(FROM_HERE,
mojo::SimpleWatcher::ArmingPolicy::MANUAL),
weak_factory_(this) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
if (blob_storage_context) {
blob_handle_ =
blob_storage_context->GetBlobDataFromPublicURL(request.url);
}
+ if (blob_handle_) {
+ base::SequencedTaskRunner* file_task_runner =
+ BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE).get();
+ blob_reader_ = blob_handle_->CreateReader(file_system_context.get(),
+ file_task_runner);
+ }
+ }
+
+ ~BlobURLLoader() override {}
+
+ // mojom::URLLoader implementation:
+ void Start(mojom::URLLoaderAssociatedRequest url_loader_request,
+ mojom::URLLoaderClientPtr client) override {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+ DCHECK(!binding_.is_bound());
+ binding_.Bind(std::move(url_loader_request));
+ client_ = std::move(client);
+
// PostTask since it might destruct.
base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(&BlobURLLoader::Start, weak_factory_.GetWeakPtr(),
- request, file_system_context));
+ FROM_HERE,
+ base::Bind(&BlobURLLoader::StartRequest, weak_factory_.GetWeakPtr()));
}
- void Start(const ResourceRequest& request,
- scoped_refptr<storage::FileSystemContext> file_system_context) {
+ private:
+ // mojom::URLLoader implementation:
+ void FollowRedirect() override { NOTREACHED(); }
+
+ void SetPriority(net::RequestPriority priority,
+ int32_t intra_priority_value) override {}
+
+ void StartRequest() {
if (!blob_handle_) {
NotifyCompleted(net::ERR_FILE_NOT_FOUND);
return;
}
- base::SequencedTaskRunner* file_task_runner =
- BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE).get();
- blob_reader_ =
- blob_handle_->CreateReader(file_system_context.get(), file_task_runner);
-
// We only support GET request per the spec.
- if (request.method != "GET") {
+ if (request_.method != "GET") {
NotifyCompleted(net::ERR_METHOD_NOT_SUPPORTED);
return;
}
@@ -87,7 +104,7 @@ class BlobURLLoader : public mojom::URLLoader {
}
net::HttpRequestHeaders request_headers;
- request_headers.AddHeadersFromString(request.headers);
+ request_headers.AddHeadersFromString(request_.headers);
std::string range_header;
if (request_headers.GetHeader(net::HttpRequestHeaders::kRange,
&range_header)) {
@@ -123,14 +140,6 @@ class BlobURLLoader : public mojom::URLLoader {
NOTREACHED();
}
- ~BlobURLLoader() override {}
-
- private:
- // mojom::URLLoader implementation:
- void FollowRedirect() override { NOTREACHED(); }
-
- void SetPriority(net::RequestPriority priority,
- int32_t intra_priority_value) override {}
// Notifies the client that the request completed. Takes care of deleting this
// object now if possible (i.e. no outstanding data pipe), otherwise this
@@ -391,8 +400,9 @@ void BlobURLLoaderFactory::CreateLoaderAndStart(
const ResourceRequest& request,
mojom::URLLoaderClientPtr client) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- new BlobURLLoader(std::move(loader), request, std::move(client),
- blob_storage_context_.get(), file_system_context_);
+ BlobURLLoader* url_loader = new BlobURLLoader(
+ request, blob_storage_context_.get(), file_system_context_);
+ url_loader->Start(std::move(loader), std::move(client));
}
void BlobURLLoaderFactory::SyncLoad(int32_t routing_id,

Powered by Google App Engine
This is Rietveld 408576698