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

Side by Side Diff: content/browser/service_worker/service_worker_storage.h

Issue 293483002: Store the service worker script and its imports on first load... really (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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_STORAGE_H_ 5 #ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_STORAGE_H_
6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_STORAGE_H_ 6 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_STORAGE_H_
7 7
8 #include <deque>
8 #include <map> 9 #include <map>
9 #include <set> 10 #include <set>
10 #include <vector> 11 #include <vector>
11 12
12 #include "base/bind.h" 13 #include "base/bind.h"
13 #include "base/files/file_path.h" 14 #include "base/files/file_path.h"
14 #include "base/gtest_prod_util.h" 15 #include "base/gtest_prod_util.h"
15 #include "base/memory/scoped_vector.h" 16 #include "base/memory/scoped_vector.h"
16 #include "base/memory/weak_ptr.h" 17 #include "base/memory/weak_ptr.h"
17 #include "content/browser/service_worker/service_worker_database.h" 18 #include "content/browser/service_worker/service_worker_database.h"
(...skipping 28 matching lines...) Expand all
46 typedef base::Callback<void(ServiceWorkerStatusCode status, 47 typedef base::Callback<void(ServiceWorkerStatusCode status,
47 const scoped_refptr<ServiceWorkerRegistration>& 48 const scoped_refptr<ServiceWorkerRegistration>&
48 registration)> FindRegistrationCallback; 49 registration)> FindRegistrationCallback;
49 typedef base::Callback< 50 typedef base::Callback<
50 void(const std::vector<ServiceWorkerRegistrationInfo>& registrations)> 51 void(const std::vector<ServiceWorkerRegistrationInfo>& registrations)>
51 GetAllRegistrationInfosCallback; 52 GetAllRegistrationInfosCallback;
52 typedef base::Callback< 53 typedef base::Callback<
53 void(ServiceWorkerStatusCode status, int result)> 54 void(ServiceWorkerStatusCode status, int result)>
54 CompareCallback; 55 CompareCallback;
55 56
56 struct InitialData {
57 int64 next_registration_id;
58 int64 next_version_id;
59 int64 next_resource_id;
60 std::set<GURL> origins;
61
62 InitialData();
63 ~InitialData();
64 };
65
66 ServiceWorkerStorage(const base::FilePath& path, 57 ServiceWorkerStorage(const base::FilePath& path,
67 base::WeakPtr<ServiceWorkerContextCore> context, 58 base::WeakPtr<ServiceWorkerContextCore> context,
68 base::SequencedTaskRunner* database_task_runner, 59 base::SequencedTaskRunner* database_task_runner,
69 base::MessageLoopProxy* disk_cache_thread, 60 base::MessageLoopProxy* disk_cache_thread,
70 quota::QuotaManagerProxy* quota_manager_proxy); 61 quota::QuotaManagerProxy* quota_manager_proxy);
71 ~ServiceWorkerStorage(); 62 ~ServiceWorkerStorage();
72 63
73 // Finds registration for |document_url| or |pattern| or |registration_id|. 64 // Finds registration for |document_url| or |pattern| or |registration_id|.
74 // The Find methods will find stored and initially installing registrations. 65 // The Find methods will find stored and initially installing registrations.
75 // Returns SERVICE_WORKER_OK with non-null registration if registration 66 // Returns SERVICE_WORKER_OK with non-null registration if registration
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 115
125 // Intended for use only by ServiceWorkerRegisterJob. 116 // Intended for use only by ServiceWorkerRegisterJob.
126 void NotifyInstallingRegistration( 117 void NotifyInstallingRegistration(
127 ServiceWorkerRegistration* registration); 118 ServiceWorkerRegistration* registration);
128 void NotifyDoneInstallingRegistration( 119 void NotifyDoneInstallingRegistration(
129 ServiceWorkerRegistration* registration); 120 ServiceWorkerRegistration* registration);
130 121
131 private: 122 private:
132 friend class ServiceWorkerStorageTest; 123 friend class ServiceWorkerStorageTest;
133 124
125 struct InitialData {
126 int64 next_registration_id;
127 int64 next_version_id;
128 int64 next_resource_id;
129 std::set<GURL> origins;
130
131 InitialData();
132 ~InitialData();
133 };
134
134 typedef std::vector<ServiceWorkerDatabase::RegistrationData> RegistrationList; 135 typedef std::vector<ServiceWorkerDatabase::RegistrationData> RegistrationList;
135 typedef std::vector<ServiceWorkerDatabase::ResourceRecord> ResourceList; 136 typedef std::vector<ServiceWorkerDatabase::ResourceRecord> ResourceList;
137 typedef std::map<int64, scoped_refptr<ServiceWorkerRegistration> >
138 RegistrationRefsById;
139 typedef base::Callback<void(
140 ServiceWorkerStorage::InitialData* data,
141 ServiceWorkerDatabase::Status status)> InitializeCallback;
142 typedef base::Callback<void(
143 const GURL& origin,
144 const std::vector<int64>& newly_purgeable_resources,
145 ServiceWorkerDatabase::Status status)> WriteRegistrationCallback;
146 typedef base::Callback<void(
147 bool origin_is_deletable,
148 const std::vector<int64>& newly_purgeable_resources,
149 ServiceWorkerDatabase::Status status)> DeleteRegistrationCallback;
150 typedef base::Callback<void(
151 const ServiceWorkerDatabase::RegistrationData& data,
152 const ResourceList& resources,
153 ServiceWorkerDatabase::Status status)> FindInDBCallback;
154
155 base::FilePath GetDatabasePath();
156 base::FilePath GetDiskCachePath();
136 157
137 bool LazyInitialize( 158 bool LazyInitialize(
138 const base::Closure& callback); 159 const base::Closure& callback);
139 void DidReadInitialData( 160 void DidReadInitialData(
140 InitialData* data, 161 InitialData* data,
141 ServiceWorkerDatabase::Status status); 162 ServiceWorkerDatabase::Status status);
142 void DidGetRegistrationsForPattern( 163 void DidFindRegistrationForDocument(
164 const GURL& document_url,
165 const FindRegistrationCallback& callback,
166 const ServiceWorkerDatabase::RegistrationData& data,
167 const ResourceList& resources,
168 ServiceWorkerDatabase::Status status);
169 void DidFindRegistrationForPattern(
143 const GURL& scope, 170 const GURL& scope,
144 const FindRegistrationCallback& callback, 171 const FindRegistrationCallback& callback,
145 RegistrationList* registrations, 172 const ServiceWorkerDatabase::RegistrationData& data,
173 const ResourceList& resources,
146 ServiceWorkerDatabase::Status status); 174 ServiceWorkerDatabase::Status status);
147 void DidGetRegistrationsForDocument( 175 void DidFindRegistrationForId(
148 const GURL& scope,
149 const FindRegistrationCallback& callback, 176 const FindRegistrationCallback& callback,
150 RegistrationList* registrations, 177 const ServiceWorkerDatabase::RegistrationData& data,
151 ServiceWorkerDatabase::Status status); 178 const ResourceList& resources,
152 void DidReadRegistrationForId(
153 const FindRegistrationCallback& callback,
154 ServiceWorkerDatabase::RegistrationData* registration,
155 ResourceList* resources,
156 ServiceWorkerDatabase::Status status); 179 ServiceWorkerDatabase::Status status);
157 void DidGetAllRegistrations( 180 void DidGetAllRegistrations(
158 const GetAllRegistrationInfosCallback& callback, 181 const GetAllRegistrationInfosCallback& callback,
159 RegistrationList* registrations, 182 RegistrationList* registrations,
160 ServiceWorkerDatabase::Status status); 183 ServiceWorkerDatabase::Status status);
161 void DidStoreRegistration( 184 void DidStoreRegistration(
185 const StatusCallback& callback,
162 const GURL& origin, 186 const GURL& origin,
163 const StatusCallback& callback, 187 const std::vector<int64>& newly_purgeable_resources,
164 ServiceWorkerDatabase::Status status); 188 ServiceWorkerDatabase::Status status);
165 void DidUpdateToActiveState( 189 void DidUpdateToActiveState(
166 const StatusCallback& callback, 190 const StatusCallback& callback,
167 ServiceWorkerDatabase::Status status); 191 ServiceWorkerDatabase::Status status);
168 void DidDeleteRegistration( 192 void DidDeleteRegistration(
169 const GURL& origin, 193 const GURL& origin,
170 const StatusCallback& callback, 194 const StatusCallback& callback,
171 bool origin_is_deletable, 195 bool origin_is_deletable,
196 const std::vector<int64>& newly_purgeable_resources,
172 ServiceWorkerDatabase::Status status); 197 ServiceWorkerDatabase::Status status);
173 198
174 scoped_refptr<ServiceWorkerRegistration> CreateRegistration( 199 scoped_refptr<ServiceWorkerRegistration> GetOrCreateRegistration(
175 const ServiceWorkerDatabase::RegistrationData& data); 200 const ServiceWorkerDatabase::RegistrationData& data,
201 const ResourceList& resources);
176 ServiceWorkerRegistration* FindInstallingRegistrationForDocument( 202 ServiceWorkerRegistration* FindInstallingRegistrationForDocument(
177 const GURL& document_url); 203 const GURL& document_url);
178 ServiceWorkerRegistration* FindInstallingRegistrationForPattern( 204 ServiceWorkerRegistration* FindInstallingRegistrationForPattern(
179 const GURL& scope); 205 const GURL& scope);
180 ServiceWorkerRegistration* FindInstallingRegistrationForId( 206 ServiceWorkerRegistration* FindInstallingRegistrationForId(
181 int64 registration_id); 207 int64 registration_id);
182 208
183 // For finding registrations being installed.
184 typedef std::map<int64, scoped_refptr<ServiceWorkerRegistration> >
185 RegistrationRefsById;
186 RegistrationRefsById installing_registrations_;
187
188 // Lazy disk_cache getter. 209 // Lazy disk_cache getter.
189 ServiceWorkerDiskCache* disk_cache(); 210 ServiceWorkerDiskCache* disk_cache();
211 void OnDiskCacheInitialized(int rv);
212
213 void StartPurgingResources(const std::vector<int64>& ids);
214 void PurgeResource(int64 id);
215 void OnResourcePurged(int64 id, int rv);
216
217 // Static cross-thread helpers.
218 static void ReadInitialDataFromDB(
219 ServiceWorkerDatabase* database,
220 scoped_refptr<base::SequencedTaskRunner> original_task_runner,
221 const InitializeCallback& callback);
222 static void ServiceWorkerStorage::DeleteRegistrationFromDB(
223 ServiceWorkerDatabase* database,
224 scoped_refptr<base::SequencedTaskRunner> original_task_runner,
225 int64 registration_id,
226 const GURL& origin,
227 const DeleteRegistrationCallback& callback);
228 static void WriteRegistrationInDB(
229 ServiceWorkerDatabase* database,
230 scoped_refptr<base::SequencedTaskRunner> original_task_runner,
231 const ServiceWorkerDatabase::RegistrationData& registration,
232 const ResourceList& resources,
233 const WriteRegistrationCallback& callback);
234 static void FindForDocumentInDB(
235 ServiceWorkerDatabase* database,
236 scoped_refptr<base::SequencedTaskRunner> original_task_runner,
237 const GURL& document_url,
238 const FindInDBCallback& callback);
239 static void FindForPatternInDB(
240 ServiceWorkerDatabase* database,
241 scoped_refptr<base::SequencedTaskRunner> original_task_runner,
242 const GURL& scope,
243 const FindInDBCallback& callback);
244 static void FindForIdInDB(
245 ServiceWorkerDatabase* database,
246 scoped_refptr<base::SequencedTaskRunner> original_task_runner,
247 int64 registration_id,
248 const GURL& origin,
249 const FindInDBCallback& callback);
250
251 // For finding registrations being installed.
252 RegistrationRefsById installing_registrations_;
190 253
191 // Origins having registations. 254 // Origins having registations.
192 std::set<GURL> registered_origins_; 255 std::set<GURL> registered_origins_;
193 256
194 // Pending database tasks waiting for initialization. 257 // Pending database tasks waiting for initialization.
195 std::vector<base::Closure> pending_tasks_; 258 std::vector<base::Closure> pending_tasks_;
196 259
197 int64 next_registration_id_; 260 int64 next_registration_id_;
198 int64 next_version_id_; 261 int64 next_version_id_;
199 int64 next_resource_id_; 262 int64 next_resource_id_;
200 263
201 enum State { 264 enum State {
202 UNINITIALIZED, 265 UNINITIALIZED,
203 INITIALIZING, 266 INITIALIZING,
204 INITIALIZED, 267 INITIALIZED,
205 DISABLED, 268 DISABLED,
206 }; 269 };
207 State state_; 270 State state_;
208 271
209 base::FilePath path_; 272 base::FilePath path_;
210 base::WeakPtr<ServiceWorkerContextCore> context_; 273 base::WeakPtr<ServiceWorkerContextCore> context_;
211 274
212 // Only accessed on |database_task_runner_|. 275 // Only accessed on |database_task_runner_|.
213 scoped_ptr<ServiceWorkerDatabase> database_; 276 scoped_ptr<ServiceWorkerDatabase> database_;
214 277
215 scoped_refptr<base::SequencedTaskRunner> database_task_runner_; 278 scoped_refptr<base::SequencedTaskRunner> database_task_runner_;
216 scoped_refptr<base::MessageLoopProxy> disk_cache_thread_; 279 scoped_refptr<base::MessageLoopProxy> disk_cache_thread_;
217 scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_; 280 scoped_refptr<quota::QuotaManagerProxy> quota_manager_proxy_;
218 scoped_ptr<ServiceWorkerDiskCache> disk_cache_; 281 scoped_ptr<ServiceWorkerDiskCache> disk_cache_;
282 std::deque<int64> purgeable_reource_ids_;
283 bool is_purge_pending_;
219 284
220 base::WeakPtrFactory<ServiceWorkerStorage> weak_factory_; 285 base::WeakPtrFactory<ServiceWorkerStorage> weak_factory_;
221 286
222 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerStorage); 287 DISALLOW_COPY_AND_ASSIGN(ServiceWorkerStorage);
223 }; 288 };
224 289
225 } // namespace content 290 } // namespace content
226 291
227 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_STORAGE_H_ 292 #endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_STORAGE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698