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

Unified Diff: content/browser/service_worker/service_worker_storage.cc

Issue 672813002: [ServiceWorker] Added size deltas and total size computation for QuotaM. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: RegistrationData output for Delete Created 6 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_storage.cc
diff --git a/content/browser/service_worker/service_worker_storage.cc b/content/browser/service_worker/service_worker_storage.cc
index b0cfe30899555d00f5ab85e8ded16a9d3d163346..92c491343bdad3ae86f9229088c23c9c8c8386a5 100644
--- a/content/browser/service_worker/service_worker_storage.cc
+++ b/content/browser/service_worker/service_worker_storage.cc
@@ -440,6 +440,23 @@ void ServiceWorkerStorage::GetAllRegistrations(
base::Owned(registrations)));
}
+void ServiceWorkerStorage::GetAllUsageByOrigin(
+ const OriginUsageCallback& callback) {
+ DCHECK(state_ == INITIALIZED || state_ == DISABLED) << state_;
+
+ RegistrationList* registrations = new RegistrationList;
+ PostTaskAndReplyWithResult(
+ database_task_manager_->GetTaskRunner(),
+ FROM_HERE,
+ base::Bind(&ServiceWorkerDatabase::GetAllRegistrations,
+ base::Unretained(database_.get()),
+ base::Unretained(registrations)),
+ base::Bind(&ServiceWorkerStorage::DidGetRegistrationsForUsage,
+ weak_factory_.GetWeakPtr(),
+ callback,
+ base::Owned(registrations)));
+}
+
void ServiceWorkerStorage::StoreRegistration(
ServiceWorkerRegistration* registration,
ServiceWorkerVersion* version,
@@ -479,22 +496,14 @@ void ServiceWorkerStorage::StoreRegistration(
base::Bind(&WriteRegistrationInDB,
database_.get(),
base::MessageLoopProxy::current(),
- data, resources,
+ data,
+ resources,
base::Bind(&ServiceWorkerStorage::DidStoreRegistration,
weak_factory_.GetWeakPtr(),
- callback)));
+ callback,
+ data)));
registration->set_is_deleted(false);
-
- // TODO(dmurph): Add correct byte delta.
- if (quota_manager_proxy_.get()) {
- // Can be nullptr in tests.
- quota_manager_proxy_->NotifyStorageModified(
- storage::QuotaClient::kServiceWorker,
- registration->pattern().GetOrigin(),
- storage::StorageType::kStorageTypeTemporary,
- 0);
- }
}
void ServiceWorkerStorage::UpdateToActiveState(
@@ -976,10 +985,31 @@ void ServiceWorkerStorage::DidGetAllRegistrations(
callback.Run(infos);
}
+void ServiceWorkerStorage::DidGetRegistrationsForUsage(
+ const OriginUsageCallback& callback,
+ RegistrationList* registrations,
+ ServiceWorkerDatabase::Status status) {
+ DCHECK(registrations);
+ if (status != ServiceWorkerDatabase::STATUS_OK &&
+ status != ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND) {
+ ScheduleDeleteAndStartOver();
+ callback.Run(std::map<GURL, int64>());
+ return;
+ }
+
+ std::map<GURL, int64> usage_map;
+ for (const auto& registration : *registrations) {
+ usage_map[registration.scope.GetOrigin()] +=
+ registration.resources_total_size_bytes;
+ }
+ callback.Run(usage_map);
+}
+
void ServiceWorkerStorage::DidStoreRegistration(
const StatusCallback& callback,
+ const ServiceWorkerDatabase::RegistrationData& new_version,
const GURL& origin,
- int64 deleted_version_id,
+ ServiceWorkerDatabase::RegistrationData* deleted_version,
const std::vector<int64>& newly_purgeable_resources,
ServiceWorkerDatabase::Status status) {
if (status != ServiceWorkerDatabase::STATUS_OK) {
@@ -987,10 +1017,19 @@ void ServiceWorkerStorage::DidStoreRegistration(
callback.Run(DatabaseStatusToStatusCode(status));
return;
}
+ if (quota_manager_proxy_.get()) {
+ // Can be nullptr in tests.
+ quota_manager_proxy_->NotifyStorageModified(
+ storage::QuotaClient::kServiceWorker,
+ origin,
+ storage::StorageType::kStorageTypeTemporary,
+ new_version.resources_total_size_bytes -
+ deleted_version->resources_total_size_bytes);
+ }
registered_origins_.insert(origin);
callback.Run(SERVICE_WORKER_OK);
- if (!context_ || !context_->GetLiveVersion(deleted_version_id))
+ if (!context_ || !context_->GetLiveVersion(deleted_version->version_id))
StartPurgingResources(newly_purgeable_resources);
}
@@ -1007,20 +1046,29 @@ void ServiceWorkerStorage::DidUpdateToActiveState(
void ServiceWorkerStorage::DidDeleteRegistration(
const DidDeleteRegistrationParams& params,
bool origin_is_deletable,
- int64 version_id,
+ ServiceWorkerDatabase::RegistrationData* deleted_version,
const std::vector<int64>& newly_purgeable_resources,
ServiceWorkerDatabase::Status status) {
+ DCHECK(deleted_version);
pending_deletions_.erase(params.registration_id);
if (status != ServiceWorkerDatabase::STATUS_OK) {
ScheduleDeleteAndStartOver();
params.callback.Run(DatabaseStatusToStatusCode(status));
return;
}
+ if (quota_manager_proxy_.get()) {
+ // Can be nullptr in tests.
+ quota_manager_proxy_->NotifyStorageModified(
+ storage::QuotaClient::kServiceWorker,
+ params.origin,
+ storage::StorageType::kStorageTypeTemporary,
+ -deleted_version->resources_total_size_bytes);
+ }
if (origin_is_deletable)
registered_origins_.erase(params.origin);
params.callback.Run(SERVICE_WORKER_OK);
- if (!context_ || !context_->GetLiveVersion(version_id))
+ if (!context_ || !context_->GetLiveVersion(deleted_version->version_id))
StartPurgingResources(newly_purgeable_resources);
}
@@ -1294,17 +1342,23 @@ void ServiceWorkerStorage::DeleteRegistrationFromDB(
const DeleteRegistrationCallback& callback) {
DCHECK(database);
- int64 version_id = kInvalidServiceWorkerVersionId;
+ auto deleted_version =
+ make_scoped_ptr(new ServiceWorkerDatabase::RegistrationData());
+ deleted_version->version_id = kInvalidServiceWorkerVersionId;
michaeln 2014/10/28 22:00:40 this assignement isn't needed since its constructe
dmurph 2014/10/29 22:18:25 Done.
std::vector<int64> newly_purgeable_resources;
- ServiceWorkerDatabase::Status status = database->DeleteRegistration(
- registration_id, origin, &version_id, &newly_purgeable_resources);
+ ServiceWorkerDatabase::Status status =
+ database->DeleteRegistration(registration_id,
+ origin,
+ deleted_version.get(),
+ &newly_purgeable_resources);
if (status != ServiceWorkerDatabase::STATUS_OK) {
- original_task_runner->PostTask(FROM_HERE,
- base::Bind(callback,
- false,
- kInvalidServiceWorkerVersionId,
- std::vector<int64>(),
- status));
+ original_task_runner->PostTask(
+ FROM_HERE,
+ base::Bind(callback,
+ false,
+ base::Owned(deleted_version.release()),
michaeln 2014/10/28 22:00:40 when working with scoped_ptrs<> we usually used ba
dmurph 2014/10/29 22:18:25 Acknowledged.
+ std::vector<int64>(),
+ status));
return;
}
@@ -1313,20 +1367,24 @@ void ServiceWorkerStorage::DeleteRegistrationFromDB(
std::vector<ServiceWorkerDatabase::RegistrationData> registrations;
status = database->GetRegistrationsForOrigin(origin, &registrations);
if (status != ServiceWorkerDatabase::STATUS_OK) {
- original_task_runner->PostTask(FROM_HERE,
- base::Bind(callback,
- false,
- kInvalidServiceWorkerVersionId,
- std::vector<int64>(),
- status));
+ original_task_runner->PostTask(
+ FROM_HERE,
+ base::Bind(callback,
+ false,
+ base::Owned(deleted_version.release()),
+ std::vector<int64>(),
+ status));
return;
}
bool deletable = registrations.empty();
original_task_runner->PostTask(
FROM_HERE,
- base::Bind(
- callback, deletable, version_id, newly_purgeable_resources, status));
+ base::Bind(callback,
+ deletable,
+ base::Owned(deleted_version.release()),
+ newly_purgeable_resources,
+ status));
}
void ServiceWorkerStorage::WriteRegistrationInDB(
@@ -1336,16 +1394,19 @@ void ServiceWorkerStorage::WriteRegistrationInDB(
const ResourceList& resources,
const WriteRegistrationCallback& callback) {
DCHECK(database);
- int64 deleted_version_id = kInvalidServiceWorkerVersionId;
+ auto deleted_version =
+ make_scoped_ptr(new ServiceWorkerDatabase::RegistrationData());
+ deleted_version->registration_id = kInvalidServiceWorkerVersionId;
std::vector<int64> newly_purgeable_resources;
ServiceWorkerDatabase::Status status = database->WriteRegistration(
- data, resources, &deleted_version_id, &newly_purgeable_resources);
- original_task_runner->PostTask(FROM_HERE,
- base::Bind(callback,
- data.script.GetOrigin(),
- deleted_version_id,
- newly_purgeable_resources,
- status));
+ data, resources, deleted_version.get(), &newly_purgeable_resources);
+ original_task_runner->PostTask(
+ FROM_HERE,
+ base::Bind(callback,
+ data.script.GetOrigin(),
+ base::Owned(deleted_version.release()),
+ newly_purgeable_resources,
+ status));
}
void ServiceWorkerStorage::FindForDocumentInDB(

Powered by Google App Engine
This is Rietveld 408576698