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

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

Issue 508433002: Remove implicit conversions from scoped_refptr to T* in content/browser/service_worker (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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
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 #include "content/browser/service_worker/service_worker_storage.h" 5 #include "content/browser/service_worker/service_worker_storage.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 lhs_buffer_ = new net::IOBuffer(kBufferSize); 117 lhs_buffer_ = new net::IOBuffer(kBufferSize);
118 lhs_info_ = new HttpResponseInfoIOBuffer(); 118 lhs_info_ = new HttpResponseInfoIOBuffer();
119 rhs_buffer_ = new net::IOBuffer(kBufferSize); 119 rhs_buffer_ = new net::IOBuffer(kBufferSize);
120 rhs_info_ = new HttpResponseInfoIOBuffer(); 120 rhs_info_ = new HttpResponseInfoIOBuffer();
121 121
122 ReadInfos(); 122 ReadInfos();
123 } 123 }
124 124
125 void ResponseComparer::ReadInfos() { 125 void ResponseComparer::ReadInfos() {
126 lhs_reader_->ReadInfo( 126 lhs_reader_->ReadInfo(
127 lhs_info_, 127 lhs_info_.get(), base::Bind(&ResponseComparer::OnReadInfoComplete, this));
128 base::Bind(&ResponseComparer::OnReadInfoComplete,
129 this));
130 rhs_reader_->ReadInfo( 128 rhs_reader_->ReadInfo(
131 rhs_info_, 129 rhs_info_.get(), base::Bind(&ResponseComparer::OnReadInfoComplete, this));
132 base::Bind(&ResponseComparer::OnReadInfoComplete,
133 this));
134 } 130 }
135 131
136 void ResponseComparer::OnReadInfoComplete(int result) { 132 void ResponseComparer::OnReadInfoComplete(int result) {
137 if (completion_callback_.is_null() || !owner_) 133 if (completion_callback_.is_null() || !owner_)
138 return; 134 return;
139 if (result < 0) { 135 if (result < 0) {
140 completion_callback_.Run(SERVICE_WORKER_ERROR_FAILED, false); 136 completion_callback_.Run(SERVICE_WORKER_ERROR_FAILED, false);
141 completion_callback_.Reset(); 137 completion_callback_.Reset();
142 return; 138 return;
143 } 139 }
144 if (++completion_count_ != 2) 140 if (++completion_count_ != 2)
145 return; 141 return;
146 142
147 if (lhs_info_->response_data_size != rhs_info_->response_data_size) { 143 if (lhs_info_->response_data_size != rhs_info_->response_data_size) {
148 completion_callback_.Run(SERVICE_WORKER_OK, false); 144 completion_callback_.Run(SERVICE_WORKER_OK, false);
149 return; 145 return;
150 } 146 }
151 ReadSomeData(); 147 ReadSomeData();
152 } 148 }
153 149
154 void ResponseComparer::ReadSomeData() { 150 void ResponseComparer::ReadSomeData() {
155 completion_count_ = 0; 151 completion_count_ = 0;
156 lhs_reader_->ReadData( 152 lhs_reader_->ReadData(
157 lhs_buffer_, 153 lhs_buffer_.get(),
158 kBufferSize, 154 kBufferSize,
159 base::Bind(&ResponseComparer::OnReadDataComplete, this)); 155 base::Bind(&ResponseComparer::OnReadDataComplete, this));
160 rhs_reader_->ReadData( 156 rhs_reader_->ReadData(
161 rhs_buffer_, 157 rhs_buffer_.get(),
162 kBufferSize, 158 kBufferSize,
163 base::Bind(&ResponseComparer::OnReadDataComplete, this)); 159 base::Bind(&ResponseComparer::OnReadDataComplete, this));
164 } 160 }
165 161
166 void ResponseComparer::OnReadDataComplete(int result) { 162 void ResponseComparer::OnReadDataComplete(int result) {
167 if (completion_callback_.is_null() || !owner_) 163 if (completion_callback_.is_null() || !owner_)
168 return; 164 return;
169 if (result < 0) { 165 if (result < 0) {
170 completion_callback_.Run(SERVICE_WORKER_ERROR_FAILED, false); 166 completion_callback_.Run(SERVICE_WORKER_ERROR_FAILED, false);
171 completion_callback_.Reset(); 167 completion_callback_.Reset();
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 236
241 // static 237 // static
242 scoped_ptr<ServiceWorkerStorage> ServiceWorkerStorage::Create( 238 scoped_ptr<ServiceWorkerStorage> ServiceWorkerStorage::Create(
243 base::WeakPtr<ServiceWorkerContextCore> context, 239 base::WeakPtr<ServiceWorkerContextCore> context,
244 ServiceWorkerStorage* old_storage) { 240 ServiceWorkerStorage* old_storage) {
245 return make_scoped_ptr( 241 return make_scoped_ptr(
246 new ServiceWorkerStorage(old_storage->path_, 242 new ServiceWorkerStorage(old_storage->path_,
247 context, 243 context,
248 old_storage->database_task_runner_, 244 old_storage->database_task_runner_,
249 old_storage->disk_cache_thread_, 245 old_storage->disk_cache_thread_,
250 old_storage->quota_manager_proxy_)); 246 old_storage->quota_manager_proxy_.get()));
251 } 247 }
252 248
253 void ServiceWorkerStorage::FindRegistrationForDocument( 249 void ServiceWorkerStorage::FindRegistrationForDocument(
254 const GURL& document_url, 250 const GURL& document_url,
255 const FindRegistrationCallback& callback) { 251 const FindRegistrationCallback& callback) {
256 DCHECK(!document_url.has_ref()); 252 DCHECK(!document_url.has_ref());
257 if (!LazyInitialize(base::Bind( 253 if (!LazyInitialize(base::Bind(
258 &ServiceWorkerStorage::FindRegistrationForDocument, 254 &ServiceWorkerStorage::FindRegistrationForDocument,
259 weak_factory_.GetWeakPtr(), document_url, callback))) { 255 weak_factory_.GetWeakPtr(), document_url, callback))) {
260 if (state_ != INITIALIZING || !context_) { 256 if (state_ != INITIALIZING || !context_) {
261 CompleteFindNow(scoped_refptr<ServiceWorkerRegistration>(), 257 CompleteFindNow(scoped_refptr<ServiceWorkerRegistration>(),
262 SERVICE_WORKER_ERROR_FAILED, callback); 258 SERVICE_WORKER_ERROR_FAILED, callback);
263 } 259 }
264 return; 260 return;
265 } 261 }
266 DCHECK_EQ(INITIALIZED, state_); 262 DCHECK_EQ(INITIALIZED, state_);
267 263
268 // See if there are any stored registrations for the origin. 264 // See if there are any stored registrations for the origin.
269 if (!ContainsKey(registered_origins_, document_url.GetOrigin())) { 265 if (!ContainsKey(registered_origins_, document_url.GetOrigin())) {
270 // Look for something currently being installed. 266 // Look for something currently being installed.
271 scoped_refptr<ServiceWorkerRegistration> installing_registration = 267 scoped_refptr<ServiceWorkerRegistration> installing_registration =
272 FindInstallingRegistrationForDocument(document_url); 268 FindInstallingRegistrationForDocument(document_url);
273 CompleteFindNow( 269 CompleteFindNow(installing_registration,
274 installing_registration, 270 installing_registration.get()
275 installing_registration ? 271 ? SERVICE_WORKER_OK
276 SERVICE_WORKER_OK : SERVICE_WORKER_ERROR_NOT_FOUND, 272 : SERVICE_WORKER_ERROR_NOT_FOUND,
277 callback); 273 callback);
278 return; 274 return;
279 } 275 }
280 276
281 database_task_runner_->PostTask( 277 database_task_runner_->PostTask(
282 FROM_HERE, 278 FROM_HERE,
283 base::Bind( 279 base::Bind(
284 &FindForDocumentInDB, 280 &FindForDocumentInDB,
285 database_.get(), 281 database_.get(),
286 base::MessageLoopProxy::current(), 282 base::MessageLoopProxy::current(),
287 document_url, 283 document_url,
(...skipping 13 matching lines...) Expand all
301 } 297 }
302 return; 298 return;
303 } 299 }
304 DCHECK_EQ(INITIALIZED, state_); 300 DCHECK_EQ(INITIALIZED, state_);
305 301
306 // See if there are any stored registrations for the origin. 302 // See if there are any stored registrations for the origin.
307 if (!ContainsKey(registered_origins_, scope.GetOrigin())) { 303 if (!ContainsKey(registered_origins_, scope.GetOrigin())) {
308 // Look for something currently being installed. 304 // Look for something currently being installed.
309 scoped_refptr<ServiceWorkerRegistration> installing_registration = 305 scoped_refptr<ServiceWorkerRegistration> installing_registration =
310 FindInstallingRegistrationForPattern(scope); 306 FindInstallingRegistrationForPattern(scope);
311 CompleteFindSoon( 307 CompleteFindSoon(FROM_HERE,
312 FROM_HERE, installing_registration, 308 installing_registration,
313 installing_registration ? 309 installing_registration.get()
314 SERVICE_WORKER_OK : SERVICE_WORKER_ERROR_NOT_FOUND, 310 ? SERVICE_WORKER_OK
315 callback); 311 : SERVICE_WORKER_ERROR_NOT_FOUND,
312 callback);
316 return; 313 return;
317 } 314 }
318 315
319 database_task_runner_->PostTask( 316 database_task_runner_->PostTask(
320 FROM_HERE, 317 FROM_HERE,
321 base::Bind( 318 base::Bind(
322 &FindForPatternInDB, 319 &FindForPatternInDB,
323 database_.get(), 320 database_.get(),
324 base::MessageLoopProxy::current(), 321 base::MessageLoopProxy::current(),
325 scope, 322 scope,
326 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForPattern, 323 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForPattern,
327 weak_factory_.GetWeakPtr(), scope, callback))); 324 weak_factory_.GetWeakPtr(), scope, callback)));
328 } 325 }
329 326
330 ServiceWorkerRegistration* ServiceWorkerStorage::GetUninstallingRegistration( 327 ServiceWorkerRegistration* ServiceWorkerStorage::GetUninstallingRegistration(
331 const GURL& scope) { 328 const GURL& scope) {
332 if (state_ != INITIALIZED || !context_) 329 if (state_ != INITIALIZED || !context_)
333 return NULL; 330 return NULL;
334 for (RegistrationRefsById::const_iterator it = 331 for (RegistrationRefsById::const_iterator it =
335 uninstalling_registrations_.begin(); 332 uninstalling_registrations_.begin();
336 it != uninstalling_registrations_.end(); 333 it != uninstalling_registrations_.end();
337 ++it) { 334 ++it) {
338 if (it->second->pattern() == scope) { 335 if (it->second->pattern() == scope) {
339 DCHECK(it->second->is_uninstalling()); 336 DCHECK(it->second->is_uninstalling());
340 return it->second; 337 return it->second.get();
341 } 338 }
342 } 339 }
343 return NULL; 340 return NULL;
344 } 341 }
345 342
346 void ServiceWorkerStorage::FindRegistrationForId( 343 void ServiceWorkerStorage::FindRegistrationForId(
347 int64 registration_id, 344 int64 registration_id,
348 const GURL& origin, 345 const GURL& origin,
349 const FindRegistrationCallback& callback) { 346 const FindRegistrationCallback& callback) {
350 if (!LazyInitialize(base::Bind( 347 if (!LazyInitialize(base::Bind(
351 &ServiceWorkerStorage::FindRegistrationForId, 348 &ServiceWorkerStorage::FindRegistrationForId,
352 weak_factory_.GetWeakPtr(), registration_id, origin, callback))) { 349 weak_factory_.GetWeakPtr(), registration_id, origin, callback))) {
353 if (state_ != INITIALIZING || !context_) { 350 if (state_ != INITIALIZING || !context_) {
354 CompleteFindNow(scoped_refptr<ServiceWorkerRegistration>(), 351 CompleteFindNow(scoped_refptr<ServiceWorkerRegistration>(),
355 SERVICE_WORKER_ERROR_FAILED, callback); 352 SERVICE_WORKER_ERROR_FAILED, callback);
356 } 353 }
357 return; 354 return;
358 } 355 }
359 DCHECK_EQ(INITIALIZED, state_); 356 DCHECK_EQ(INITIALIZED, state_);
360 357
361 // See if there are any stored registrations for the origin. 358 // See if there are any stored registrations for the origin.
362 if (!ContainsKey(registered_origins_, origin)) { 359 if (!ContainsKey(registered_origins_, origin)) {
363 // Look for something currently being installed. 360 // Look for something currently being installed.
364 scoped_refptr<ServiceWorkerRegistration> installing_registration = 361 scoped_refptr<ServiceWorkerRegistration> installing_registration =
365 FindInstallingRegistrationForId(registration_id); 362 FindInstallingRegistrationForId(registration_id);
366 CompleteFindNow( 363 CompleteFindNow(installing_registration,
367 installing_registration, 364 installing_registration.get()
368 installing_registration ? 365 ? SERVICE_WORKER_OK
369 SERVICE_WORKER_OK : SERVICE_WORKER_ERROR_NOT_FOUND, 366 : SERVICE_WORKER_ERROR_NOT_FOUND,
370 callback); 367 callback);
371 return; 368 return;
372 } 369 }
373 370
374 scoped_refptr<ServiceWorkerRegistration> registration = 371 scoped_refptr<ServiceWorkerRegistration> registration =
375 context_->GetLiveRegistration(registration_id); 372 context_->GetLiveRegistration(registration_id);
376 if (registration) { 373 if (registration.get()) {
377 CompleteFindNow(registration, SERVICE_WORKER_OK, callback); 374 CompleteFindNow(registration, SERVICE_WORKER_OK, callback);
378 return; 375 return;
379 } 376 }
380 377
381 database_task_runner_->PostTask( 378 database_task_runner_->PostTask(
382 FROM_HERE, 379 FROM_HERE,
383 base::Bind(&FindForIdInDB, 380 base::Bind(&FindForIdInDB,
384 database_.get(), 381 database_.get(),
385 base::MessageLoopProxy::current(), 382 base::MessageLoopProxy::current(),
386 registration_id, origin, 383 registration_id, origin,
387 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForId, 384 base::Bind(&ServiceWorkerStorage::DidFindRegistrationForId,
388 weak_factory_.GetWeakPtr(), callback))); 385 weak_factory_.GetWeakPtr(), callback)));
389 } 386 }
390 387
391 void ServiceWorkerStorage::GetAllRegistrations( 388 void ServiceWorkerStorage::GetAllRegistrations(
392 const GetAllRegistrationInfosCallback& callback) { 389 const GetAllRegistrationInfosCallback& callback) {
393 if (!LazyInitialize(base::Bind( 390 if (!LazyInitialize(base::Bind(
394 &ServiceWorkerStorage::GetAllRegistrations, 391 &ServiceWorkerStorage::GetAllRegistrations,
395 weak_factory_.GetWeakPtr(), callback))) { 392 weak_factory_.GetWeakPtr(), callback))) {
396 if (state_ != INITIALIZING || !context_) { 393 if (state_ != INITIALIZING || !context_) {
397 RunSoon(FROM_HERE, base::Bind( 394 RunSoon(FROM_HERE, base::Bind(
398 callback, std::vector<ServiceWorkerRegistrationInfo>())); 395 callback, std::vector<ServiceWorkerRegistrationInfo>()));
399 } 396 }
400 return; 397 return;
401 } 398 }
402 DCHECK_EQ(INITIALIZED, state_); 399 DCHECK_EQ(INITIALIZED, state_);
403 400
404 RegistrationList* registrations = new RegistrationList; 401 RegistrationList* registrations = new RegistrationList;
405 PostTaskAndReplyWithResult( 402 PostTaskAndReplyWithResult(
406 database_task_runner_, 403 database_task_runner_.get(),
407 FROM_HERE, 404 FROM_HERE,
408 base::Bind(&ServiceWorkerDatabase::GetAllRegistrations, 405 base::Bind(&ServiceWorkerDatabase::GetAllRegistrations,
409 base::Unretained(database_.get()), 406 base::Unretained(database_.get()),
410 base::Unretained(registrations)), 407 base::Unretained(registrations)),
411 base::Bind(&ServiceWorkerStorage::DidGetAllRegistrations, 408 base::Bind(&ServiceWorkerStorage::DidGetAllRegistrations,
412 weak_factory_.GetWeakPtr(), 409 weak_factory_.GetWeakPtr(),
413 callback, 410 callback,
414 base::Owned(registrations))); 411 base::Owned(registrations)));
415 } 412 }
416 413
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 const StatusCallback& callback) { 457 const StatusCallback& callback) {
461 DCHECK(registration); 458 DCHECK(registration);
462 459
463 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; 460 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_;
464 if (IsDisabled() || !context_) { 461 if (IsDisabled() || !context_) {
465 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); 462 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED));
466 return; 463 return;
467 } 464 }
468 465
469 PostTaskAndReplyWithResult( 466 PostTaskAndReplyWithResult(
470 database_task_runner_, 467 database_task_runner_.get(),
471 FROM_HERE, 468 FROM_HERE,
472 base::Bind(&ServiceWorkerDatabase::UpdateVersionToActive, 469 base::Bind(&ServiceWorkerDatabase::UpdateVersionToActive,
473 base::Unretained(database_.get()), 470 base::Unretained(database_.get()),
474 registration->id(), 471 registration->id(),
475 registration->script_url().GetOrigin()), 472 registration->script_url().GetOrigin()),
476 base::Bind(&ServiceWorkerStorage::DidUpdateToActiveState, 473 base::Bind(&ServiceWorkerStorage::DidUpdateToActiveState,
477 weak_factory_.GetWeakPtr(), 474 weak_factory_.GetWeakPtr(),
478 callback)); 475 callback));
479 } 476 }
480 477
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
579 CreateResponseReader(rhs_id), 576 CreateResponseReader(rhs_id),
580 callback); 577 callback);
581 comparer->Start(); // It deletes itself when done. 578 comparer->Start(); // It deletes itself when done.
582 } 579 }
583 580
584 void ServiceWorkerStorage::DeleteAndStartOver(const StatusCallback& callback) { 581 void ServiceWorkerStorage::DeleteAndStartOver(const StatusCallback& callback) {
585 Disable(); 582 Disable();
586 583
587 // Delete the database on the database thread. 584 // Delete the database on the database thread.
588 PostTaskAndReplyWithResult( 585 PostTaskAndReplyWithResult(
589 database_task_runner_, 586 database_task_runner_.get(),
590 FROM_HERE, 587 FROM_HERE,
591 base::Bind(&ServiceWorkerDatabase::DestroyDatabase, 588 base::Bind(&ServiceWorkerDatabase::DestroyDatabase,
592 base::Unretained(database_.get())), 589 base::Unretained(database_.get())),
593 base::Bind(&ServiceWorkerStorage::DidDeleteDatabase, 590 base::Bind(&ServiceWorkerStorage::DidDeleteDatabase,
594 weak_factory_.GetWeakPtr(), callback)); 591 weak_factory_.GetWeakPtr(),
592 callback));
595 } 593 }
596 594
597 int64 ServiceWorkerStorage::NewRegistrationId() { 595 int64 ServiceWorkerStorage::NewRegistrationId() {
598 if (state_ == DISABLED) 596 if (state_ == DISABLED)
599 return kInvalidServiceWorkerRegistrationId; 597 return kInvalidServiceWorkerRegistrationId;
600 DCHECK_EQ(INITIALIZED, state_); 598 DCHECK_EQ(INITIALIZED, state_);
601 return next_registration_id_++; 599 return next_registration_id_++;
602 } 600 }
603 601
604 int64 ServiceWorkerStorage::NewVersionId() { 602 int64 ServiceWorkerStorage::NewVersionId() {
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
769 ServiceWorkerDatabase::Status status) { 767 ServiceWorkerDatabase::Status status) {
770 if (status == ServiceWorkerDatabase::STATUS_OK) { 768 if (status == ServiceWorkerDatabase::STATUS_OK) {
771 ReturnFoundRegistration(callback, data, resources); 769 ReturnFoundRegistration(callback, data, resources);
772 return; 770 return;
773 } 771 }
774 772
775 if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { 773 if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) {
776 // Look for something currently being installed. 774 // Look for something currently being installed.
777 scoped_refptr<ServiceWorkerRegistration> installing_registration = 775 scoped_refptr<ServiceWorkerRegistration> installing_registration =
778 FindInstallingRegistrationForDocument(document_url); 776 FindInstallingRegistrationForDocument(document_url);
779 callback.Run(installing_registration ? 777 callback.Run(installing_registration.get() ? SERVICE_WORKER_OK
780 SERVICE_WORKER_OK : SERVICE_WORKER_ERROR_NOT_FOUND, 778 : SERVICE_WORKER_ERROR_NOT_FOUND,
781 installing_registration); 779 installing_registration);
782 return; 780 return;
783 } 781 }
784 782
785 ScheduleDeleteAndStartOver(); 783 ScheduleDeleteAndStartOver();
786 callback.Run(DatabaseStatusToStatusCode(status), 784 callback.Run(DatabaseStatusToStatusCode(status),
787 scoped_refptr<ServiceWorkerRegistration>()); 785 scoped_refptr<ServiceWorkerRegistration>());
788 } 786 }
789 787
790 void ServiceWorkerStorage::DidFindRegistrationForPattern( 788 void ServiceWorkerStorage::DidFindRegistrationForPattern(
791 const GURL& scope, 789 const GURL& scope,
792 const FindRegistrationCallback& callback, 790 const FindRegistrationCallback& callback,
793 const ServiceWorkerDatabase::RegistrationData& data, 791 const ServiceWorkerDatabase::RegistrationData& data,
794 const ResourceList& resources, 792 const ResourceList& resources,
795 ServiceWorkerDatabase::Status status) { 793 ServiceWorkerDatabase::Status status) {
796 if (status == ServiceWorkerDatabase::STATUS_OK) { 794 if (status == ServiceWorkerDatabase::STATUS_OK) {
797 ReturnFoundRegistration(callback, data, resources); 795 ReturnFoundRegistration(callback, data, resources);
798 return; 796 return;
799 } 797 }
800 798
801 if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { 799 if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) {
802 scoped_refptr<ServiceWorkerRegistration> installing_registration = 800 scoped_refptr<ServiceWorkerRegistration> installing_registration =
803 FindInstallingRegistrationForPattern(scope); 801 FindInstallingRegistrationForPattern(scope);
804 callback.Run(installing_registration ? 802 callback.Run(installing_registration.get() ? SERVICE_WORKER_OK
805 SERVICE_WORKER_OK : SERVICE_WORKER_ERROR_NOT_FOUND, 803 : SERVICE_WORKER_ERROR_NOT_FOUND,
806 installing_registration); 804 installing_registration);
807 return; 805 return;
808 } 806 }
809 807
810 ScheduleDeleteAndStartOver(); 808 ScheduleDeleteAndStartOver();
811 callback.Run(DatabaseStatusToStatusCode(status), 809 callback.Run(DatabaseStatusToStatusCode(status),
812 scoped_refptr<ServiceWorkerRegistration>()); 810 scoped_refptr<ServiceWorkerRegistration>());
813 } 811 }
814 812
815 void ServiceWorkerStorage::DidFindRegistrationForId( 813 void ServiceWorkerStorage::DidFindRegistrationForId(
816 const FindRegistrationCallback& callback, 814 const FindRegistrationCallback& callback,
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
960 if (!context_ || !context_->GetLiveVersion(version_id)) 958 if (!context_ || !context_->GetLiveVersion(version_id))
961 StartPurgingResources(newly_purgeable_resources); 959 StartPurgingResources(newly_purgeable_resources);
962 } 960 }
963 961
964 scoped_refptr<ServiceWorkerRegistration> 962 scoped_refptr<ServiceWorkerRegistration>
965 ServiceWorkerStorage::GetOrCreateRegistration( 963 ServiceWorkerStorage::GetOrCreateRegistration(
966 const ServiceWorkerDatabase::RegistrationData& data, 964 const ServiceWorkerDatabase::RegistrationData& data,
967 const ResourceList& resources) { 965 const ResourceList& resources) {
968 scoped_refptr<ServiceWorkerRegistration> registration = 966 scoped_refptr<ServiceWorkerRegistration> registration =
969 context_->GetLiveRegistration(data.registration_id); 967 context_->GetLiveRegistration(data.registration_id);
970 if (registration) 968 if (registration.get())
971 return registration; 969 return registration;
972 970
973 registration = new ServiceWorkerRegistration( 971 registration = new ServiceWorkerRegistration(
974 data.scope, data.script, data.registration_id, context_); 972 data.scope, data.script, data.registration_id, context_);
975 registration->set_last_update_check(data.last_update_check); 973 registration->set_last_update_check(data.last_update_check);
976 if (pending_deletions_.find(data.registration_id) != 974 if (pending_deletions_.find(data.registration_id) !=
977 pending_deletions_.end()) { 975 pending_deletions_.end()) {
978 registration->set_is_deleted(true); 976 registration->set_is_deleted(true);
979 } 977 }
980 scoped_refptr<ServiceWorkerVersion> version = 978 scoped_refptr<ServiceWorkerVersion> version =
981 context_->GetLiveVersion(data.version_id); 979 context_->GetLiveVersion(data.version_id);
982 if (!version) { 980 if (!version.get()) {
983 version = new ServiceWorkerVersion(registration, data.version_id, context_); 981 version =
982 new ServiceWorkerVersion(registration.get(), data.version_id, context_);
984 version->SetStatus(data.is_active ? 983 version->SetStatus(data.is_active ?
985 ServiceWorkerVersion::ACTIVATED : ServiceWorkerVersion::INSTALLED); 984 ServiceWorkerVersion::ACTIVATED : ServiceWorkerVersion::INSTALLED);
986 version->script_cache_map()->SetResources(resources); 985 version->script_cache_map()->SetResources(resources);
987 } 986 }
988 987
989 if (version->status() == ServiceWorkerVersion::ACTIVATED) 988 if (version->status() == ServiceWorkerVersion::ACTIVATED)
990 registration->SetActiveVersion(version); 989 registration->SetActiveVersion(version.get());
991 else if (version->status() == ServiceWorkerVersion::INSTALLED) 990 else if (version->status() == ServiceWorkerVersion::INSTALLED)
992 registration->SetWaitingVersion(version); 991 registration->SetWaitingVersion(version.get());
993 else 992 else
994 NOTREACHED(); 993 NOTREACHED();
995 994
996 return registration; 995 return registration;
997 } 996 }
998 997
999 ServiceWorkerRegistration* 998 ServiceWorkerRegistration*
1000 ServiceWorkerStorage::FindInstallingRegistrationForDocument( 999 ServiceWorkerStorage::FindInstallingRegistrationForDocument(
1001 const GURL& document_url) { 1000 const GURL& document_url) {
1002 DCHECK(!document_url.has_ref()); 1001 DCHECK(!document_url.has_ref());
1003 1002
1004 LongestScopeMatcher matcher(document_url); 1003 LongestScopeMatcher matcher(document_url);
1005 ServiceWorkerRegistration* match = NULL; 1004 ServiceWorkerRegistration* match = NULL;
1006 1005
1007 // TODO(nhiroki): This searches over installing registrations linearly and it 1006 // TODO(nhiroki): This searches over installing registrations linearly and it
1008 // couldn't be scalable. Maybe the regs should be partitioned by origin. 1007 // couldn't be scalable. Maybe the regs should be partitioned by origin.
1009 for (RegistrationRefsById::const_iterator it = 1008 for (RegistrationRefsById::const_iterator it =
1010 installing_registrations_.begin(); 1009 installing_registrations_.begin();
1011 it != installing_registrations_.end(); ++it) { 1010 it != installing_registrations_.end(); ++it) {
1012 if (matcher.MatchLongest(it->second->pattern())) 1011 if (matcher.MatchLongest(it->second->pattern()))
1013 match = it->second; 1012 match = it->second.get();
1014 } 1013 }
1015 return match; 1014 return match;
1016 } 1015 }
1017 1016
1018 ServiceWorkerRegistration* 1017 ServiceWorkerRegistration*
1019 ServiceWorkerStorage::FindInstallingRegistrationForPattern( 1018 ServiceWorkerStorage::FindInstallingRegistrationForPattern(
1020 const GURL& scope) { 1019 const GURL& scope) {
1021 for (RegistrationRefsById::const_iterator it = 1020 for (RegistrationRefsById::const_iterator it =
1022 installing_registrations_.begin(); 1021 installing_registrations_.begin();
1023 it != installing_registrations_.end(); ++it) { 1022 it != installing_registrations_.end(); ++it) {
1024 if (it->second->pattern() == scope) 1023 if (it->second->pattern() == scope)
1025 return it->second; 1024 return it->second.get();
1026 } 1025 }
1027 return NULL; 1026 return NULL;
1028 } 1027 }
1029 1028
1030 ServiceWorkerRegistration* 1029 ServiceWorkerRegistration*
1031 ServiceWorkerStorage::FindInstallingRegistrationForId( 1030 ServiceWorkerStorage::FindInstallingRegistrationForId(
1032 int64 registration_id) { 1031 int64 registration_id) {
1033 RegistrationRefsById::const_iterator found = 1032 RegistrationRefsById::const_iterator found =
1034 installing_registrations_.find(registration_id); 1033 installing_registrations_.find(registration_id);
1035 if (found == installing_registrations_.end()) 1034 if (found == installing_registrations_.end())
1036 return NULL; 1035 return NULL;
1037 return found->second; 1036 return found->second.get();
1038 } 1037 }
1039 1038
1040 ServiceWorkerDiskCache* ServiceWorkerStorage::disk_cache() { 1039 ServiceWorkerDiskCache* ServiceWorkerStorage::disk_cache() {
1041 if (disk_cache_) 1040 if (disk_cache_)
1042 return disk_cache_.get(); 1041 return disk_cache_.get();
1043 1042
1044 disk_cache_.reset(new ServiceWorkerDiskCache); 1043 disk_cache_.reset(new ServiceWorkerDiskCache);
1045 1044
1046 base::FilePath path = GetDiskCachePath(); 1045 base::FilePath path = GetDiskCachePath();
1047 if (path.empty()) { 1046 if (path.empty()) {
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after
1378 callback.Run(DatabaseStatusToStatusCode(status)); 1377 callback.Run(DatabaseStatusToStatusCode(status));
1379 return; 1378 return;
1380 } 1379 }
1381 DVLOG(1) << "Deleted ServiceWorkerDatabase successfully."; 1380 DVLOG(1) << "Deleted ServiceWorkerDatabase successfully.";
1382 1381
1383 // Delete the disk cache on the cache thread. 1382 // Delete the disk cache on the cache thread.
1384 // TODO(nhiroki): What if there is a bunch of files in the cache directory? 1383 // TODO(nhiroki): What if there is a bunch of files in the cache directory?
1385 // Deleting the directory could take a long time and restart could be delayed. 1384 // Deleting the directory could take a long time and restart could be delayed.
1386 // We should probably rename the directory and delete it later. 1385 // We should probably rename the directory and delete it later.
1387 PostTaskAndReplyWithResult( 1386 PostTaskAndReplyWithResult(
1388 database_task_runner_, 1387 database_task_runner_.get(),
1389 FROM_HERE, 1388 FROM_HERE,
1390 base::Bind(&base::DeleteFile, GetDiskCachePath(), true), 1389 base::Bind(&base::DeleteFile, GetDiskCachePath(), true),
1391 base::Bind(&ServiceWorkerStorage::DidDeleteDiskCache, 1390 base::Bind(&ServiceWorkerStorage::DidDeleteDiskCache,
1392 weak_factory_.GetWeakPtr(), callback)); 1391 weak_factory_.GetWeakPtr(),
1392 callback));
1393 } 1393 }
1394 1394
1395 void ServiceWorkerStorage::DidDeleteDiskCache( 1395 void ServiceWorkerStorage::DidDeleteDiskCache(
1396 const StatusCallback& callback, bool result) { 1396 const StatusCallback& callback, bool result) {
1397 DCHECK_EQ(DISABLED, state_); 1397 DCHECK_EQ(DISABLED, state_);
1398 if (!result) { 1398 if (!result) {
1399 // Give up the corruption recovery until the browser restarts. 1399 // Give up the corruption recovery until the browser restarts.
1400 LOG(ERROR) << "Failed to delete the diskcache."; 1400 LOG(ERROR) << "Failed to delete the diskcache.";
1401 callback.Run(SERVICE_WORKER_ERROR_FAILED); 1401 callback.Run(SERVICE_WORKER_ERROR_FAILED);
1402 return; 1402 return;
1403 } 1403 }
1404 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; 1404 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully.";
1405 callback.Run(SERVICE_WORKER_OK); 1405 callback.Run(SERVICE_WORKER_OK);
1406 } 1406 }
1407 1407
1408 } // namespace content 1408 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698