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

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

Issue 2481093003: Introduce ResourceRequesterInfo to abstract the requester of resource request (Closed)
Patch Set: fix URLLoaderFactoryImplTest/URLLoaderFactoryImplTest.GetFailedResponse2 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.h
diff --git a/content/browser/loader/resource_requester_info.h b/content/browser/loader/resource_requester_info.h
new file mode 100644
index 0000000000000000000000000000000000000000..86e39d33a752ad890e6614b7705c439b19f7e80b
--- /dev/null
+++ b/content/browser/loader/resource_requester_info.h
@@ -0,0 +1,152 @@
+// 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.
+
+#ifndef CONTENT_BROWSER_LOADER_RESOURCE_REQUESTER_INFO_H_
+#define CONTENT_BROWSER_LOADER_RESOURCE_REQUESTER_INFO_H_
+
+#include <memory>
+
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "content/common/content_export.h"
+#include "content/public/common/resource_type.h"
+
+namespace net {
+class URLRequestContext;
+} // namespace net
+
+namespace storage {
+class FileSystemContext;
+} // namespace storage
+
+namespace content {
+class ChromeAppCacheService;
+class ChromeBlobStorageContext;
+class ResourceContext;
+class ResourceMessageFilter;
+class ServiceWorkerContextWrapper;
+
+// This class represents the type of resource requester.
+// Currently there are three types:
+// - Requesters that request resources from renderer processes.
+// - Requesters that request resources within the browser process for browser
+// side navigation (aka PlzNavigate).
+// - Requesters that request resources for download or page save.
+class CONTENT_EXPORT ResourceRequesterInfo
+ : public base::RefCountedThreadSafe<ResourceRequesterInfo> {
+ public:
+ typedef base::Callback<void(ResourceType resource_type,
+ ResourceContext**,
+ net::URLRequestContext**)>
+ GetContextsCallback;
+
+ // Creates a ResourceRequesterInfo for a requester that requests resources
+ // from the renderer process.
+ static scoped_refptr<ResourceRequesterInfo> CreateForRenderer(
+ int child_id,
+ ChromeAppCacheService* appcache_service,
+ ChromeBlobStorageContext* blob_storage_context,
+ storage::FileSystemContext* file_system_context,
+ ServiceWorkerContextWrapper* service_worker_context,
+ const GetContextsCallback& get_contexts_callback);
+
+ // Creates a ResourceRequesterInfo for a requester that requests resources
+ // from the renderer process for testing.
+ static scoped_refptr<ResourceRequesterInfo> CreateForRendererTesting(
+ int child_id);
+
+ // Creates a ResourceRequesterInfo for a requester that requests resources
+ // within the browser process for browser side navigation (aka PlzNavigate).
+ static scoped_refptr<ResourceRequesterInfo> CreateForBrowserSideNavigation(
+ scoped_refptr<ServiceWorkerContextWrapper> service_worker_context);
+
+ // Creates a ResourceRequesterInfo for a requester that requests resources for
+ // download or page save.
+ static scoped_refptr<ResourceRequesterInfo> CreateForDownloadOrPageSave(
+ int child_id);
+
+ bool IsRenderer() const { return type_ == RequesterType::RENDERER; }
+ bool IsBrowserSideNavigation() const {
+ return type_ == RequesterType::BROWSER_SIDE_NAVIGATION;
+ }
+
+ // Returns the renderer process ID associated with the requester. Returns -1
+ // for browser side navigation requester. Even if the ResourceMessageFilter
+ // has been destroyed, this method of renderer type requester info returns the
+ // valid process ID which was assigned to the renderer process of the filter.
+ int child_id() const { return child_id_; }
+
+ // Sets the ResourceMessageFilter of the renderer type requester info.
+ void set_filter(base::WeakPtr<ResourceMessageFilter> filter);
+
+ // Returns the filter for sending IPC messages to the renderer process. This
+ // may return null if the process exited. This method is available only for
+ // renderer type requester.
+ ResourceMessageFilter* filter() { return filter_.get(); }
+
+ // Returns the ResourceContext and URLRequestContext associated to the
+ // requester. Currently this method is available only for renderer type
+ // requester.
+ void GetContexts(ResourceType resource_type,
+ ResourceContext** resource_context,
+ net::URLRequestContext** request_context) const;
+
+ // Returns the ChromeAppCacheService associated with the requester. Currently
+ // this method is available only for renderer type requester.
+ ChromeAppCacheService* appcache_service() { return appcache_service_.get(); }
+
+ // Returns the ChromeBlobStorageContext associated with the requester.
+ // Currently this method is available only for renderer type requester.
+ ChromeBlobStorageContext* blob_storage_context() {
+ return blob_storage_context_.get();
+ }
+
+ // Returns the FileSystemContext associated with the requester. Currently this
+ // method is available only for renderer type requester.
+ storage::FileSystemContext* file_system_context() {
+ return file_system_context_.get();
+ }
+
+ // Returns the ServiceWorkerContext associated with the requester. Currently
+ // this method is available for renderer type requester and browser side
+ // navigation type requester.
+ ServiceWorkerContextWrapper* service_worker_context() {
+ return service_worker_context_.get();
+ }
+
+ private:
+ friend class base::RefCountedThreadSafe<ResourceRequesterInfo>;
+
+ enum class RequesterType {
+ RENDERER,
+ BROWSER_SIDE_NAVIGATION,
+ DOWNLOAD_OR_PAGE_SAVE
+ };
+
+ ResourceRequesterInfo(RequesterType type,
+ int child_id,
+ ChromeAppCacheService* appcache_service,
+ ChromeBlobStorageContext* blob_storage_context,
+ storage::FileSystemContext* file_system_context,
+ ServiceWorkerContextWrapper* service_worker_context,
+ const GetContextsCallback& get_contexts_callback);
+ ~ResourceRequesterInfo();
+
+ const RequesterType type_;
+ // The filter might be deleted if the process exited.
+ base::WeakPtr<ResourceMessageFilter> filter_;
+ const int child_id_;
+ const scoped_refptr<ChromeAppCacheService> appcache_service_;
+ const scoped_refptr<ChromeBlobStorageContext> blob_storage_context_;
+ const scoped_refptr<storage::FileSystemContext> file_system_context_;
+ const scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
+ const GetContextsCallback get_contexts_callback_;
+
+ DISALLOW_COPY_AND_ASSIGN(ResourceRequesterInfo);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_LOADER_RESOURCE_REQUESTER_INFO_H_
« no previous file with comments | « content/browser/loader/resource_request_info_impl.cc ('k') | content/browser/loader/resource_requester_info.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698