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 |