Chromium Code Reviews| 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 #include "content/browser/service_worker/service_worker_register_job.h" | 5 #include "content/browser/service_worker/service_worker_register_job.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "content/browser/service_worker/service_worker_context_core.h" | 10 #include "content/browser/service_worker/service_worker_context_core.h" |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 224 if (status != SERVICE_WORKER_OK) { | 224 if (status != SERVICE_WORKER_OK) { |
| 225 Complete(status); | 225 Complete(status); |
| 226 return; | 226 return; |
| 227 } | 227 } |
| 228 | 228 |
| 229 if (existing_registration != registration()) { | 229 if (existing_registration != registration()) { |
| 230 Complete(SERVICE_WORKER_ERROR_NOT_FOUND); | 230 Complete(SERVICE_WORKER_ERROR_NOT_FOUND); |
| 231 return; | 231 return; |
| 232 } | 232 } |
| 233 | 233 |
| 234 // TODO(michaeln): If the last update check was less then 24 hours | |
|
dominicc (has gone to gerrit)
2014/08/11 04:01:15
then -> than
michaeln
2014/08/13 03:42:55
Done.
| |
| 235 // ago, depending on the freshness of the cached worker script we | |
| 236 // may be able to complete the update job right here. | |
| 237 | |
| 234 UpdateAndContinue(); | 238 UpdateAndContinue(); |
| 235 } | 239 } |
| 236 | 240 |
| 237 // Creates a new ServiceWorkerRegistration. | 241 // Creates a new ServiceWorkerRegistration. |
| 238 void ServiceWorkerRegisterJob::RegisterAndContinue( | 242 void ServiceWorkerRegisterJob::RegisterAndContinue( |
| 239 ServiceWorkerStatusCode status) { | 243 ServiceWorkerStatusCode status) { |
| 240 SetPhase(REGISTER); | 244 SetPhase(REGISTER); |
| 241 if (status != SERVICE_WORKER_OK) { | 245 if (status != SERVICE_WORKER_OK) { |
| 242 // Abort this registration job. | 246 // Abort this registration job. |
| 243 Complete(status); | 247 Complete(status); |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 315 ServiceWorkerStatusCode status) { | 319 ServiceWorkerStatusCode status) { |
| 316 // TODO(kinuko,falken): For some error cases (e.g. ServiceWorker is | 320 // TODO(kinuko,falken): For some error cases (e.g. ServiceWorker is |
| 317 // unexpectedly terminated) we may want to retry sending the event again. | 321 // unexpectedly terminated) we may want to retry sending the event again. |
| 318 if (status != SERVICE_WORKER_OK) { | 322 if (status != SERVICE_WORKER_OK) { |
| 319 // "8. If installFailed is true, then:..." | 323 // "8. If installFailed is true, then:..." |
| 320 Complete(status); | 324 Complete(status); |
| 321 return; | 325 return; |
| 322 } | 326 } |
| 323 | 327 |
| 324 SetPhase(STORE); | 328 SetPhase(STORE); |
| 329 registration()->set_last_update_check(base::Time::Now()); | |
| 325 context_->storage()->StoreRegistration( | 330 context_->storage()->StoreRegistration( |
| 326 registration(), | 331 registration(), |
| 327 new_version(), | 332 new_version(), |
| 328 base::Bind(&ServiceWorkerRegisterJob::OnStoreRegistrationComplete, | 333 base::Bind(&ServiceWorkerRegisterJob::OnStoreRegistrationComplete, |
| 329 weak_factory_.GetWeakPtr())); | 334 weak_factory_.GetWeakPtr())); |
| 330 } | 335 } |
| 331 | 336 |
| 332 void ServiceWorkerRegisterJob::OnStoreRegistrationComplete( | 337 void ServiceWorkerRegisterJob::OnStoreRegistrationComplete( |
| 333 ServiceWorkerStatusCode status) { | 338 ServiceWorkerStatusCode status) { |
| 334 if (status != SERVICE_WORKER_OK) { | 339 if (status != SERVICE_WORKER_OK) { |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 408 for (std::vector<RegistrationCallback>::iterator it = callbacks_.begin(); | 413 for (std::vector<RegistrationCallback>::iterator it = callbacks_.begin(); |
| 409 it != callbacks_.end(); | 414 it != callbacks_.end(); |
| 410 ++it) { | 415 ++it) { |
| 411 it->Run(status, registration, version); | 416 it->Run(status, registration, version); |
| 412 } | 417 } |
| 413 callbacks_.clear(); | 418 callbacks_.clear(); |
| 414 } | 419 } |
| 415 | 420 |
| 416 void ServiceWorkerRegisterJob::OnPausedAfterDownload() { | 421 void ServiceWorkerRegisterJob::OnPausedAfterDownload() { |
| 417 // This happens prior to OnStartWorkerFinished time. | 422 // This happens prior to OnStartWorkerFinished time. |
| 418 scoped_refptr<ServiceWorkerVersion> current_version = | 423 scoped_refptr<ServiceWorkerVersion> most_recent_version = |
| 419 registration()->active_version(); | 424 registration()->waiting_version() ? |
| 420 DCHECK(current_version); | 425 registration()->waiting_version() : |
| 421 int64 current_script_id = | 426 registration()->active_version(); |
| 422 current_version->script_cache_map()->Lookup(script_url_); | 427 DCHECK(most_recent_version); |
| 428 int64 most_recent_script_id = | |
| 429 most_recent_version->script_cache_map()->Lookup(script_url_); | |
| 423 int64 new_script_id = | 430 int64 new_script_id = |
| 424 new_version()->script_cache_map()->Lookup(script_url_); | 431 new_version()->script_cache_map()->Lookup(script_url_); |
| 425 | 432 |
| 426 // TODO(michaeln): It would be better to compare as the new resource | 433 // TODO(michaeln): It would be better to compare as the new resource |
| 427 // is being downloaded and to avoid writing it to disk until we know | 434 // is being downloaded and to avoid writing it to disk until we know |
| 428 // its needed. | 435 // its needed. |
| 429 context_->storage()->CompareScriptResources( | 436 context_->storage()->CompareScriptResources( |
| 430 current_script_id, new_script_id, | 437 most_recent_script_id, new_script_id, |
| 431 base::Bind(&ServiceWorkerRegisterJob::OnCompareScriptResourcesComplete, | 438 base::Bind(&ServiceWorkerRegisterJob::OnCompareScriptResourcesComplete, |
| 432 weak_factory_.GetWeakPtr(), | 439 weak_factory_.GetWeakPtr(), |
| 433 current_version)); | 440 most_recent_version)); |
| 434 } | 441 } |
| 435 | 442 |
| 436 bool ServiceWorkerRegisterJob::OnMessageReceived(const IPC::Message& message) { | 443 bool ServiceWorkerRegisterJob::OnMessageReceived(const IPC::Message& message) { |
| 437 return false; | 444 return false; |
| 438 } | 445 } |
| 439 | 446 |
| 440 void ServiceWorkerRegisterJob::OnCompareScriptResourcesComplete( | 447 void ServiceWorkerRegisterJob::OnCompareScriptResourcesComplete( |
| 441 ServiceWorkerVersion* current_version, | 448 ServiceWorkerVersion* most_recent_version, |
| 442 ServiceWorkerStatusCode status, | 449 ServiceWorkerStatusCode status, |
| 443 bool are_equal) { | 450 bool are_equal) { |
| 444 if (are_equal) { | 451 if (are_equal) { |
| 445 ResolvePromise(SERVICE_WORKER_OK, registration(), current_version); | 452 ResolvePromise(SERVICE_WORKER_OK, registration(), most_recent_version); |
| 453 registration()->set_last_update_check(base::Time::Now()); | |
| 454 context_->storage()->UpdateLastUpdateCheckTime(registration()); | |
| 446 Complete(SERVICE_WORKER_ERROR_EXISTS); | 455 Complete(SERVICE_WORKER_ERROR_EXISTS); |
| 447 return; | 456 return; |
| 448 } | 457 } |
| 449 | 458 |
| 450 // Proceed with really starting the worker. | 459 // Proceed with really starting the worker. |
| 451 new_version()->embedded_worker()->ResumeAfterDownload(); | 460 new_version()->embedded_worker()->ResumeAfterDownload(); |
| 452 new_version()->embedded_worker()->RemoveListener(this); | 461 new_version()->embedded_worker()->RemoveListener(this); |
| 453 } | 462 } |
| 454 | 463 |
| 455 void ServiceWorkerRegisterJob::AssociateProviderHostsToRegistration( | 464 void ServiceWorkerRegisterJob::AssociateProviderHostsToRegistration( |
| 456 ServiceWorkerRegistration* registration) { | 465 ServiceWorkerRegistration* registration) { |
| 457 DCHECK(registration); | 466 DCHECK(registration); |
| 458 for (scoped_ptr<ServiceWorkerContextCore::ProviderHostIterator> it = | 467 for (scoped_ptr<ServiceWorkerContextCore::ProviderHostIterator> it = |
| 459 context_->GetProviderHostIterator(); | 468 context_->GetProviderHostIterator(); |
| 460 !it->IsAtEnd(); it->Advance()) { | 469 !it->IsAtEnd(); it->Advance()) { |
| 461 ServiceWorkerProviderHost* host = it->GetProviderHost(); | 470 ServiceWorkerProviderHost* host = it->GetProviderHost(); |
| 462 if (ServiceWorkerUtils::ScopeMatches(registration->pattern(), | 471 if (ServiceWorkerUtils::ScopeMatches(registration->pattern(), |
| 463 host->document_url())) { | 472 host->document_url())) { |
| 464 if (host->CanAssociateRegistration(registration)) | 473 if (host->CanAssociateRegistration(registration)) |
| 465 host->AssociateRegistration(registration); | 474 host->AssociateRegistration(registration); |
| 466 } | 475 } |
| 467 } | 476 } |
| 468 } | 477 } |
| 469 | 478 |
| 470 } // namespace content | 479 } // namespace content |
| OLD | NEW |