| Index: content/browser/service_worker/service_worker_storage_unittest.cc
|
| diff --git a/content/browser/service_worker/service_worker_storage_unittest.cc b/content/browser/service_worker/service_worker_storage_unittest.cc
|
| index c1ee5aba87562ff67cb600fdb2ebcac5f50b70a8..e8dc43b9e89bccca44c1528505086c5a270439e1 100644
|
| --- a/content/browser/service_worker/service_worker_storage_unittest.cc
|
| +++ b/content/browser/service_worker/service_worker_storage_unittest.cc
|
| @@ -117,12 +117,11 @@ MakeGetRegistrationsInfosCallback(
|
| return base::Bind(&GetAllInfosCallback, was_called, status, all);
|
| }
|
|
|
| -void GetUserDataCallback(
|
| - bool* was_called,
|
| - std::string* data_out,
|
| - ServiceWorkerStatusCode* status_out,
|
| - const std::string& data,
|
| - ServiceWorkerStatusCode status) {
|
| +void GetUserDataCallback(bool* was_called,
|
| + std::vector<std::string>* data_out,
|
| + ServiceWorkerStatusCode* status_out,
|
| + const std::vector<std::string>& data,
|
| + ServiceWorkerStatusCode status) {
|
| *was_called = true;
|
| *data_out = data;
|
| *status_out = status;
|
| @@ -381,12 +380,12 @@ class ServiceWorkerStorageTest : public testing::Test {
|
| }
|
|
|
| ServiceWorkerStatusCode GetUserData(int64_t registration_id,
|
| - const std::string& key,
|
| - std::string* data) {
|
| + const std::vector<std::string>& keys,
|
| + std::vector<std::string>* data) {
|
| bool was_called = false;
|
| ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE;
|
| storage()->GetUserData(
|
| - registration_id, key,
|
| + registration_id, keys,
|
| base::Bind(&GetUserDataCallback, &was_called, data, &result));
|
| EXPECT_FALSE(was_called); // always async
|
| base::RunLoop().RunUntilIdle();
|
| @@ -394,15 +393,14 @@ class ServiceWorkerStorageTest : public testing::Test {
|
| return result;
|
| }
|
|
|
| - ServiceWorkerStatusCode StoreUserData(int64_t registration_id,
|
| - const GURL& origin,
|
| - const std::string& key,
|
| - const std::string& data) {
|
| + ServiceWorkerStatusCode StoreUserData(
|
| + int64_t registration_id,
|
| + const GURL& origin,
|
| + const std::vector<std::pair<std::string, std::string>>& key_value_pairs) {
|
| bool was_called = false;
|
| ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE;
|
| - storage()->StoreUserData(
|
| - registration_id, origin, key, data,
|
| - MakeStatusCallback(&was_called, &result));
|
| + storage()->StoreUserData(registration_id, origin, key_value_pairs,
|
| + MakeStatusCallback(&was_called, &result));
|
| EXPECT_FALSE(was_called); // always async
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_TRUE(was_called);
|
| @@ -410,11 +408,11 @@ class ServiceWorkerStorageTest : public testing::Test {
|
| }
|
|
|
| ServiceWorkerStatusCode ClearUserData(int64_t registration_id,
|
| - const std::string& key) {
|
| + const std::vector<std::string>& keys) {
|
| bool was_called = false;
|
| ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE;
|
| - storage()->ClearUserData(
|
| - registration_id, key, MakeStatusCallback(&was_called, &result));
|
| + storage()->ClearUserData(registration_id, keys,
|
| + MakeStatusCallback(&was_called, &result));
|
| EXPECT_FALSE(was_called); // always async
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_TRUE(was_called);
|
| @@ -566,14 +564,14 @@ TEST_F(ServiceWorkerStorageTest, DisabledStorage) {
|
| WriteResponseMetadata(storage(), kResourceId, "foo"));
|
|
|
| const std::string kUserDataKey = "key";
|
| - std::string user_data_out;
|
| + std::vector<std::string> user_data_out;
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT,
|
| - GetUserData(kRegistrationId, kUserDataKey, &user_data_out));
|
| - EXPECT_EQ(
|
| - SERVICE_WORKER_ERROR_ABORT,
|
| - StoreUserData(kRegistrationId, kScope.GetOrigin(), kUserDataKey, "foo"));
|
| + GetUserData(kRegistrationId, {kUserDataKey}, &user_data_out));
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT,
|
| - ClearUserData(kRegistrationId, kUserDataKey));
|
| + StoreUserData(kRegistrationId, kScope.GetOrigin(),
|
| + {{kUserDataKey, "foo"}}));
|
| + EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT,
|
| + ClearUserData(kRegistrationId, {kUserDataKey}));
|
| std::vector<std::pair<int64_t, std::string>> data_list_out;
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT,
|
| GetUserDataForAllRegistrations(kUserDataKey, &data_list_out));
|
| @@ -942,13 +940,16 @@ TEST_F(ServiceWorkerStorageTest, StoreUserData) {
|
| StoreRegistration(live_registration, live_version));
|
|
|
| // Store user data associated with the registration.
|
| - std::string data_out;
|
| + std::vector<std::string> data_out;
|
| + EXPECT_EQ(
|
| + SERVICE_WORKER_OK,
|
| + StoreUserData(kRegistrationId, kScope.GetOrigin(), {{"key", "data"}}));
|
| EXPECT_EQ(SERVICE_WORKER_OK,
|
| - StoreUserData(kRegistrationId, kScope.GetOrigin(), "key", "data"));
|
| - EXPECT_EQ(SERVICE_WORKER_OK, GetUserData(kRegistrationId, "key", &data_out));
|
| - EXPECT_EQ("data", data_out);
|
| + GetUserData(kRegistrationId, {"key"}, &data_out));
|
| + ASSERT_EQ(1u, data_out.size());
|
| + EXPECT_EQ("data", data_out[0]);
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
|
| - GetUserData(kRegistrationId, "unknown_key", &data_out));
|
| + GetUserData(kRegistrationId, {"unknown_key"}, &data_out));
|
| std::vector<std::pair<int64_t, std::string>> data_list_out;
|
| EXPECT_EQ(SERVICE_WORKER_OK,
|
| GetUserDataForAllRegistrations("key", &data_list_out));
|
| @@ -959,21 +960,56 @@ TEST_F(ServiceWorkerStorageTest, StoreUserData) {
|
| EXPECT_EQ(SERVICE_WORKER_OK,
|
| GetUserDataForAllRegistrations("unknown_key", &data_list_out));
|
| EXPECT_EQ(0u, data_list_out.size());
|
| - EXPECT_EQ(SERVICE_WORKER_OK, ClearUserData(kRegistrationId, "key"));
|
| + EXPECT_EQ(SERVICE_WORKER_OK, ClearUserData(kRegistrationId, {"key"}));
|
| + EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
|
| + GetUserData(kRegistrationId, {"key"}, &data_out));
|
| +
|
| + // Write/overwrite multiple user data keys.
|
| + EXPECT_EQ(SERVICE_WORKER_OK,
|
| + StoreUserData(
|
| + kRegistrationId, kScope.GetOrigin(),
|
| + {{"key", "overwrite"}, {"key3", "data3"}, {"key4", "data4"}}));
|
| + EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
|
| + GetUserData(kRegistrationId, {"key2"}, &data_out));
|
| + EXPECT_TRUE(data_out.empty());
|
| + EXPECT_EQ(SERVICE_WORKER_OK,
|
| + GetUserData(kRegistrationId, {"key", "key3", "key4"}, &data_out));
|
| + ASSERT_EQ(3u, data_out.size());
|
| + EXPECT_EQ("overwrite", data_out[0]);
|
| + EXPECT_EQ("data3", data_out[1]);
|
| + EXPECT_EQ("data4", data_out[2]);
|
| + // Multiple gets fail if one is not found.
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
|
| - GetUserData(kRegistrationId, "key", &data_out));
|
| + GetUserData(kRegistrationId, {"key", "key2"}, &data_out));
|
| + EXPECT_TRUE(data_out.empty());
|
| +
|
| + // Delete multiple user data keys, even if some are not found.
|
| + EXPECT_EQ(SERVICE_WORKER_OK,
|
| + ClearUserData(kRegistrationId, {"key", "key2", "key3"}));
|
| + EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
|
| + GetUserData(kRegistrationId, {"key"}, &data_out));
|
| + EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
|
| + GetUserData(kRegistrationId, {"key2"}, &data_out));
|
| + EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
|
| + GetUserData(kRegistrationId, {"key3"}, &data_out));
|
| + EXPECT_EQ(SERVICE_WORKER_OK,
|
| + GetUserData(kRegistrationId, {"key4"}, &data_out));
|
| + ASSERT_EQ(1u, data_out.size());
|
| + EXPECT_EQ("data4", data_out[0]);
|
|
|
| // User data should be deleted when the associated registration is deleted.
|
| + ASSERT_EQ(
|
| + SERVICE_WORKER_OK,
|
| + StoreUserData(kRegistrationId, kScope.GetOrigin(), {{"key", "data"}}));
|
| ASSERT_EQ(SERVICE_WORKER_OK,
|
| - StoreUserData(kRegistrationId, kScope.GetOrigin(), "key", "data"));
|
| - ASSERT_EQ(SERVICE_WORKER_OK,
|
| - GetUserData(kRegistrationId, "key", &data_out));
|
| - ASSERT_EQ("data", data_out);
|
| + GetUserData(kRegistrationId, {"key"}, &data_out));
|
| + ASSERT_EQ(1u, data_out.size());
|
| + ASSERT_EQ("data", data_out[0]);
|
|
|
| EXPECT_EQ(SERVICE_WORKER_OK,
|
| DeleteRegistration(kRegistrationId, kScope.GetOrigin()));
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
|
| - GetUserData(kRegistrationId, "key", &data_out));
|
| + GetUserData(kRegistrationId, {"key"}, &data_out));
|
| data_list_out.clear();
|
| EXPECT_EQ(SERVICE_WORKER_OK,
|
| GetUserDataForAllRegistrations("key", &data_list_out));
|
| @@ -982,20 +1018,36 @@ TEST_F(ServiceWorkerStorageTest, StoreUserData) {
|
| // Data access with an invalid registration id should be failed.
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| StoreUserData(kInvalidServiceWorkerRegistrationId,
|
| - kScope.GetOrigin(), "key", "data"));
|
| - EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| - GetUserData(kInvalidServiceWorkerRegistrationId, "key", &data_out));
|
| + kScope.GetOrigin(), {{"key", "data"}}));
|
| + EXPECT_EQ(
|
| + SERVICE_WORKER_ERROR_FAILED,
|
| + GetUserData(kInvalidServiceWorkerRegistrationId, {"key"}, &data_out));
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| - ClearUserData(kInvalidServiceWorkerRegistrationId, "key"));
|
| + ClearUserData(kInvalidServiceWorkerRegistrationId, {"key"}));
|
|
|
| // Data access with an empty key should be failed.
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| - StoreUserData(
|
| - kRegistrationId, kScope.GetOrigin(), std::string(), "data"));
|
| + StoreUserData(kRegistrationId, kScope.GetOrigin(),
|
| + std::vector<std::pair<std::string, std::string>>()));
|
| + EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| + StoreUserData(kRegistrationId, kScope.GetOrigin(),
|
| + {{std::string(), "data"}}));
|
| + EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| + StoreUserData(kRegistrationId, kScope.GetOrigin(),
|
| + {{std::string(), "data"}, {"key", "data"}}));
|
| + EXPECT_EQ(
|
| + SERVICE_WORKER_ERROR_FAILED,
|
| + GetUserData(kRegistrationId, std::vector<std::string>(), &data_out));
|
| + EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| + GetUserData(kRegistrationId, {std::string()}, &data_out));
|
| + EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| + GetUserData(kRegistrationId, {std::string(), "key"}, &data_out));
|
| + EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| + ClearUserData(kRegistrationId, std::vector<std::string>()));
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| - GetUserData(kRegistrationId, std::string(), &data_out));
|
| + ClearUserData(kRegistrationId, {std::string()}));
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| - ClearUserData(kRegistrationId, std::string()));
|
| + ClearUserData(kRegistrationId, {std::string(), "key"}));
|
| data_list_out.clear();
|
| EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED,
|
| GetUserDataForAllRegistrations(std::string(), &data_list_out));
|
|
|