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

Add ServiceWorkerStorageControl::UpdateToActiveState()

This is a wrapper of ServiceWorkerStorage::UpdateToActiveState().

Bug: 1055677
Change-Id: I1444227429fd4c4647198702db79b0d414514571
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2147983Reviewed-by: default avatarMakoto Shimazu <shimazu@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Commit-Queue: Kenichi Ishibashi <bashi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#759540}
parent e9c66c2f
...@@ -112,6 +112,10 @@ interface ServiceWorkerStorageControl { ...@@ -112,6 +112,10 @@ interface ServiceWorkerStorageControl {
(ServiceWorkerDatabaseStatus status, (ServiceWorkerDatabaseStatus status,
ServiceWorkerStorageOriginState origin_state); ServiceWorkerStorageOriginState origin_state);
// Updates the state of the registration's stored version to active.
UpdateToActiveState(int64 registration_id, url.mojom.Url origin) =>
(ServiceWorkerDatabaseStatus status);
// Returns a new registration id which is guaranteed to be unique in the // Returns a new registration id which is guaranteed to be unique in the
// storage. Returns blink::mojom::kInvalidServiceWorkerRegistrationId if the // storage. Returns blink::mojom::kInvalidServiceWorkerRegistrationId if the
// storage is disabled. // storage is disabled.
......
...@@ -169,6 +169,13 @@ void ServiceWorkerStorageControlImpl::DeleteRegistration( ...@@ -169,6 +169,13 @@ void ServiceWorkerStorageControlImpl::DeleteRegistration(
base::BindOnce(&DidDeleteRegistration, std::move(callback))); base::BindOnce(&DidDeleteRegistration, std::move(callback)));
} }
void ServiceWorkerStorageControlImpl::UpdateToActiveState(
int64_t registration_id,
const GURL& origin,
UpdateToActiveStateCallback callback) {
storage_->UpdateToActiveState(registration_id, origin, std::move(callback));
}
void ServiceWorkerStorageControlImpl::GetNewRegistrationId( void ServiceWorkerStorageControlImpl::GetNewRegistrationId(
GetNewRegistrationIdCallback callback) { GetNewRegistrationIdCallback callback) {
storage_->GetNewRegistrationId(std::move(callback)); storage_->GetNewRegistrationId(std::move(callback));
......
...@@ -55,6 +55,9 @@ class CONTENT_EXPORT ServiceWorkerStorageControlImpl ...@@ -55,6 +55,9 @@ class CONTENT_EXPORT ServiceWorkerStorageControlImpl
void DeleteRegistration(int64_t registration_id, void DeleteRegistration(int64_t registration_id,
const GURL& origin, const GURL& origin,
DeleteRegistrationCallback callback) override; DeleteRegistrationCallback callback) override;
void UpdateToActiveState(int64_t registration_id,
const GURL& origin,
UpdateToActiveStateCallback callback) override;
void GetNewRegistrationId(GetNewRegistrationIdCallback callback) override; void GetNewRegistrationId(GetNewRegistrationIdCallback callback) override;
void GetNewVersionId(GetNewVersionIdCallback callback) override; void GetNewVersionId(GetNewVersionIdCallback callback) override;
void GetNewResourceId(GetNewResourceIdCallback callback) override; void GetNewResourceId(GetNewResourceIdCallback callback) override;
......
...@@ -262,6 +262,20 @@ class ServiceWorkerStorageControlImplTest : public testing::Test { ...@@ -262,6 +262,20 @@ class ServiceWorkerStorageControlImplTest : public testing::Test {
return result; return result;
} }
DatabaseStatus UpdateToActiveState(int64_t registration_id,
const GURL& origin) {
DatabaseStatus out_status;
base::RunLoop loop;
storage()->UpdateToActiveState(
registration_id, origin,
base::BindLambdaForTesting([&](DatabaseStatus status) {
out_status = status;
loop.Quit();
}));
loop.Run();
return out_status;
}
int64_t GetNewRegistrationId() { int64_t GetNewRegistrationId() {
int64_t return_value; int64_t return_value;
base::RunLoop loop; base::RunLoop loop;
...@@ -442,6 +456,7 @@ class ServiceWorkerStorageControlImplTest : public testing::Test { ...@@ -442,6 +456,7 @@ class ServiceWorkerStorageControlImplTest : public testing::Test {
// Create a registration with a single resource and stores the registration. // Create a registration with a single resource and stores the registration.
DatabaseStatus CreateAndStoreRegistration(int64_t registration_id, DatabaseStatus CreateAndStoreRegistration(int64_t registration_id,
int64_t version_id,
const GURL& scope, const GURL& scope,
const GURL& script_url, const GURL& script_url,
int64_t script_size) { int64_t script_size) {
...@@ -451,6 +466,7 @@ class ServiceWorkerStorageControlImplTest : public testing::Test { ...@@ -451,6 +466,7 @@ class ServiceWorkerStorageControlImplTest : public testing::Test {
auto data = storage::mojom::ServiceWorkerRegistrationData::New(); auto data = storage::mojom::ServiceWorkerRegistrationData::New();
data->registration_id = registration_id; data->registration_id = registration_id;
data->version_id = version_id;
data->scope = scope; data->scope = scope;
data->script = script_url; data->script = script_url;
data->navigation_preload_state = data->navigation_preload_state =
...@@ -599,6 +615,41 @@ TEST_F(ServiceWorkerStorageControlImplTest, StoreAndDeleteRegistration) { ...@@ -599,6 +615,41 @@ TEST_F(ServiceWorkerStorageControlImplTest, StoreAndDeleteRegistration) {
} }
} }
TEST_F(ServiceWorkerStorageControlImplTest, UpdateToActiveState) {
const GURL kScope("https://www.example.com/");
const GURL kScriptUrl("https://www.example.com/sw.js");
const int64_t kScriptSize = 10;
LazyInitializeForTest();
// Preparation: Store a registration.
const int64_t registration_id = GetNewRegistrationId();
const int64_t version_id = GetNewVersionId();
DatabaseStatus status = CreateAndStoreRegistration(
registration_id, version_id, kScope, kScriptUrl, kScriptSize);
ASSERT_EQ(status, DatabaseStatus::kOk);
// The stored registration shouldn't be activated yet.
{
FindRegistrationResult result =
FindRegistrationForId(registration_id, kScope.GetOrigin());
ASSERT_EQ(result->status, DatabaseStatus::kOk);
EXPECT_FALSE(result->registration->is_active);
}
// Set the registration is active in storage.
status = UpdateToActiveState(registration_id, kScope.GetOrigin());
ASSERT_EQ(status, DatabaseStatus::kOk);
// Now the stored registration should be active.
{
FindRegistrationResult result =
FindRegistrationForId(registration_id, kScope.GetOrigin());
ASSERT_EQ(result->status, DatabaseStatus::kOk);
EXPECT_TRUE(result->registration->is_active);
}
}
// Tests that getting registrations works. // Tests that getting registrations works.
TEST_F(ServiceWorkerStorageControlImplTest, GetRegistrationsForOrigin) { TEST_F(ServiceWorkerStorageControlImplTest, GetRegistrationsForOrigin) {
const GURL kScope1("https://www.example.com/foo/"); const GURL kScope1("https://www.example.com/foo/");
...@@ -612,12 +663,14 @@ TEST_F(ServiceWorkerStorageControlImplTest, GetRegistrationsForOrigin) { ...@@ -612,12 +663,14 @@ TEST_F(ServiceWorkerStorageControlImplTest, GetRegistrationsForOrigin) {
// Store two registrations which have the same origin. // Store two registrations which have the same origin.
DatabaseStatus status; DatabaseStatus status;
const int64_t registration_id1 = GetNewRegistrationId(); const int64_t registration_id1 = GetNewRegistrationId();
status = CreateAndStoreRegistration(registration_id1, kScope1, kScriptUrl1, const int64_t version_id1 = GetNewVersionId();
kScriptSize); status = CreateAndStoreRegistration(registration_id1, version_id1, kScope1,
kScriptUrl1, kScriptSize);
ASSERT_EQ(status, DatabaseStatus::kOk); ASSERT_EQ(status, DatabaseStatus::kOk);
const int64_t registration_id2 = GetNewRegistrationId(); const int64_t registration_id2 = GetNewRegistrationId();
status = CreateAndStoreRegistration(registration_id2, kScope2, kScriptUrl2, const int64_t version_id2 = GetNewVersionId();
kScriptSize); status = CreateAndStoreRegistration(registration_id2, version_id2, kScope2,
kScriptUrl2, kScriptSize);
ASSERT_EQ(status, DatabaseStatus::kOk); ASSERT_EQ(status, DatabaseStatus::kOk);
// Get registrations for the origin. // Get registrations for the origin.
...@@ -742,9 +795,10 @@ TEST_F(ServiceWorkerStorageControlImplTest, StoreAndGetUserData) { ...@@ -742,9 +795,10 @@ TEST_F(ServiceWorkerStorageControlImplTest, StoreAndGetUserData) {
LazyInitializeForTest(); LazyInitializeForTest();
const int64_t registration_id = GetNewRegistrationId(); const int64_t registration_id = GetNewRegistrationId();
const int64_t version_id = GetNewVersionId();
DatabaseStatus status; DatabaseStatus status;
status = CreateAndStoreRegistration(registration_id, kScope, kScriptUrl, status = CreateAndStoreRegistration(registration_id, version_id, kScope,
kScriptSize); kScriptUrl, kScriptSize);
ASSERT_EQ(status, DatabaseStatus::kOk); ASSERT_EQ(status, DatabaseStatus::kOk);
// Store user data with two entries. // Store user data with two entries.
...@@ -800,13 +854,14 @@ TEST_F(ServiceWorkerStorageControlImplTest, StoreAndGetUserData) { ...@@ -800,13 +854,14 @@ TEST_F(ServiceWorkerStorageControlImplTest, StoreAndGetUserData) {
// Delete the registration and store a new registration for the same // Delete the registration and store a new registration for the same
// scope. // scope.
const int64_t new_registration_id = GetNewRegistrationId(); const int64_t new_registration_id = GetNewRegistrationId();
const int64_t new_version_id = GetNewVersionId();
{ {
DeleteRegistrationResult result = DeleteRegistrationResult result =
DeleteRegistration(registration_id, kScope.GetOrigin()); DeleteRegistration(registration_id, kScope.GetOrigin());
ASSERT_EQ(result.status, DatabaseStatus::kOk); ASSERT_EQ(result.status, DatabaseStatus::kOk);
status = CreateAndStoreRegistration(new_registration_id, kScope, kScriptUrl, status = CreateAndStoreRegistration(new_registration_id, new_version_id,
kScriptSize); kScope, kScriptUrl, kScriptSize);
ASSERT_EQ(status, DatabaseStatus::kOk); ASSERT_EQ(status, DatabaseStatus::kOk);
} }
...@@ -828,9 +883,10 @@ TEST_F(ServiceWorkerStorageControlImplTest, StoreAndGetUserDataByKeyPrefix) { ...@@ -828,9 +883,10 @@ TEST_F(ServiceWorkerStorageControlImplTest, StoreAndGetUserDataByKeyPrefix) {
LazyInitializeForTest(); LazyInitializeForTest();
const int64_t registration_id = GetNewRegistrationId(); const int64_t registration_id = GetNewRegistrationId();
const int64_t version_id = GetNewVersionId();
DatabaseStatus status; DatabaseStatus status;
status = CreateAndStoreRegistration(registration_id, kScope, kScriptUrl, status = CreateAndStoreRegistration(registration_id, version_id, kScope,
kScriptSize); kScriptUrl, kScriptSize);
ASSERT_EQ(status, DatabaseStatus::kOk); ASSERT_EQ(status, DatabaseStatus::kOk);
// Store some user data with prefixes. // Store some user data with prefixes.
......
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