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

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

Issue 1945753002: Make Service Worker DB UserData methods accept multiple keys at once (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@iid6encrypt
Patch Set: Rebase Created 4 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
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility>
10
11 #include "base/bind_helpers.h" 9 #include "base/bind_helpers.h"
12 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
13 #include "base/memory/ptr_util.h" 11 #include "base/memory/ptr_util.h"
14 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
15 #include "base/sequenced_task_runner.h" 13 #include "base/sequenced_task_runner.h"
16 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
17 #include "base/task_runner_util.h" 15 #include "base/task_runner_util.h"
18 #include "base/thread_task_runner_handle.h" 16 #include "base/thread_task_runner_handle.h"
19 #include "base/trace_event/trace_event.h" 17 #include "base/trace_event/trace_event.h"
20 #include "content/browser/service_worker/service_worker_context_core.h" 18 #include "content/browser/service_worker/service_worker_context_core.h"
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 return; 565 return;
568 566
569 PostTaskAndReplyWithResult( 567 PostTaskAndReplyWithResult(
570 database_task_manager_->GetTaskRunner(), FROM_HERE, 568 database_task_manager_->GetTaskRunner(), FROM_HERE,
571 base::Bind(&ServiceWorkerDatabase::PurgeUncommittedResourceIds, 569 base::Bind(&ServiceWorkerDatabase::PurgeUncommittedResourceIds,
572 base::Unretained(database_.get()), resource_ids), 570 base::Unretained(database_.get()), resource_ids),
573 base::Bind(&ServiceWorkerStorage::DidPurgeUncommittedResourceIds, 571 base::Bind(&ServiceWorkerStorage::DidPurgeUncommittedResourceIds,
574 weak_factory_.GetWeakPtr(), resource_ids)); 572 weak_factory_.GetWeakPtr(), resource_ids));
575 } 573 }
576 574
577 void ServiceWorkerStorage::StoreUserData(int64_t registration_id, 575 void ServiceWorkerStorage::StoreUserData(
578 const GURL& origin, 576 int64_t registration_id,
579 const std::string& key, 577 const GURL& origin,
580 const std::string& data, 578 const std::vector<std::pair<std::string, std::string>>& key_value_pairs,
581 const StatusCallback& callback) { 579 const StatusCallback& callback) {
582 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; 580 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_;
583 if (IsDisabled()) { 581 if (IsDisabled()) {
584 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_ABORT)); 582 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_ABORT));
585 return; 583 return;
586 } 584 }
587 585
588 if (registration_id == kInvalidServiceWorkerRegistrationId || key.empty()) { 586 if (registration_id == kInvalidServiceWorkerRegistrationId ||
587 key_value_pairs.empty()) {
589 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); 588 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED));
590 return; 589 return;
591 } 590 }
591 for (const auto& kv : key_value_pairs) {
592 if (kv.first.empty()) {
593 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED));
594 return;
595 }
596 }
592 597
593 PostTaskAndReplyWithResult( 598 PostTaskAndReplyWithResult(
594 database_task_manager_->GetTaskRunner(), 599 database_task_manager_->GetTaskRunner(), FROM_HERE,
595 FROM_HERE,
596 base::Bind(&ServiceWorkerDatabase::WriteUserData, 600 base::Bind(&ServiceWorkerDatabase::WriteUserData,
597 base::Unretained(database_.get()), 601 base::Unretained(database_.get()), registration_id, origin,
598 registration_id, origin, key, data), 602 key_value_pairs),
599 base::Bind(&ServiceWorkerStorage::DidStoreUserData, 603 base::Bind(&ServiceWorkerStorage::DidStoreUserData,
600 weak_factory_.GetWeakPtr(), 604 weak_factory_.GetWeakPtr(), callback));
601 callback));
602 } 605 }
603 606
604 void ServiceWorkerStorage::GetUserData(int64_t registration_id, 607 void ServiceWorkerStorage::GetUserData(int64_t registration_id,
605 const std::string& key, 608 const std::vector<std::string>& keys,
606 const GetUserDataCallback& callback) { 609 const GetUserDataCallback& callback) {
607 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; 610 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_;
608 if (IsDisabled()) { 611 if (IsDisabled()) {
609 RunSoon(FROM_HERE, 612 RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(),
610 base::Bind(callback, std::string(), SERVICE_WORKER_ERROR_ABORT)); 613 SERVICE_WORKER_ERROR_ABORT));
611 return; 614 return;
612 } 615 }
613 616
614 if (registration_id == kInvalidServiceWorkerRegistrationId || key.empty()) { 617 if (registration_id == kInvalidServiceWorkerRegistrationId || keys.empty()) {
615 RunSoon(FROM_HERE, 618 RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(),
616 base::Bind(callback, std::string(), SERVICE_WORKER_ERROR_FAILED)); 619 SERVICE_WORKER_ERROR_FAILED));
617 return; 620 return;
618 } 621 }
622 for (const std::string& key : keys) {
623 if (key.empty()) {
624 RunSoon(FROM_HERE, base::Bind(callback, std::vector<std::string>(),
625 SERVICE_WORKER_ERROR_FAILED));
626 return;
627 }
628 }
619 629
620 database_task_manager_->GetTaskRunner()->PostTask( 630 database_task_manager_->GetTaskRunner()->PostTask(
621 FROM_HERE, 631 FROM_HERE,
622 base::Bind(&ServiceWorkerStorage::GetUserDataInDB, 632 base::Bind(&ServiceWorkerStorage::GetUserDataInDB, database_.get(),
623 database_.get(), 633 base::ThreadTaskRunnerHandle::Get(), registration_id, keys,
624 base::ThreadTaskRunnerHandle::Get(),
625 registration_id,
626 key,
627 base::Bind(&ServiceWorkerStorage::DidGetUserData, 634 base::Bind(&ServiceWorkerStorage::DidGetUserData,
628 weak_factory_.GetWeakPtr(), 635 weak_factory_.GetWeakPtr(), callback)));
629 callback)));
630 } 636 }
631 637
632 void ServiceWorkerStorage::ClearUserData(int64_t registration_id, 638 void ServiceWorkerStorage::ClearUserData(int64_t registration_id,
633 const std::string& key, 639 const std::vector<std::string>& keys,
634 const StatusCallback& callback) { 640 const StatusCallback& callback) {
635 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_; 641 DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_;
636 if (IsDisabled()) { 642 if (IsDisabled()) {
637 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_ABORT)); 643 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_ABORT));
638 return; 644 return;
639 } 645 }
640 646
641 if (registration_id == kInvalidServiceWorkerRegistrationId || key.empty()) { 647 if (registration_id == kInvalidServiceWorkerRegistrationId || keys.empty()) {
642 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED)); 648 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED));
643 return; 649 return;
644 } 650 }
651 for (const std::string& key : keys) {
652 if (key.empty()) {
653 RunSoon(FROM_HERE, base::Bind(callback, SERVICE_WORKER_ERROR_FAILED));
654 return;
655 }
656 }
645 657
646 PostTaskAndReplyWithResult( 658 PostTaskAndReplyWithResult(
647 database_task_manager_->GetTaskRunner(), 659 database_task_manager_->GetTaskRunner(), FROM_HERE,
648 FROM_HERE,
649 base::Bind(&ServiceWorkerDatabase::DeleteUserData, 660 base::Bind(&ServiceWorkerDatabase::DeleteUserData,
650 base::Unretained(database_.get()), 661 base::Unretained(database_.get()), registration_id, keys),
651 registration_id, key),
652 base::Bind(&ServiceWorkerStorage::DidDeleteUserData, 662 base::Bind(&ServiceWorkerStorage::DidDeleteUserData,
653 weak_factory_.GetWeakPtr(), 663 weak_factory_.GetWeakPtr(), callback));
654 callback));
655 } 664 }
656 665
657 void ServiceWorkerStorage::GetUserDataForAllRegistrations( 666 void ServiceWorkerStorage::GetUserDataForAllRegistrations(
658 const std::string& key, 667 const std::string& key,
659 const ServiceWorkerStorage::GetUserDataForAllRegistrationsCallback& 668 const ServiceWorkerStorage::GetUserDataForAllRegistrationsCallback&
660 callback) { 669 callback) {
661 if (!LazyInitialize( 670 if (!LazyInitialize(
662 base::Bind(&ServiceWorkerStorage::GetUserDataForAllRegistrations, 671 base::Bind(&ServiceWorkerStorage::GetUserDataForAllRegistrations,
663 weak_factory_.GetWeakPtr(), key, callback))) { 672 weak_factory_.GetWeakPtr(), key, callback))) {
664 if (state_ != INITIALIZING) { 673 if (state_ != INITIALIZING) {
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after
1179 // recovery. 1188 // recovery.
1180 if (status != ServiceWorkerDatabase::STATUS_OK && 1189 if (status != ServiceWorkerDatabase::STATUS_OK &&
1181 status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { 1190 status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) {
1182 ScheduleDeleteAndStartOver(); 1191 ScheduleDeleteAndStartOver();
1183 } 1192 }
1184 callback.Run(DatabaseStatusToStatusCode(status)); 1193 callback.Run(DatabaseStatusToStatusCode(status));
1185 } 1194 }
1186 1195
1187 void ServiceWorkerStorage::DidGetUserData( 1196 void ServiceWorkerStorage::DidGetUserData(
1188 const GetUserDataCallback& callback, 1197 const GetUserDataCallback& callback,
1189 const std::string& data, 1198 const std::vector<std::string>& data,
1190 ServiceWorkerDatabase::Status status) { 1199 ServiceWorkerDatabase::Status status) {
1191 if (status != ServiceWorkerDatabase::STATUS_OK && 1200 if (status != ServiceWorkerDatabase::STATUS_OK &&
1192 status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) { 1201 status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) {
1193 ScheduleDeleteAndStartOver(); 1202 ScheduleDeleteAndStartOver();
1194 } 1203 }
1195 callback.Run(data, DatabaseStatusToStatusCode(status)); 1204 callback.Run(data, DatabaseStatusToStatusCode(status));
1196 } 1205 }
1197 1206
1198 void ServiceWorkerStorage::DidDeleteUserData( 1207 void ServiceWorkerStorage::DidDeleteUserData(
1199 const StatusCallback& callback, 1208 const StatusCallback& callback,
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after
1665 return; 1674 return;
1666 } 1675 }
1667 FindForIdInDB(database, original_task_runner, registration_id, origin, 1676 FindForIdInDB(database, original_task_runner, registration_id, origin,
1668 callback); 1677 callback);
1669 } 1678 }
1670 1679
1671 void ServiceWorkerStorage::GetUserDataInDB( 1680 void ServiceWorkerStorage::GetUserDataInDB(
1672 ServiceWorkerDatabase* database, 1681 ServiceWorkerDatabase* database,
1673 scoped_refptr<base::SequencedTaskRunner> original_task_runner, 1682 scoped_refptr<base::SequencedTaskRunner> original_task_runner,
1674 int64_t registration_id, 1683 int64_t registration_id,
1675 const std::string& key, 1684 const std::vector<std::string>& keys,
1676 const GetUserDataInDBCallback& callback) { 1685 const GetUserDataInDBCallback& callback) {
1677 std::string data; 1686 std::vector<std::string> values;
1678 ServiceWorkerDatabase::Status status = 1687 ServiceWorkerDatabase::Status status =
1679 database->ReadUserData(registration_id, key, &data); 1688 database->ReadUserData(registration_id, keys, &values);
1680 original_task_runner->PostTask( 1689 original_task_runner->PostTask(FROM_HERE,
1681 FROM_HERE, base::Bind(callback, data, status)); 1690 base::Bind(callback, values, status));
1682 } 1691 }
1683 1692
1684 void ServiceWorkerStorage::GetUserDataForAllRegistrationsInDB( 1693 void ServiceWorkerStorage::GetUserDataForAllRegistrationsInDB(
1685 ServiceWorkerDatabase* database, 1694 ServiceWorkerDatabase* database,
1686 scoped_refptr<base::SequencedTaskRunner> original_task_runner, 1695 scoped_refptr<base::SequencedTaskRunner> original_task_runner,
1687 const std::string& key, 1696 const std::string& key,
1688 const GetUserDataForAllRegistrationsInDBCallback& callback) { 1697 const GetUserDataForAllRegistrationsInDBCallback& callback) {
1689 std::vector<std::pair<int64_t, std::string>> user_data; 1698 std::vector<std::pair<int64_t, std::string>> user_data;
1690 ServiceWorkerDatabase::Status status = 1699 ServiceWorkerDatabase::Status status =
1691 database->ReadUserDataForAllRegistrations(key, &user_data); 1700 database->ReadUserDataForAllRegistrations(key, &user_data);
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
1760 callback.Run(SERVICE_WORKER_ERROR_FAILED); 1769 callback.Run(SERVICE_WORKER_ERROR_FAILED);
1761 return; 1770 return;
1762 } 1771 }
1763 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully."; 1772 DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully.";
1764 ServiceWorkerMetrics::RecordDeleteAndStartOverResult( 1773 ServiceWorkerMetrics::RecordDeleteAndStartOverResult(
1765 ServiceWorkerMetrics::DELETE_OK); 1774 ServiceWorkerMetrics::DELETE_OK);
1766 callback.Run(SERVICE_WORKER_OK); 1775 callback.Run(SERVICE_WORKER_OK);
1767 } 1776 }
1768 1777
1769 } // namespace content 1778 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698