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

Unified Diff: content/browser/loader/resource_requester_info.cc

Issue 2481093003: Introduce ResourceRequesterInfo to abstract the requester of resource request (Closed)
Patch Set: incorporated yhirano & kinuko's comment Created 4 years, 1 month 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/loader/resource_requester_info.cc
diff --git a/content/browser/loader/resource_requester_info.cc b/content/browser/loader/resource_requester_info.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9a63c18d49498524183a54b744845e78dfd9f6fa
--- /dev/null
+++ b/content/browser/loader/resource_requester_info.cc
@@ -0,0 +1,204 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/loader/resource_requester_info.h"
+
+#include "base/memory/ptr_util.h"
+#include "content/browser/loader/resource_message_filter.h"
+#include "content/browser/service_worker/service_worker_context_wrapper.h"
+#include "content/public/browser/resource_context.h"
+#include "content/public/common/process_type.h"
+
+namespace content {
+
+namespace {
+
+class ResourceRequesterInfoForRenderer : public ResourceRequesterInfo {
+ public:
+ explicit ResourceRequesterInfoForRenderer(
+ base::WeakPtr<ResourceMessageFilter> filter,
+ int child_id)
+ : filter_(filter), child_id_(child_id) {}
+
+ ~ResourceRequesterInfoForRenderer() override {}
+
+ std::unique_ptr<ResourceRequesterInfo> clone() const override {
+ return base::MakeUnique<ResourceRequesterInfoForRenderer>(filter_,
+ child_id_);
+ }
+
+ bool IsRenderer() const override { return true; }
+ bool IsBrowserSideNavigation() const override { return false; }
+ int child_id() const override { return child_id_; }
+ BrowserMessageFilter* filter() const override { return filter_.get(); }
+
+ void GetContexts(ResourceType resource_type,
+ ResourceContext** resource_context,
+ net::URLRequestContext** request_context) const override {
+ DCHECK(filter());
+ filter_->GetContexts(resource_type, resource_context, request_context);
+ }
+
+ ChromeAppCacheService* appcache_service() const override {
+ DCHECK(filter());
+ return filter_->appcache_service();
+ }
+
+ ChromeBlobStorageContext* blob_storage_context() const override {
+ DCHECK(filter());
+ return filter_->blob_storage_context();
+ }
+
+ storage::FileSystemContext* file_system_context() const override {
+ DCHECK(filter());
+ return filter_->file_system_context();
+ }
+
+ ServiceWorkerContextWrapper* service_worker_context() const override {
+ DCHECK(filter());
+ return filter_->service_worker_context();
+ }
+
+ private:
+ // The filter might be deleted if the process exited.
+ const base::WeakPtr<ResourceMessageFilter> filter_;
+ const int child_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(ResourceRequesterInfoForRenderer);
+};
+
+class ResourceRequesterInfoForBrowserSideNavigation
+ : public ResourceRequesterInfo {
+ public:
+ explicit ResourceRequesterInfoForBrowserSideNavigation(
+ scoped_refptr<ServiceWorkerContextWrapper> service_worker_context)
+ : service_worker_context_(std::move(service_worker_context)) {}
+ ~ResourceRequesterInfoForBrowserSideNavigation() override {}
+
+ std::unique_ptr<ResourceRequesterInfo> clone() const override {
+ return base::MakeUnique<ResourceRequesterInfoForBrowserSideNavigation>(
+ service_worker_context_);
+ }
+
+ bool IsRenderer() const override { return false; }
+ bool IsBrowserSideNavigation() const override { return true; }
+ int child_id() const override { return -1; }
+
+ BrowserMessageFilter* filter() const override {
+ NOTREACHED();
+ return nullptr;
+ }
+
+ void GetContexts(ResourceType resource_type,
+ ResourceContext** resource_context,
+ net::URLRequestContext** request_context) const override {
+ NOTREACHED();
+ }
+
+ ChromeAppCacheService* appcache_service() const override {
+ NOTREACHED();
+ return nullptr;
+ }
+
+ ChromeBlobStorageContext* blob_storage_context() const override {
+ NOTREACHED();
+ return nullptr;
+ }
+
+ storage::FileSystemContext* file_system_context() const override {
+ NOTREACHED();
+ return nullptr;
+ }
+
+ ServiceWorkerContextWrapper* service_worker_context() const override {
+ return service_worker_context_.get();
+ }
+
+ private:
+ const scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
+
+ DISALLOW_COPY_AND_ASSIGN(ResourceRequesterInfoForBrowserSideNavigation);
+};
+
+class ResourceRequesterInfoForDownloadOrPageSave
+ : public ResourceRequesterInfo {
+ public:
+ explicit ResourceRequesterInfoForDownloadOrPageSave(int child_id)
+ : child_id_(child_id) {}
+ ~ResourceRequesterInfoForDownloadOrPageSave() override {}
+
+ std::unique_ptr<ResourceRequesterInfo> clone() const override {
+ return base::MakeUnique<ResourceRequesterInfoForDownloadOrPageSave>(
+ child_id_);
+ }
+
+ bool IsRenderer() const override { return false; }
+ bool IsBrowserSideNavigation() const override { return false; }
+ int child_id() const override { return child_id_; }
+
+ BrowserMessageFilter* filter() const override {
+ NOTREACHED();
+ return nullptr;
+ }
+
+ void GetContexts(ResourceType resource_type,
+ ResourceContext** resource_context,
+ net::URLRequestContext** request_context) const override {
+ NOTREACHED();
+ }
+
+ ChromeAppCacheService* appcache_service() const override {
+ NOTREACHED();
+ return nullptr;
+ }
+
+ ChromeBlobStorageContext* blob_storage_context() const override {
+ NOTREACHED();
+ return nullptr;
+ }
+
+ storage::FileSystemContext* file_system_context() const override {
+ NOTREACHED();
+ return nullptr;
+ }
+
+ ServiceWorkerContextWrapper* service_worker_context() const override {
+ NOTREACHED();
+ return nullptr;
+ }
+
+ private:
+ const int child_id_;
+
+ DISALLOW_COPY_AND_ASSIGN(ResourceRequesterInfoForDownloadOrPageSave);
+};
+
+} // namespace
+
+std::unique_ptr<ResourceRequesterInfo> ResourceRequesterInfo::CreateForRenderer(
+ base::WeakPtr<ResourceMessageFilter> filter) {
+ DCHECK(filter);
mmenke 2016/11/11 21:19:59 If we're DCHECKing, should we be taking a Resource
horo 2016/11/14 08:28:50 Taking a ResourceMessageFilter* sounds good. Done.
+ return base::MakeUnique<ResourceRequesterInfoForRenderer>(filter,
+ filter->child_id());
+}
+
+std::unique_ptr<ResourceRequesterInfo>
+ResourceRequesterInfo::CreateForRendererTesting(int child_id) {
+ return base::MakeUnique<ResourceRequesterInfoForRenderer>(
+ base::WeakPtr<ResourceMessageFilter>(), child_id);
+}
+
+std::unique_ptr<ResourceRequesterInfo>
+ResourceRequesterInfo::CreateForBrowserSideNavigation(
+ scoped_refptr<ServiceWorkerContextWrapper> service_worker_context) {
+ return base::MakeUnique<ResourceRequesterInfoForBrowserSideNavigation>(
+ std::move(service_worker_context));
+}
+
+std::unique_ptr<ResourceRequesterInfo>
+ResourceRequesterInfo::CreateForDownloadOrPageSave(int child_id) {
+ return base::MakeUnique<ResourceRequesterInfoForDownloadOrPageSave>(child_id);
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698