| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_SERVICE_WORKER_SERVICE_WORKER_CONTEXT_WRAPPER_H_ | 5 #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTEXT_WRAPPER_H_ |
| 6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTEXT_WRAPPER_H_ | 6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTEXT_WRAPPER_H_ |
| 7 | 7 |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 class StoragePartitionImpl; | 33 class StoragePartitionImpl; |
| 34 | 34 |
| 35 // A refcounted wrapper class for our core object. Higher level content lib | 35 // A refcounted wrapper class for our core object. Higher level content lib |
| 36 // classes keep references to this class on mutliple threads. The inner core | 36 // classes keep references to this class on mutliple threads. The inner core |
| 37 // instance is strictly single threaded and is not refcounted, the core object | 37 // instance is strictly single threaded and is not refcounted, the core object |
| 38 // is what is used internally in the service worker lib. | 38 // is what is used internally in the service worker lib. |
| 39 class CONTENT_EXPORT ServiceWorkerContextWrapper | 39 class CONTENT_EXPORT ServiceWorkerContextWrapper |
| 40 : NON_EXPORTED_BASE(public ServiceWorkerContext), | 40 : NON_EXPORTED_BASE(public ServiceWorkerContext), |
| 41 public base::RefCountedThreadSafe<ServiceWorkerContextWrapper> { | 41 public base::RefCountedThreadSafe<ServiceWorkerContextWrapper> { |
| 42 public: | 42 public: |
| 43 typedef base::Callback<void(ServiceWorkerStatusCode)> StatusCallback; | 43 using StatusCallback = base::Callback<void(ServiceWorkerStatusCode)>; |
| 44 using FindRegistrationCallback = |
| 45 ServiceWorkerStorage::FindRegistrationCallback; |
| 46 using GetRegistrationsInfosCallback = |
| 47 ServiceWorkerStorage::GetRegistrationsInfosCallback; |
| 48 using GetUserDataCallback = ServiceWorkerStorage::GetUserDataCallback; |
| 49 using GetUserDataForAllRegistrationsCallback = |
| 50 ServiceWorkerStorage::GetUserDataForAllRegistrationsCallback; |
| 51 |
| 44 ServiceWorkerContextWrapper(BrowserContext* browser_context); | 52 ServiceWorkerContextWrapper(BrowserContext* browser_context); |
| 45 | 53 |
| 46 // Init and Shutdown are for use on the UI thread when the profile, | 54 // Init and Shutdown are for use on the UI thread when the profile, |
| 47 // storagepartition is being setup and torn down. | 55 // storagepartition is being setup and torn down. |
| 48 void Init(const base::FilePath& user_data_directory, | 56 void Init(const base::FilePath& user_data_directory, |
| 49 storage::QuotaManagerProxy* quota_manager_proxy, | 57 storage::QuotaManagerProxy* quota_manager_proxy, |
| 50 storage::SpecialStoragePolicy* special_storage_policy); | 58 storage::SpecialStoragePolicy* special_storage_policy); |
| 51 void Shutdown(); | 59 void Shutdown(); |
| 52 | 60 |
| 53 // Deletes all files on disk and restarts the system asynchronously. This | 61 // Deletes all files on disk and restarts the system asynchronously. This |
| 54 // leaves the system in a disabled state until it's done. This should be | 62 // leaves the system in a disabled state until it's done. This should be |
| 55 // called on the IO thread. | 63 // called on the IO thread. |
| 56 void DeleteAndStartOver(); | 64 void DeleteAndStartOver(); |
| 57 | 65 |
| 58 // The core context is only for use on the IO thread. | |
| 59 // Can be null before/during init, during/after shutdown, and after | |
| 60 // DeleteAndStartOver fails. | |
| 61 ServiceWorkerContextCore* context(); | |
| 62 | |
| 63 // The StoragePartition should only be used on the UI thread. | 66 // The StoragePartition should only be used on the UI thread. |
| 64 // Can be null before/during init and during/after shutdown. | 67 // Can be null before/during init and during/after shutdown. |
| 65 StoragePartitionImpl* storage_partition() const; | 68 StoragePartitionImpl* storage_partition() const; |
| 66 | 69 |
| 67 void set_storage_partition(StoragePartitionImpl* storage_partition); | 70 void set_storage_partition(StoragePartitionImpl* storage_partition); |
| 68 | 71 |
| 69 // The process manager can be used on either UI or IO. | 72 // The process manager can be used on either UI or IO. |
| 70 ServiceWorkerProcessManager* process_manager() { | 73 ServiceWorkerProcessManager* process_manager() { |
| 71 return process_manager_.get(); | 74 return process_manager_.get(); |
| 72 } | 75 } |
| 73 | 76 |
| 74 // ServiceWorkerContext implementation: | 77 // ServiceWorkerContext implementation: |
| 75 void RegisterServiceWorker(const GURL& pattern, | 78 void RegisterServiceWorker(const GURL& pattern, |
| 76 const GURL& script_url, | 79 const GURL& script_url, |
| 77 const ResultCallback& continuation) override; | 80 const ResultCallback& continuation) override; |
| 78 void UnregisterServiceWorker(const GURL& pattern, | 81 void UnregisterServiceWorker(const GURL& pattern, |
| 79 const ResultCallback& continuation) override; | 82 const ResultCallback& continuation) override; |
| 80 void CanHandleMainResourceOffline( | 83 void CanHandleMainResourceOffline( |
| 81 const GURL& url, | 84 const GURL& url, |
| 82 const GURL& first_party, | 85 const GURL& first_party, |
| 83 const net::CompletionCallback& callback) override; | 86 const net::CompletionCallback& callback) override; |
| 84 void GetAllOriginsInfo(const GetUsageInfoCallback& callback) override; | 87 void GetAllOriginsInfo(const GetUsageInfoCallback& callback) override; |
| 85 void DeleteForOrigin(const GURL& origin_url) override; | 88 void DeleteForOrigin(const GURL& origin_url) override; |
| 86 void CheckHasServiceWorker( | 89 void CheckHasServiceWorker( |
| 87 const GURL& url, | 90 const GURL& url, |
| 88 const GURL& other_url, | 91 const GURL& other_url, |
| 89 const CheckHasServiceWorkerCallback& callback) override; | 92 const CheckHasServiceWorkerCallback& callback) override; |
| 90 | 93 |
| 94 ServiceWorkerRegistration* GetLiveRegistration(int64_t registration_id); |
| 95 ServiceWorkerVersion* GetLiveVersion(int64_t version_id); |
| 96 std::vector<ServiceWorkerRegistrationInfo> GetAllLiveRegistrationInfo(); |
| 97 std::vector<ServiceWorkerVersionInfo> GetAllLiveVersionInfo(); |
| 98 |
| 99 void FindRegistrationForDocument(const GURL& document_url, |
| 100 const FindRegistrationCallback& callback); |
| 101 void FindRegistrationForId(int64_t registration_id, |
| 102 const GURL& origin, |
| 103 const FindRegistrationCallback& callback); |
| 104 void GetAllRegistrations(const GetRegistrationsInfosCallback& callback); |
| 105 void GetRegistrationUserData(int64_t registration_id, |
| 106 const std::string& key, |
| 107 const GetUserDataCallback& callback); |
| 108 void StoreRegistrationUserData(int64_t registration_id, |
| 109 const GURL& origin, |
| 110 const std::string& key, |
| 111 const std::string& data, |
| 112 const StatusCallback& callback); |
| 113 void ClearRegistrationUserData(int64_t registration_id, |
| 114 const std::string& key, |
| 115 const StatusCallback& callback); |
| 116 void GetUserDataForAllRegistrations( |
| 117 const std::string& key, |
| 118 const GetUserDataForAllRegistrationsCallback& callback); |
| 119 |
| 91 // DeleteForOrigin with completion callback. Does not exit early, and returns | 120 // DeleteForOrigin with completion callback. Does not exit early, and returns |
| 92 // false if one or more of the deletions fail. | 121 // false if one or more of the deletions fail. |
| 93 virtual void DeleteForOrigin(const GURL& origin_url, | 122 virtual void DeleteForOrigin(const GURL& origin_url, |
| 94 const ResultCallback& done); | 123 const ResultCallback& done); |
| 95 | 124 |
| 96 void StartServiceWorker(const GURL& pattern, const StatusCallback& callback); | 125 void StartServiceWorker(const GURL& pattern, const StatusCallback& callback); |
| 97 void UpdateRegistration(const GURL& pattern); | 126 void UpdateRegistration(const GURL& pattern); |
| 98 void AddObserver(ServiceWorkerContextObserver* observer); | 127 void AddObserver(ServiceWorkerContextObserver* observer); |
| 99 void RemoveObserver(ServiceWorkerContextObserver* observer); | 128 void RemoveObserver(ServiceWorkerContextObserver* observer); |
| 100 | 129 |
| 101 bool is_incognito() const { return is_incognito_; } | 130 bool is_incognito() const { return is_incognito_; } |
| 102 | 131 |
| 103 private: | 132 private: |
| 104 friend class BackgroundSyncManagerTest; | 133 friend class BackgroundSyncManagerTest; |
| 105 friend class base::RefCountedThreadSafe<ServiceWorkerContextWrapper>; | 134 friend class base::RefCountedThreadSafe<ServiceWorkerContextWrapper>; |
| 106 friend class EmbeddedWorkerTestHelper; | 135 friend class EmbeddedWorkerTestHelper; |
| 136 friend class EmbeddedWorkerBrowserTest; |
| 137 friend class ServiceWorkerDispatcherHost; |
| 138 friend class ServiceWorkerInternalsUI; |
| 107 friend class ServiceWorkerProcessManager; | 139 friend class ServiceWorkerProcessManager; |
| 140 friend class ServiceWorkerRequestHandler; |
| 141 friend class ServiceWorkerVersionBrowserTest; |
| 108 friend class MockServiceWorkerContextWrapper; | 142 friend class MockServiceWorkerContextWrapper; |
| 109 | 143 |
| 110 ~ServiceWorkerContextWrapper() override; | 144 ~ServiceWorkerContextWrapper() override; |
| 111 | 145 |
| 112 void InitInternal( | 146 void InitInternal( |
| 113 const base::FilePath& user_data_directory, | 147 const base::FilePath& user_data_directory, |
| 114 scoped_ptr<ServiceWorkerDatabaseTaskManager> database_task_manager, | 148 scoped_ptr<ServiceWorkerDatabaseTaskManager> database_task_manager, |
| 115 const scoped_refptr<base::SingleThreadTaskRunner>& disk_cache_thread, | 149 const scoped_refptr<base::SingleThreadTaskRunner>& disk_cache_thread, |
| 116 storage::QuotaManagerProxy* quota_manager_proxy, | 150 storage::QuotaManagerProxy* quota_manager_proxy, |
| 117 storage::SpecialStoragePolicy* special_storage_policy); | 151 storage::SpecialStoragePolicy* special_storage_policy); |
| 118 void ShutdownOnIO(); | 152 void ShutdownOnIO(); |
| 119 | 153 |
| 120 void DidDeleteAndStartOver(ServiceWorkerStatusCode status); | 154 void DidDeleteAndStartOver(ServiceWorkerStatusCode status); |
| 121 | 155 |
| 122 void DidGetAllRegistrationsForGetAllOrigins( | 156 void DidGetAllRegistrationsForGetAllOrigins( |
| 123 const GetUsageInfoCallback& callback, | 157 const GetUsageInfoCallback& callback, |
| 124 const std::vector<ServiceWorkerRegistrationInfo>& registrations); | 158 const std::vector<ServiceWorkerRegistrationInfo>& registrations); |
| 125 | 159 |
| 126 void DidFindRegistrationForCheckHasServiceWorker( | 160 void DidFindRegistrationForCheckHasServiceWorker( |
| 127 const GURL& other_url, | 161 const GURL& other_url, |
| 128 const CheckHasServiceWorkerCallback& callback, | 162 const CheckHasServiceWorkerCallback& callback, |
| 129 ServiceWorkerStatusCode status, | 163 ServiceWorkerStatusCode status, |
| 130 const scoped_refptr<ServiceWorkerRegistration>& registration); | 164 const scoped_refptr<ServiceWorkerRegistration>& registration); |
| 131 | 165 |
| 132 void DidFindRegistrationForUpdate( | 166 void DidFindRegistrationForUpdate( |
| 133 ServiceWorkerStatusCode status, | 167 ServiceWorkerStatusCode status, |
| 134 const scoped_refptr<content::ServiceWorkerRegistration>& registration); | 168 const scoped_refptr<content::ServiceWorkerRegistration>& registration); |
| 135 | 169 |
| 170 // The core context is only for use on the IO thread. |
| 171 // Can be null before/during init, during/after shutdown, and after |
| 172 // DeleteAndStartOver fails. |
| 173 ServiceWorkerContextCore* context(); |
| 174 |
| 136 const scoped_refptr<ObserverListThreadSafe<ServiceWorkerContextObserver> > | 175 const scoped_refptr<ObserverListThreadSafe<ServiceWorkerContextObserver> > |
| 137 observer_list_; | 176 observer_list_; |
| 138 const scoped_ptr<ServiceWorkerProcessManager> process_manager_; | 177 const scoped_ptr<ServiceWorkerProcessManager> process_manager_; |
| 139 // Cleared in Shutdown(): | 178 // Cleared in Shutdown(): |
| 140 scoped_ptr<ServiceWorkerContextCore> context_core_; | 179 scoped_ptr<ServiceWorkerContextCore> context_core_; |
| 141 | 180 |
| 142 // Initialized in Init(); true if the user data directory is empty. | 181 // Initialized in Init(); true if the user data directory is empty. |
| 143 bool is_incognito_; | 182 bool is_incognito_; |
| 144 | 183 |
| 145 // Raw pointer to the StoragePartitionImpl owning |this|. | 184 // Raw pointer to the StoragePartitionImpl owning |this|. |
| 146 StoragePartitionImpl* storage_partition_; | 185 StoragePartitionImpl* storage_partition_; |
| 147 }; | 186 }; |
| 148 | 187 |
| 149 } // namespace content | 188 } // namespace content |
| 150 | 189 |
| 151 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTEXT_WRAPPER_H_ | 190 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_CONTEXT_WRAPPER_H_ |
| OLD | NEW |