| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CONTENT_BROWSER_LOADER_RESOURCE_REQUESTER_INFO_H_ | 5 #ifndef CONTENT_BROWSER_LOADER_RESOURCE_REQUESTER_INFO_H_ |
| 6 #define CONTENT_BROWSER_LOADER_RESOURCE_REQUESTER_INFO_H_ | 6 #define CONTENT_BROWSER_LOADER_RESOURCE_REQUESTER_INFO_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 } // namespace storage | 22 } // namespace storage |
| 23 | 23 |
| 24 namespace content { | 24 namespace content { |
| 25 class ChromeAppCacheService; | 25 class ChromeAppCacheService; |
| 26 class ChromeBlobStorageContext; | 26 class ChromeBlobStorageContext; |
| 27 class ResourceContext; | 27 class ResourceContext; |
| 28 class ResourceMessageFilter; | 28 class ResourceMessageFilter; |
| 29 class ServiceWorkerContextWrapper; | 29 class ServiceWorkerContextWrapper; |
| 30 | 30 |
| 31 // This class represents the type of resource requester. | 31 // This class represents the type of resource requester. |
| 32 // Currently there are three types: | 32 // Currently there are four types: |
| 33 // - Requesters that request resources from renderer processes. | 33 // - Requesters that request resources from renderer processes. |
| 34 // - Requesters that request resources within the browser process for browser | 34 // - Requesters that request resources within the browser process for browser |
| 35 // side navigation (aka PlzNavigate). | 35 // side navigation (aka PlzNavigate). |
| 36 // - Requesters that request resources for download or page save. | 36 // - Requesters that request resources for download or page save. |
| 37 // - Requesters that request service worker navigation preload requests. |
| 37 class CONTENT_EXPORT ResourceRequesterInfo | 38 class CONTENT_EXPORT ResourceRequesterInfo |
| 38 : public base::RefCountedThreadSafe<ResourceRequesterInfo> { | 39 : public base::RefCountedThreadSafe<ResourceRequesterInfo> { |
| 39 public: | 40 public: |
| 40 typedef base::Callback<void(ResourceType resource_type, | 41 typedef base::Callback<void(ResourceType resource_type, |
| 41 ResourceContext**, | 42 ResourceContext**, |
| 42 net::URLRequestContext**)> | 43 net::URLRequestContext**)> |
| 43 GetContextsCallback; | 44 GetContextsCallback; |
| 44 | 45 |
| 45 // Creates a ResourceRequesterInfo for a requester that requests resources | 46 // Creates a ResourceRequesterInfo for a requester that requests resources |
| 46 // from the renderer process. | 47 // from the renderer process. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 60 // Creates a ResourceRequesterInfo for a requester that requests resources | 61 // Creates a ResourceRequesterInfo for a requester that requests resources |
| 61 // within the browser process for browser side navigation (aka PlzNavigate). | 62 // within the browser process for browser side navigation (aka PlzNavigate). |
| 62 static scoped_refptr<ResourceRequesterInfo> CreateForBrowserSideNavigation( | 63 static scoped_refptr<ResourceRequesterInfo> CreateForBrowserSideNavigation( |
| 63 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context); | 64 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context); |
| 64 | 65 |
| 65 // Creates a ResourceRequesterInfo for a requester that requests resources for | 66 // Creates a ResourceRequesterInfo for a requester that requests resources for |
| 66 // download or page save. | 67 // download or page save. |
| 67 static scoped_refptr<ResourceRequesterInfo> CreateForDownloadOrPageSave( | 68 static scoped_refptr<ResourceRequesterInfo> CreateForDownloadOrPageSave( |
| 68 int child_id); | 69 int child_id); |
| 69 | 70 |
| 71 // Creates a ResourceRequesterInfo for a service worker navigation preload |
| 72 // request. When PlzNavigate is enabled, |original_request_info| must be |
| 73 // browser side navigation type. Otherwise it must be renderer type. |
| 74 static scoped_refptr<ResourceRequesterInfo> CreateForNavigationPreload( |
| 75 ResourceRequesterInfo* original_request_info); |
| 76 |
| 70 bool IsRenderer() const { return type_ == RequesterType::RENDERER; } | 77 bool IsRenderer() const { return type_ == RequesterType::RENDERER; } |
| 71 bool IsBrowserSideNavigation() const { | 78 bool IsBrowserSideNavigation() const { |
| 72 return type_ == RequesterType::BROWSER_SIDE_NAVIGATION; | 79 return type_ == RequesterType::BROWSER_SIDE_NAVIGATION; |
| 73 } | 80 } |
| 81 bool IsNavigationPreload() const { |
| 82 return type_ == RequesterType::NAVIGATION_PRELOAD; |
| 83 } |
| 74 | 84 |
| 75 // Returns the renderer process ID associated with the requester. Returns -1 | 85 // Returns the renderer process ID associated with the requester. Returns -1 |
| 76 // for browser side navigation requester. Even if the ResourceMessageFilter | 86 // for browser side navigation requester. Even if the ResourceMessageFilter |
| 77 // has been destroyed, this method of renderer type requester info returns the | 87 // has been destroyed, this method of renderer type requester info returns the |
| 78 // valid process ID which was assigned to the renderer process of the filter. | 88 // valid process ID which was assigned to the renderer process of the filter. |
| 79 int child_id() const { return child_id_; } | 89 int child_id() const { return child_id_; } |
| 80 | 90 |
| 81 // Sets the ResourceMessageFilter of the renderer type requester info. | 91 // Sets the ResourceMessageFilter of the renderer type requester info. |
| 82 void set_filter(base::WeakPtr<ResourceMessageFilter> filter); | 92 void set_filter(base::WeakPtr<ResourceMessageFilter> filter); |
| 83 | 93 |
| 84 // Returns the filter for sending IPC messages to the renderer process. This | 94 // Returns the filter for sending IPC messages to the renderer process. This |
| 85 // may return null if the process exited. This method is available only for | 95 // may return null if the process exited. This method is available only for |
| 86 // renderer type requester. | 96 // renderer type requester. |
| 87 ResourceMessageFilter* filter() { return filter_.get(); } | 97 ResourceMessageFilter* filter() { return filter_.get(); } |
| 88 | 98 |
| 89 // Returns the ResourceContext and URLRequestContext associated to the | 99 // Returns the ResourceContext and URLRequestContext associated to the |
| 90 // requester. Currently this method is available only for renderer type | 100 // requester. Currently this method is available only for renderer type |
| 91 // requester. | 101 // requester and service worker navigation preload type. |
| 92 void GetContexts(ResourceType resource_type, | 102 void GetContexts(ResourceType resource_type, |
| 93 ResourceContext** resource_context, | 103 ResourceContext** resource_context, |
| 94 net::URLRequestContext** request_context) const; | 104 net::URLRequestContext** request_context) const; |
| 95 | 105 |
| 96 // Returns the ChromeAppCacheService associated with the requester. Currently | 106 // Returns the ChromeAppCacheService associated with the requester. Currently |
| 97 // this method is available only for renderer type requester. | 107 // this method is available only for renderer type requester. |
| 98 ChromeAppCacheService* appcache_service() { return appcache_service_.get(); } | 108 ChromeAppCacheService* appcache_service() { return appcache_service_.get(); } |
| 99 | 109 |
| 100 // Returns the ChromeBlobStorageContext associated with the requester. | 110 // Returns the ChromeBlobStorageContext associated with the requester. |
| 101 // Currently this method is available only for renderer type requester. | 111 // Currently this method is available only for renderer type requester. |
| 102 ChromeBlobStorageContext* blob_storage_context() { | 112 ChromeBlobStorageContext* blob_storage_context() { |
| 103 return blob_storage_context_.get(); | 113 return blob_storage_context_.get(); |
| 104 } | 114 } |
| 105 | 115 |
| 106 // Returns the FileSystemContext associated with the requester. Currently this | 116 // Returns the FileSystemContext associated with the requester. Currently this |
| 107 // method is available only for renderer type requester. | 117 // method is available only for renderer type requester. |
| 108 storage::FileSystemContext* file_system_context() { | 118 storage::FileSystemContext* file_system_context() { |
| 109 return file_system_context_.get(); | 119 return file_system_context_.get(); |
| 110 } | 120 } |
| 111 | 121 |
| 112 // Returns the ServiceWorkerContext associated with the requester. Currently | 122 // Returns the ServiceWorkerContext associated with the requester. Currently |
| 113 // this method is available for renderer type requester and browser side | 123 // this method is available for renderer type requester, browser side |
| 114 // navigation type requester. | 124 // navigation type requester and service worker navigation preload type |
| 125 // requester. |
| 115 ServiceWorkerContextWrapper* service_worker_context() { | 126 ServiceWorkerContextWrapper* service_worker_context() { |
| 116 return service_worker_context_.get(); | 127 return service_worker_context_.get(); |
| 117 } | 128 } |
| 118 | 129 |
| 119 private: | 130 private: |
| 120 friend class base::RefCountedThreadSafe<ResourceRequesterInfo>; | 131 friend class base::RefCountedThreadSafe<ResourceRequesterInfo>; |
| 121 | 132 |
| 122 enum class RequesterType { | 133 enum class RequesterType { |
| 123 RENDERER, | 134 RENDERER, |
| 124 BROWSER_SIDE_NAVIGATION, | 135 BROWSER_SIDE_NAVIGATION, |
| 125 DOWNLOAD_OR_PAGE_SAVE | 136 DOWNLOAD_OR_PAGE_SAVE, |
| 137 NAVIGATION_PRELOAD |
| 126 }; | 138 }; |
| 127 | 139 |
| 128 ResourceRequesterInfo(RequesterType type, | 140 ResourceRequesterInfo(RequesterType type, |
| 129 int child_id, | 141 int child_id, |
| 130 ChromeAppCacheService* appcache_service, | 142 ChromeAppCacheService* appcache_service, |
| 131 ChromeBlobStorageContext* blob_storage_context, | 143 ChromeBlobStorageContext* blob_storage_context, |
| 132 storage::FileSystemContext* file_system_context, | 144 storage::FileSystemContext* file_system_context, |
| 133 ServiceWorkerContextWrapper* service_worker_context, | 145 ServiceWorkerContextWrapper* service_worker_context, |
| 134 const GetContextsCallback& get_contexts_callback); | 146 const GetContextsCallback& get_contexts_callback); |
| 135 ~ResourceRequesterInfo(); | 147 ~ResourceRequesterInfo(); |
| 136 | 148 |
| 137 const RequesterType type_; | 149 const RequesterType type_; |
| 138 // The filter might be deleted if the process exited. | 150 // The filter might be deleted if the process exited. |
| 139 base::WeakPtr<ResourceMessageFilter> filter_; | 151 base::WeakPtr<ResourceMessageFilter> filter_; |
| 140 const int child_id_; | 152 const int child_id_; |
| 141 const scoped_refptr<ChromeAppCacheService> appcache_service_; | 153 const scoped_refptr<ChromeAppCacheService> appcache_service_; |
| 142 const scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; | 154 const scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; |
| 143 const scoped_refptr<storage::FileSystemContext> file_system_context_; | 155 const scoped_refptr<storage::FileSystemContext> file_system_context_; |
| 144 const scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_; | 156 const scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_; |
| 145 const GetContextsCallback get_contexts_callback_; | 157 const GetContextsCallback get_contexts_callback_; |
| 146 | 158 |
| 147 DISALLOW_COPY_AND_ASSIGN(ResourceRequesterInfo); | 159 DISALLOW_COPY_AND_ASSIGN(ResourceRequesterInfo); |
| 148 }; | 160 }; |
| 149 | 161 |
| 150 } // namespace content | 162 } // namespace content |
| 151 | 163 |
| 152 #endif // CONTENT_BROWSER_LOADER_RESOURCE_REQUESTER_INFO_H_ | 164 #endif // CONTENT_BROWSER_LOADER_RESOURCE_REQUESTER_INFO_H_ |
| OLD | NEW |