Commit bcf9ad4f authored by Kenichi Ishibashi's avatar Kenichi Ishibashi Committed by Commit Bot

service worker: Add wrapper of StoreUncommittedResourceId()

This CL moves ScheduleDeleteAndStartOver() call from
ServiceWorkerStorage::DidWriteUncommittedResourceId() to
ServiceWorkerRegistry so that we can reduce ServiceWorkerContextCore
dependency from ServiceWorkerStorage.

Bug: 1039200
Change-Id: If6ca49d6489fbe34a777a3b005ff1a6792e4e257
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2026336
Commit-Queue: Kenichi Ishibashi <bashi@chromium.org>
Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#737176}
parent 519abc1e
...@@ -348,6 +348,13 @@ void ServiceWorkerRegistry::UpdateToActiveState(int64_t registration_id, ...@@ -348,6 +348,13 @@ void ServiceWorkerRegistry::UpdateToActiveState(int64_t registration_id,
weak_factory_.GetWeakPtr(), std::move(callback))); weak_factory_.GetWeakPtr(), std::move(callback)));
} }
void ServiceWorkerRegistry::StoreUncommittedResourceId(int64_t resource_id) {
storage()->StoreUncommittedResourceId(
resource_id,
base::BindOnce(&ServiceWorkerRegistry::DidWriteUncommittedResourceIds,
weak_factory_.GetWeakPtr()));
}
void ServiceWorkerRegistry::GetUserData(int64_t registration_id, void ServiceWorkerRegistry::GetUserData(int64_t registration_id,
const std::vector<std::string>& keys, const std::vector<std::string>& keys,
GetUserDataCallback callback) { GetUserDataCallback callback) {
...@@ -923,6 +930,12 @@ void ServiceWorkerRegistry::DidUpdateToActiveState( ...@@ -923,6 +930,12 @@ void ServiceWorkerRegistry::DidUpdateToActiveState(
ServiceWorkerStorage::DatabaseStatusToStatusCode(status)); ServiceWorkerStorage::DatabaseStatusToStatusCode(status));
} }
void ServiceWorkerRegistry::DidWriteUncommittedResourceIds(
ServiceWorkerDatabase::Status status) {
if (status != ServiceWorkerDatabase::STATUS_OK)
ScheduleDeleteAndStartOver();
}
void ServiceWorkerRegistry::DidGetUserData( void ServiceWorkerRegistry::DidGetUserData(
GetUserDataCallback callback, GetUserDataCallback callback,
const std::vector<std::string>& data, const std::vector<std::string>& data,
......
...@@ -167,6 +167,7 @@ class CONTENT_EXPORT ServiceWorkerRegistry { ...@@ -167,6 +167,7 @@ class CONTENT_EXPORT ServiceWorkerRegistry {
void UpdateToActiveState(int64_t registration_id, void UpdateToActiveState(int64_t registration_id,
const GURL& origin, const GURL& origin,
StatusCallback callback); StatusCallback callback);
void StoreUncommittedResourceId(int64_t resource_id);
void GetUserData(int64_t registration_id, void GetUserData(int64_t registration_id,
const std::vector<std::string>& keys, const std::vector<std::string>& keys,
GetUserDataCallback callback); GetUserDataCallback callback);
...@@ -263,6 +264,7 @@ class CONTENT_EXPORT ServiceWorkerRegistry { ...@@ -263,6 +264,7 @@ class CONTENT_EXPORT ServiceWorkerRegistry {
void DidUpdateToActiveState(StatusCallback callback, void DidUpdateToActiveState(StatusCallback callback,
ServiceWorkerDatabase::Status status); ServiceWorkerDatabase::Status status);
void DidWriteUncommittedResourceIds(ServiceWorkerDatabase::Status status);
void DidGetUserData(GetUserDataCallback callback, void DidGetUserData(GetUserDataCallback callback,
const std::vector<std::string>& data, const std::vector<std::string>& data,
ServiceWorkerDatabase::Status status); ServiceWorkerDatabase::Status status);
......
...@@ -45,7 +45,7 @@ void ServiceWorkerScriptCacheMap::NotifyStartedCaching(const GURL& url, ...@@ -45,7 +45,7 @@ void ServiceWorkerScriptCacheMap::NotifyStartedCaching(const GURL& url,
resource_map_[url] = ServiceWorkerDatabase::ResourceRecord( resource_map_[url] = ServiceWorkerDatabase::ResourceRecord(
resource_id, url, resource_id, url,
ServiceWorkerDatabase::ResourceRecord::ErrorState::kStartedCaching); ServiceWorkerDatabase::ResourceRecord::ErrorState::kStartedCaching);
context_->storage()->StoreUncommittedResourceId(resource_id); context_->registry()->StoreUncommittedResourceId(resource_id);
} }
void ServiceWorkerScriptCacheMap::NotifyFinishedCaching( void ServiceWorkerScriptCacheMap::NotifyFinishedCaching(
......
...@@ -499,13 +499,19 @@ ServiceWorkerStorage::CreateResponseMetadataWriter(int64_t resource_id) { ...@@ -499,13 +499,19 @@ ServiceWorkerStorage::CreateResponseMetadataWriter(int64_t resource_id) {
resource_id, disk_cache()->GetWeakPtr())); resource_id, disk_cache()->GetWeakPtr()));
} }
void ServiceWorkerStorage::StoreUncommittedResourceId(int64_t resource_id) { void ServiceWorkerStorage::StoreUncommittedResourceId(
int64_t resource_id,
DatabaseStatusCallback callback) {
DCHECK_NE(ServiceWorkerConsts::kInvalidServiceWorkerResourceId, resource_id); DCHECK_NE(ServiceWorkerConsts::kInvalidServiceWorkerResourceId, resource_id);
DCHECK(STORAGE_STATE_INITIALIZED == state_ || DCHECK(STORAGE_STATE_INITIALIZED == state_ ||
STORAGE_STATE_DISABLED == state_) STORAGE_STATE_DISABLED == state_)
<< state_; << state_;
if (IsDisabled()) if (IsDisabled()) {
RunSoon(FROM_HERE,
base::BindOnce(std::move(callback),
ServiceWorkerDatabase::STATUS_ERROR_DISABLED));
return; return;
}
if (!has_checked_for_stale_resources_) if (!has_checked_for_stale_resources_)
DeleteStaleResources(); DeleteStaleResources();
...@@ -515,8 +521,7 @@ void ServiceWorkerStorage::StoreUncommittedResourceId(int64_t resource_id) { ...@@ -515,8 +521,7 @@ void ServiceWorkerStorage::StoreUncommittedResourceId(int64_t resource_id) {
base::BindOnce(&ServiceWorkerDatabase::WriteUncommittedResourceIds, base::BindOnce(&ServiceWorkerDatabase::WriteUncommittedResourceIds,
base::Unretained(database_.get()), base::Unretained(database_.get()),
std::set<int64_t>(&resource_id, &resource_id + 1)), std::set<int64_t>(&resource_id, &resource_id + 1)),
base::BindOnce(&ServiceWorkerStorage::DidWriteUncommittedResourceIds, std::move(callback));
weak_factory_.GetWeakPtr()));
} }
void ServiceWorkerStorage::DoomUncommittedResource(int64_t resource_id) { void ServiceWorkerStorage::DoomUncommittedResource(int64_t resource_id) {
...@@ -1110,12 +1115,6 @@ void ServiceWorkerStorage::DidDeleteRegistration( ...@@ -1110,12 +1115,6 @@ void ServiceWorkerStorage::DidDeleteRegistration(
newly_purgeable_resources); newly_purgeable_resources);
} }
void ServiceWorkerStorage::DidWriteUncommittedResourceIds(
ServiceWorkerDatabase::Status status) {
if (status != ServiceWorkerDatabase::STATUS_OK)
ScheduleDeleteAndStartOver();
}
void ServiceWorkerStorage::DidPurgeUncommittedResourceIds( void ServiceWorkerStorage::DidPurgeUncommittedResourceIds(
const std::set<int64_t>& resource_ids, const std::set<int64_t>& resource_ids,
ServiceWorkerDatabase::Status status) { ServiceWorkerDatabase::Status status) {
......
...@@ -194,7 +194,8 @@ class CONTENT_EXPORT ServiceWorkerStorage { ...@@ -194,7 +194,8 @@ class CONTENT_EXPORT ServiceWorkerStorage {
// Adds |resource_id| to the set of resources that are in the disk cache // Adds |resource_id| to the set of resources that are in the disk cache
// but not yet stored with a registration. // but not yet stored with a registration.
void StoreUncommittedResourceId(int64_t resource_id); void StoreUncommittedResourceId(int64_t resource_id,
DatabaseStatusCallback callback);
// Removes resource ids from uncommitted list, adds them to the purgeable list // Removes resource ids from uncommitted list, adds them to the purgeable list
// and purges them. // and purges them.
...@@ -391,7 +392,6 @@ class CONTENT_EXPORT ServiceWorkerStorage { ...@@ -391,7 +392,6 @@ class CONTENT_EXPORT ServiceWorkerStorage {
const ServiceWorkerDatabase::RegistrationData& deleted_version, const ServiceWorkerDatabase::RegistrationData& deleted_version,
const std::vector<int64_t>& newly_purgeable_resources, const std::vector<int64_t>& newly_purgeable_resources,
ServiceWorkerDatabase::Status status); ServiceWorkerDatabase::Status status);
void DidWriteUncommittedResourceIds(ServiceWorkerDatabase::Status status);
void DidPurgeUncommittedResourceIds(const std::set<int64_t>& resource_ids, void DidPurgeUncommittedResourceIds(const std::set<int64_t>& resource_ids,
ServiceWorkerDatabase::Status status); ServiceWorkerDatabase::Status status);
......
...@@ -1265,8 +1265,8 @@ class ServiceWorkerResourceStorageTest : public ServiceWorkerStorageTest { ...@@ -1265,8 +1265,8 @@ class ServiceWorkerResourceStorageTest : public ServiceWorkerStorageTest {
registration_->waiting_version()->SetStatus(ServiceWorkerVersion::NEW); registration_->waiting_version()->SetStatus(ServiceWorkerVersion::NEW);
// Add the resources ids to the uncommitted list. // Add the resources ids to the uncommitted list.
storage()->StoreUncommittedResourceId(resource_id1_); registry()->StoreUncommittedResourceId(resource_id1_);
storage()->StoreUncommittedResourceId(resource_id2_); registry()->StoreUncommittedResourceId(resource_id2_);
std::set<int64_t> verify_ids = GetUncommittedResourceIdsFromDB(); std::set<int64_t> verify_ids = GetUncommittedResourceIdsFromDB();
EXPECT_EQ(2u, verify_ids.size()); EXPECT_EQ(2u, verify_ids.size());
...@@ -1471,7 +1471,7 @@ TEST_F(ServiceWorkerResourceStorageDiskTest, CleanupOnRestart) { ...@@ -1471,7 +1471,7 @@ TEST_F(ServiceWorkerResourceStorageDiskTest, CleanupOnRestart) {
// Also add an uncommitted resource. // Also add an uncommitted resource.
int64_t kStaleUncommittedResourceId = storage()->NewResourceId(); int64_t kStaleUncommittedResourceId = storage()->NewResourceId();
storage()->StoreUncommittedResourceId(kStaleUncommittedResourceId); registry()->StoreUncommittedResourceId(kStaleUncommittedResourceId);
verify_ids = GetUncommittedResourceIdsFromDB(); verify_ids = GetUncommittedResourceIdsFromDB();
EXPECT_EQ(1u, verify_ids.size()); EXPECT_EQ(1u, verify_ids.size());
WriteBasicResponse(storage(), kStaleUncommittedResourceId); WriteBasicResponse(storage(), kStaleUncommittedResourceId);
...@@ -1488,7 +1488,7 @@ TEST_F(ServiceWorkerResourceStorageDiskTest, CleanupOnRestart) { ...@@ -1488,7 +1488,7 @@ TEST_F(ServiceWorkerResourceStorageDiskTest, CleanupOnRestart) {
storage()->SetPurgingCompleteCallbackForTest(loop.QuitClosure()); storage()->SetPurgingCompleteCallbackForTest(loop.QuitClosure());
int64_t kNewResourceId = storage()->NewResourceId(); int64_t kNewResourceId = storage()->NewResourceId();
WriteBasicResponse(storage(), kNewResourceId); WriteBasicResponse(storage(), kNewResourceId);
storage()->StoreUncommittedResourceId(kNewResourceId); registry()->StoreUncommittedResourceId(kNewResourceId);
loop.Run(); loop.Run();
// The stale resources should be purged, but the new resource should persist. // The stale resources should be purged, but the new resource should persist.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment