| 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_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/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "base/sequenced_task_runner.h" | 11 #include "base/sequenced_task_runner.h" |
| 12 #include "base/task_runner_util.h" | 12 #include "base/task_runner_util.h" |
| 13 #include "content/browser/service_worker/service_worker_context_core.h" | 13 #include "content/browser/service_worker/service_worker_context_core.h" |
| 14 #include "content/browser/service_worker/service_worker_disk_cache.h" | 14 #include "content/browser/service_worker/service_worker_disk_cache.h" |
| 15 #include "content/browser/service_worker/service_worker_info.h" | 15 #include "content/browser/service_worker/service_worker_info.h" |
| 16 #include "content/browser/service_worker/service_worker_registration.h" | 16 #include "content/browser/service_worker/service_worker_registration.h" |
| 17 #include "content/browser/service_worker/service_worker_utils.h" | 17 #include "content/browser/service_worker/service_worker_utils.h" |
| 18 #include "content/browser/service_worker/service_worker_version.h" | 18 #include "content/browser/service_worker/service_worker_version.h" |
| 19 #include "content/common/service_worker/service_worker_types.h" | 19 #include "content/common/service_worker/service_worker_types.h" |
| 20 #include "content/public/browser/browser_thread.h" | 20 #include "content/public/browser/browser_thread.h" |
| 21 #include "net/base/net_errors.h" | 21 #include "net/base/net_errors.h" |
| 22 #include "webkit/browser/quota/quota_manager_proxy.h" | 22 #include "webkit/browser/quota/quota_manager_proxy.h" |
| 23 | 23 |
| 24 namespace content { | 24 namespace content { |
| 25 | 25 |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 typedef base::Callback<void( | 28 typedef base::Callback<void( |
| 29 ServiceWorkerStorage::InitialData* data, | 29 ServiceWorkerStorage::InitialData* data, |
| 30 ServiceWorkerStatusCode status)> InitializeCallback; | 30 ServiceWorkerDatabase::Status status)> InitializeCallback; |
| 31 typedef base::Callback<void( | 31 typedef base::Callback<void( |
| 32 const ServiceWorkerDatabase::RegistrationData& data, | 32 const ServiceWorkerDatabase::RegistrationData& data, |
| 33 const std::vector<ServiceWorkerDatabase::ResourceRecord>& resources, | 33 const std::vector<ServiceWorkerDatabase::ResourceRecord>& resources, |
| 34 ServiceWorkerStatusCode status)> ReadRegistrationCallback; | 34 ServiceWorkerDatabase::Status status)> ReadRegistrationCallback; |
| 35 typedef base::Callback<void( | 35 typedef base::Callback<void( |
| 36 bool origin_is_deletable, | 36 bool origin_is_deletable, |
| 37 ServiceWorkerStatusCode status)> DeleteRegistrationCallback; | 37 ServiceWorkerDatabase::Status status)> DeleteRegistrationCallback; |
| 38 | 38 |
| 39 void RunSoon(const tracked_objects::Location& from_here, | 39 void RunSoon(const tracked_objects::Location& from_here, |
| 40 const base::Closure& closure) { | 40 const base::Closure& closure) { |
| 41 base::MessageLoop::current()->PostTask(from_here, closure); | 41 base::MessageLoop::current()->PostTask(from_here, closure); |
| 42 } | 42 } |
| 43 | 43 |
| 44 void CompleteFindNow( | 44 void CompleteFindNow( |
| 45 const scoped_refptr<ServiceWorkerRegistration>& registration, | 45 const scoped_refptr<ServiceWorkerRegistration>& registration, |
| 46 ServiceWorkerStatusCode status, | 46 ServiceWorkerStatusCode status, |
| 47 const ServiceWorkerStorage::FindRegistrationCallback& callback) { | 47 const ServiceWorkerStorage::FindRegistrationCallback& callback) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 58 | 58 |
| 59 const base::FilePath::CharType kServiceWorkerDirectory[] = | 59 const base::FilePath::CharType kServiceWorkerDirectory[] = |
| 60 FILE_PATH_LITERAL("Service Worker"); | 60 FILE_PATH_LITERAL("Service Worker"); |
| 61 const base::FilePath::CharType kDatabaseName[] = | 61 const base::FilePath::CharType kDatabaseName[] = |
| 62 FILE_PATH_LITERAL("Database"); | 62 FILE_PATH_LITERAL("Database"); |
| 63 | 63 |
| 64 const int kMaxMemDiskCacheSize = 10 * 1024 * 1024; | 64 const int kMaxMemDiskCacheSize = 10 * 1024 * 1024; |
| 65 | 65 |
| 66 void EmptyCompletionCallback(int) {} | 66 void EmptyCompletionCallback(int) {} |
| 67 | 67 |
| 68 ServiceWorkerStatusCode DatabaseStatusToStatusCode( |
| 69 ServiceWorkerDatabase::Status status) { |
| 70 switch (status) { |
| 71 case ServiceWorkerDatabase::STATUS_OK: |
| 72 return SERVICE_WORKER_OK; |
| 73 case ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND: |
| 74 return SERVICE_WORKER_ERROR_NOT_FOUND; |
| 75 default: |
| 76 return SERVICE_WORKER_ERROR_FAILED; |
| 77 } |
| 78 } |
| 79 |
| 68 void ReadInitialDataFromDB( | 80 void ReadInitialDataFromDB( |
| 69 ServiceWorkerDatabase* database, | 81 ServiceWorkerDatabase* database, |
| 70 scoped_refptr<base::SequencedTaskRunner> original_task_runner, | 82 scoped_refptr<base::SequencedTaskRunner> original_task_runner, |
| 71 const InitializeCallback& callback) { | 83 const InitializeCallback& callback) { |
| 72 DCHECK(database); | 84 DCHECK(database); |
| 73 scoped_ptr<ServiceWorkerStorage::InitialData> data( | 85 scoped_ptr<ServiceWorkerStorage::InitialData> data( |
| 74 new ServiceWorkerStorage::InitialData()); | 86 new ServiceWorkerStorage::InitialData()); |
| 75 | 87 |
| 76 ServiceWorkerStatusCode status = | 88 ServiceWorkerDatabase::Status status = |
| 77 database->GetNextAvailableIds(&data->next_registration_id, | 89 database->GetNextAvailableIds(&data->next_registration_id, |
| 78 &data->next_version_id, | 90 &data->next_version_id, |
| 79 &data->next_resource_id); | 91 &data->next_resource_id); |
| 80 if (status != SERVICE_WORKER_OK) { | 92 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 81 original_task_runner->PostTask( | 93 original_task_runner->PostTask( |
| 82 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); | 94 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); |
| 83 return; | 95 return; |
| 84 } | 96 } |
| 85 | 97 |
| 86 status = database->GetOriginsWithRegistrations(&data->origins); | 98 status = database->GetOriginsWithRegistrations(&data->origins); |
| 87 original_task_runner->PostTask( | 99 original_task_runner->PostTask( |
| 88 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); | 100 FROM_HERE, base::Bind(callback, base::Owned(data.release()), status)); |
| 89 } | 101 } |
| 90 | 102 |
| 91 void ReadRegistrationFromDB( | 103 void ReadRegistrationFromDB( |
| 92 ServiceWorkerDatabase* database, | 104 ServiceWorkerDatabase* database, |
| 93 scoped_refptr<base::SequencedTaskRunner> original_task_runner, | 105 scoped_refptr<base::SequencedTaskRunner> original_task_runner, |
| 94 int64 registration_id, | 106 int64 registration_id, |
| 95 const GURL& origin, | 107 const GURL& origin, |
| 96 const ReadRegistrationCallback& callback) { | 108 const ReadRegistrationCallback& callback) { |
| 97 DCHECK(database); | 109 DCHECK(database); |
| 98 ServiceWorkerDatabase::RegistrationData data; | 110 ServiceWorkerDatabase::RegistrationData data; |
| 99 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; | 111 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; |
| 100 | 112 |
| 101 // TODO(nhiroki): The database should return more detailed status like | 113 // TODO(nhiroki): The database should return more detailed status like |
| 102 // ServiceWorkerStatusCode instead of bool value. | 114 // ServiceWorkerStatusCode instead of bool value. |
| 103 ServiceWorkerStatusCode status = SERVICE_WORKER_OK; | 115 ServiceWorkerDatabase::Status status = ServiceWorkerDatabase::STATUS_OK; |
| 104 if (!database->ReadRegistration(registration_id, origin, &data, &resources)) { | 116 if (!database->ReadRegistration(registration_id, origin, &data, &resources)) { |
| 105 status = database->is_disabled() ? SERVICE_WORKER_ERROR_FAILED | 117 status = database->is_disabled() |
| 106 : SERVICE_WORKER_ERROR_NOT_FOUND; | 118 ? ServiceWorkerDatabase::STATUS_ERROR_FAILED |
| 119 : ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND; |
| 107 } | 120 } |
| 108 original_task_runner->PostTask( | 121 original_task_runner->PostTask( |
| 109 FROM_HERE, base::Bind(callback, data, resources, status)); | 122 FROM_HERE, base::Bind(callback, data, resources, status)); |
| 110 } | 123 } |
| 111 | 124 |
| 112 void DeleteRegistrationFromDB( | 125 void DeleteRegistrationFromDB( |
| 113 ServiceWorkerDatabase* database, | 126 ServiceWorkerDatabase* database, |
| 114 scoped_refptr<base::SequencedTaskRunner> original_task_runner, | 127 scoped_refptr<base::SequencedTaskRunner> original_task_runner, |
| 115 int64 registration_id, | 128 int64 registration_id, |
| 116 const GURL& origin, | 129 const GURL& origin, |
| 117 const DeleteRegistrationCallback& callback) { | 130 const DeleteRegistrationCallback& callback) { |
| 118 DCHECK(database); | 131 DCHECK(database); |
| 119 if (!database->DeleteRegistration(registration_id, origin)) { | 132 if (!database->DeleteRegistration(registration_id, origin)) { |
| 120 original_task_runner->PostTask( | 133 original_task_runner->PostTask( |
| 121 FROM_HERE, base::Bind(callback, false, SERVICE_WORKER_ERROR_FAILED)); | 134 FROM_HERE, base::Bind(callback, false, |
| 135 ServiceWorkerDatabase::STATUS_ERROR_FAILED)); |
| 122 return; | 136 return; |
| 123 } | 137 } |
| 124 | 138 |
| 125 // TODO(nhiroki): Add convenient method to ServiceWorkerDatabase to check the | 139 // TODO(nhiroki): Add convenient method to ServiceWorkerDatabase to check the |
| 126 // unique origin list. | 140 // unique origin list. |
| 127 std::vector<ServiceWorkerDatabase::RegistrationData> registrations; | 141 std::vector<ServiceWorkerDatabase::RegistrationData> registrations; |
| 128 if (!database->GetRegistrationsForOrigin(origin, ®istrations)) { | 142 ServiceWorkerDatabase::Status status = |
| 143 database->GetRegistrationsForOrigin(origin, ®istrations); |
| 144 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 129 original_task_runner->PostTask( | 145 original_task_runner->PostTask( |
| 130 FROM_HERE, base::Bind(callback, false, SERVICE_WORKER_ERROR_FAILED)); | 146 FROM_HERE, base::Bind(callback, false, status)); |
| 131 return; | 147 return; |
| 132 } | 148 } |
| 133 | 149 |
| 134 bool deletable = registrations.empty(); | 150 bool deletable = registrations.empty(); |
| 135 original_task_runner->PostTask( | 151 original_task_runner->PostTask( |
| 136 FROM_HERE, base::Bind(callback, deletable, SERVICE_WORKER_OK)); | 152 FROM_HERE, base::Bind(callback, deletable, |
| 153 ServiceWorkerDatabase::STATUS_OK)); |
| 137 } | 154 } |
| 138 | 155 |
| 139 void UpdateToActiveStateInDB( | 156 void UpdateToActiveStateInDB( |
| 140 ServiceWorkerDatabase* database, | 157 ServiceWorkerDatabase* database, |
| 141 scoped_refptr<base::SequencedTaskRunner> original_task_runner, | 158 scoped_refptr<base::SequencedTaskRunner> original_task_runner, |
| 142 int64 registration_id, | 159 int64 registration_id, |
| 143 const GURL& origin, | 160 const GURL& origin, |
| 144 const ServiceWorkerStorage::StatusCallback& callback) { | 161 const ServiceWorkerStorage::StatusCallback& callback) { |
| 145 DCHECK(database); | 162 DCHECK(database); |
| 146 | 163 |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 base::Bind(&ReadInitialDataFromDB, | 509 base::Bind(&ReadInitialDataFromDB, |
| 493 database_.get(), | 510 database_.get(), |
| 494 base::MessageLoopProxy::current(), | 511 base::MessageLoopProxy::current(), |
| 495 base::Bind(&ServiceWorkerStorage::DidReadInitialData, | 512 base::Bind(&ServiceWorkerStorage::DidReadInitialData, |
| 496 weak_factory_.GetWeakPtr()))); | 513 weak_factory_.GetWeakPtr()))); |
| 497 return false; | 514 return false; |
| 498 } | 515 } |
| 499 | 516 |
| 500 void ServiceWorkerStorage::DidReadInitialData( | 517 void ServiceWorkerStorage::DidReadInitialData( |
| 501 InitialData* data, | 518 InitialData* data, |
| 502 ServiceWorkerStatusCode status) { | 519 ServiceWorkerDatabase::Status status) { |
| 503 DCHECK(data); | 520 DCHECK(data); |
| 504 DCHECK_EQ(INITIALIZING, state_); | 521 DCHECK_EQ(INITIALIZING, state_); |
| 505 | 522 |
| 506 if (status == SERVICE_WORKER_OK) { | 523 if (status == ServiceWorkerDatabase::STATUS_OK) { |
| 507 next_registration_id_ = data->next_registration_id; | 524 next_registration_id_ = data->next_registration_id; |
| 508 next_version_id_ = data->next_version_id; | 525 next_version_id_ = data->next_version_id; |
| 509 next_resource_id_ = data->next_resource_id; | 526 next_resource_id_ = data->next_resource_id; |
| 510 registered_origins_.swap(data->origins); | 527 registered_origins_.swap(data->origins); |
| 511 state_ = INITIALIZED; | 528 state_ = INITIALIZED; |
| 512 } else { | 529 } else { |
| 513 // TODO(nhiroki): If status==SERVICE_WORKER_ERROR_DB_CORRUPTED, do | 530 // TODO(nhiroki): If status==STATUS_ERROR_CORRUPTED, do corruption recovery |
| 514 // corruption recovery (http://crbug.com/371675). | 531 // (http://crbug.com/371675). |
| 515 DLOG(WARNING) << "Failed to initialize: " | 532 DLOG(WARNING) << "Failed to initialize: " << status; |
| 516 << ServiceWorkerStatusToString(status); | |
| 517 state_ = DISABLED; | 533 state_ = DISABLED; |
| 518 } | 534 } |
| 519 | 535 |
| 520 for (std::vector<base::Closure>::const_iterator it = pending_tasks_.begin(); | 536 for (std::vector<base::Closure>::const_iterator it = pending_tasks_.begin(); |
| 521 it != pending_tasks_.end(); ++it) { | 537 it != pending_tasks_.end(); ++it) { |
| 522 RunSoon(FROM_HERE, *it); | 538 RunSoon(FROM_HERE, *it); |
| 523 } | 539 } |
| 524 pending_tasks_.clear(); | 540 pending_tasks_.clear(); |
| 525 } | 541 } |
| 526 | 542 |
| 527 void ServiceWorkerStorage::DidGetRegistrationsForPattern( | 543 void ServiceWorkerStorage::DidGetRegistrationsForPattern( |
| 528 const GURL& scope, | 544 const GURL& scope, |
| 529 const FindRegistrationCallback& callback, | 545 const FindRegistrationCallback& callback, |
| 530 RegistrationList* registrations, | 546 RegistrationList* registrations, |
| 531 bool success) { | 547 ServiceWorkerDatabase::Status status) { |
| 532 DCHECK(registrations); | 548 DCHECK(registrations); |
| 533 if (!success) { | 549 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 550 // TODO(nhiroki): Handle database error (http://crbug.com/371675). |
| 534 callback.Run(SERVICE_WORKER_ERROR_FAILED, | 551 callback.Run(SERVICE_WORKER_ERROR_FAILED, |
| 535 scoped_refptr<ServiceWorkerRegistration>()); | 552 scoped_refptr<ServiceWorkerRegistration>()); |
| 536 return; | 553 return; |
| 537 } | 554 } |
| 538 | 555 |
| 539 // Find one with a matching scope. | 556 // Find one with a matching scope. |
| 540 for (RegistrationList::const_iterator it = registrations->begin(); | 557 for (RegistrationList::const_iterator it = registrations->begin(); |
| 541 it != registrations->end(); ++it) { | 558 it != registrations->end(); ++it) { |
| 542 if (scope == it->scope) { | 559 if (scope == it->scope) { |
| 543 scoped_refptr<ServiceWorkerRegistration> registration = | 560 scoped_refptr<ServiceWorkerRegistration> registration = |
| (...skipping 14 matching lines...) Expand all Loading... |
| 558 } | 575 } |
| 559 | 576 |
| 560 callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND, | 577 callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND, |
| 561 scoped_refptr<ServiceWorkerRegistration>()); | 578 scoped_refptr<ServiceWorkerRegistration>()); |
| 562 } | 579 } |
| 563 | 580 |
| 564 void ServiceWorkerStorage::DidGetRegistrationsForDocument( | 581 void ServiceWorkerStorage::DidGetRegistrationsForDocument( |
| 565 const GURL& document_url, | 582 const GURL& document_url, |
| 566 const FindRegistrationCallback& callback, | 583 const FindRegistrationCallback& callback, |
| 567 RegistrationList* registrations, | 584 RegistrationList* registrations, |
| 568 bool success) { | 585 ServiceWorkerDatabase::Status status) { |
| 569 DCHECK(registrations); | 586 DCHECK(registrations); |
| 570 if (!success) { | 587 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 588 // TODO(nhiroki): Handle database error (http://crbug.com/371675). |
| 571 callback.Run(SERVICE_WORKER_ERROR_FAILED, | 589 callback.Run(SERVICE_WORKER_ERROR_FAILED, |
| 572 scoped_refptr<ServiceWorkerRegistration>()); | 590 scoped_refptr<ServiceWorkerRegistration>()); |
| 573 return; | 591 return; |
| 574 } | 592 } |
| 575 | 593 |
| 576 // Find one with a pattern match. | 594 // Find one with a pattern match. |
| 577 for (RegistrationList::const_iterator it = registrations->begin(); | 595 for (RegistrationList::const_iterator it = registrations->begin(); |
| 578 it != registrations->end(); ++it) { | 596 it != registrations->end(); ++it) { |
| 579 // TODO(michaeln): if there are multiple matches the one with | 597 // TODO(michaeln): if there are multiple matches the one with |
| 580 // the longest scope should win. | 598 // the longest scope should win. |
| (...skipping 20 matching lines...) Expand all Loading... |
| 601 } | 619 } |
| 602 | 620 |
| 603 callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND, | 621 callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND, |
| 604 scoped_refptr<ServiceWorkerRegistration>()); | 622 scoped_refptr<ServiceWorkerRegistration>()); |
| 605 } | 623 } |
| 606 | 624 |
| 607 void ServiceWorkerStorage::DidReadRegistrationForId( | 625 void ServiceWorkerStorage::DidReadRegistrationForId( |
| 608 const FindRegistrationCallback& callback, | 626 const FindRegistrationCallback& callback, |
| 609 const ServiceWorkerDatabase::RegistrationData& registration, | 627 const ServiceWorkerDatabase::RegistrationData& registration, |
| 610 const ResourceList& resources, | 628 const ResourceList& resources, |
| 611 ServiceWorkerStatusCode status) { | 629 ServiceWorkerDatabase::Status status) { |
| 612 if (status == SERVICE_WORKER_OK) { | 630 if (status == ServiceWorkerDatabase::STATUS_OK) { |
| 613 callback.Run(status, CreateRegistration(registration)); | 631 callback.Run(SERVICE_WORKER_OK, CreateRegistration(registration)); |
| 614 return; | 632 return; |
| 615 } | 633 } |
| 616 | 634 |
| 617 if (status == SERVICE_WORKER_ERROR_NOT_FOUND) { | 635 if (status == ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { |
| 618 // Look for somthing currently being installed. | 636 // Look for somthing currently being installed. |
| 619 scoped_refptr<ServiceWorkerRegistration> installing_registration = | 637 scoped_refptr<ServiceWorkerRegistration> installing_registration = |
| 620 FindInstallingRegistrationForId(registration.registration_id); | 638 FindInstallingRegistrationForId(registration.registration_id); |
| 621 if (installing_registration) { | 639 if (installing_registration) { |
| 622 callback.Run(SERVICE_WORKER_OK, installing_registration); | 640 callback.Run(SERVICE_WORKER_OK, installing_registration); |
| 623 return; | 641 return; |
| 624 } | 642 } |
| 625 callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND, | 643 callback.Run(SERVICE_WORKER_ERROR_NOT_FOUND, |
| 626 scoped_refptr<ServiceWorkerRegistration>()); | 644 scoped_refptr<ServiceWorkerRegistration>()); |
| 627 return; | 645 return; |
| 628 } | 646 } |
| 629 | 647 |
| 630 callback.Run(status, scoped_refptr<ServiceWorkerRegistration>()); | 648 callback.Run(DatabaseStatusToStatusCode(status), |
| 649 scoped_refptr<ServiceWorkerRegistration>()); |
| 631 return; | 650 return; |
| 632 } | 651 } |
| 633 | 652 |
| 634 void ServiceWorkerStorage::DidGetAllRegistrations( | 653 void ServiceWorkerStorage::DidGetAllRegistrations( |
| 635 const GetAllRegistrationInfosCallback& callback, | 654 const GetAllRegistrationInfosCallback& callback, |
| 636 RegistrationList* registrations, | 655 RegistrationList* registrations, |
| 637 bool success) { | 656 ServiceWorkerDatabase::Status status) { |
| 638 DCHECK(registrations); | 657 DCHECK(registrations); |
| 639 if (!success) { | 658 if (status != ServiceWorkerDatabase::STATUS_OK) { |
| 659 // TODO(nhiroki): Handle database error (http://crbug.com/371675). |
| 640 callback.Run(std::vector<ServiceWorkerRegistrationInfo>()); | 660 callback.Run(std::vector<ServiceWorkerRegistrationInfo>()); |
| 641 return; | 661 return; |
| 642 } | 662 } |
| 643 | 663 |
| 644 // Add all stored registrations. | 664 // Add all stored registrations. |
| 645 std::set<int64> pushed_registrations; | 665 std::set<int64> pushed_registrations; |
| 646 std::vector<ServiceWorkerRegistrationInfo> infos; | 666 std::vector<ServiceWorkerRegistrationInfo> infos; |
| 647 for (RegistrationList::const_iterator it = registrations->begin(); | 667 for (RegistrationList::const_iterator it = registrations->begin(); |
| 648 it != registrations->end(); ++it) { | 668 it != registrations->end(); ++it) { |
| 649 DCHECK(pushed_registrations.insert(it->registration_id).second); | 669 DCHECK(pushed_registrations.insert(it->registration_id).second); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 685 return; | 705 return; |
| 686 } | 706 } |
| 687 registered_origins_.insert(origin); | 707 registered_origins_.insert(origin); |
| 688 callback.Run(SERVICE_WORKER_OK); | 708 callback.Run(SERVICE_WORKER_OK); |
| 689 } | 709 } |
| 690 | 710 |
| 691 void ServiceWorkerStorage::DidDeleteRegistration( | 711 void ServiceWorkerStorage::DidDeleteRegistration( |
| 692 const GURL& origin, | 712 const GURL& origin, |
| 693 const StatusCallback& callback, | 713 const StatusCallback& callback, |
| 694 bool origin_is_deletable, | 714 bool origin_is_deletable, |
| 695 ServiceWorkerStatusCode status) { | 715 ServiceWorkerDatabase::Status status) { |
| 696 if (origin_is_deletable) | 716 if (origin_is_deletable) |
| 697 registered_origins_.erase(origin); | 717 registered_origins_.erase(origin); |
| 698 callback.Run(status); | 718 callback.Run(DatabaseStatusToStatusCode(status)); |
| 699 } | 719 } |
| 700 | 720 |
| 701 scoped_refptr<ServiceWorkerRegistration> | 721 scoped_refptr<ServiceWorkerRegistration> |
| 702 ServiceWorkerStorage::CreateRegistration( | 722 ServiceWorkerStorage::CreateRegistration( |
| 703 const ServiceWorkerDatabase::RegistrationData& data) { | 723 const ServiceWorkerDatabase::RegistrationData& data) { |
| 704 scoped_refptr<ServiceWorkerRegistration> registration( | 724 scoped_refptr<ServiceWorkerRegistration> registration( |
| 705 new ServiceWorkerRegistration( | 725 new ServiceWorkerRegistration( |
| 706 data.scope, data.script, data.registration_id, context_)); | 726 data.scope, data.script, data.registration_id, context_)); |
| 707 | 727 |
| 708 scoped_refptr<ServiceWorkerVersion> version = | 728 scoped_refptr<ServiceWorkerVersion> version = |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 // TODO(michaeln): Store data on disk and do error checking. | 791 // TODO(michaeln): Store data on disk and do error checking. |
| 772 disk_cache_.reset(new ServiceWorkerDiskCache); | 792 disk_cache_.reset(new ServiceWorkerDiskCache); |
| 773 int rv = disk_cache_->InitWithMemBackend( | 793 int rv = disk_cache_->InitWithMemBackend( |
| 774 kMaxMemDiskCacheSize, | 794 kMaxMemDiskCacheSize, |
| 775 base::Bind(&EmptyCompletionCallback)); | 795 base::Bind(&EmptyCompletionCallback)); |
| 776 DCHECK_EQ(net::OK, rv); | 796 DCHECK_EQ(net::OK, rv); |
| 777 return disk_cache_.get(); | 797 return disk_cache_.get(); |
| 778 } | 798 } |
| 779 | 799 |
| 780 } // namespace content | 800 } // namespace content |
| OLD | NEW |