| Index: content/browser/service_worker/service_worker_database_unittest.cc
|
| diff --git a/content/browser/service_worker/service_worker_database_unittest.cc b/content/browser/service_worker/service_worker_database_unittest.cc
|
| index f5fca2d100bf8e8dc3d8309e11ceaa4b60bb6216..da7e1d1e8cd9e7165102b09fddfdf5918e971a33 100644
|
| --- a/content/browser/service_worker/service_worker_database_unittest.cc
|
| +++ b/content/browser/service_worker/service_worker_database_unittest.cc
|
| @@ -5,6 +5,8 @@
|
| #include "content/browser/service_worker/service_worker_database.h"
|
|
|
| #include "base/files/scoped_temp_dir.h"
|
| +#include "base/stl_util.h"
|
| +#include "content/browser/service_worker/service_worker_database.pb.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace content {
|
| @@ -28,6 +30,27 @@ ServiceWorkerDatabase* CreateDatabaseInMemory() {
|
| return new ServiceWorkerDatabase(base::FilePath());
|
| }
|
|
|
| +void VerifyRegistrationData(
|
| + const ServiceWorkerRegistrationData& expected,
|
| + const ServiceWorkerRegistrationData& actual) {
|
| + EXPECT_EQ(expected.registration_id(), actual.registration_id());
|
| + EXPECT_EQ(expected.scope_url(), actual.scope_url());
|
| + EXPECT_EQ(expected.script_url(), actual.script_url());
|
| + EXPECT_EQ(expected.version_id(), actual.version_id());
|
| +}
|
| +
|
| +void VerifyResourceRecords(
|
| + const std::vector<ServiceWorkerResourceRecord>& expected,
|
| + const std::vector<ServiceWorkerResourceRecord>& actual) {
|
| + EXPECT_EQ(expected.size(), actual.size());
|
| + if (expected.size() != actual.size())
|
| + return;
|
| + for (size_t i = 0; i < expected.size(); ++i) {
|
| + EXPECT_EQ(expected[i].resource_id(), actual[i].resource_id());
|
| + EXPECT_EQ(expected[i].url(), actual[i].url());
|
| + }
|
| +}
|
| +
|
| } // namespace
|
|
|
| TEST(ServiceWorkerDatabaseTest, OpenDatabase) {
|
| @@ -73,7 +96,226 @@ TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) {
|
| EXPECT_EQ(0, ids.ver_id);
|
| EXPECT_EQ(0, ids.res_id);
|
|
|
| - // TODO(nhiroki): Test GetNextAvailableIds() after update these ids.
|
| + // Writing a registration bumps the next available ids.
|
| + std::vector<ServiceWorkerResourceRecord> resources;
|
| + ServiceWorkerRegistrationData data;
|
| + data.set_registration_id(100);
|
| + data.set_scope_url("http://example.com/foo");
|
| + data.set_script_url("http://example.com/script.js");
|
| + data.set_version_id(200);
|
| + ASSERT_TRUE(database->WriteRegistration(data, resources));
|
| +
|
| + EXPECT_TRUE(database->GetNextAvailableIds(
|
| + &ids.reg_id, &ids.ver_id, &ids.res_id));
|
| + EXPECT_EQ(101, ids.reg_id);
|
| + EXPECT_EQ(201, ids.ver_id);
|
| + EXPECT_EQ(0, ids.res_id);
|
| +}
|
| +
|
| +TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) {
|
| + scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
|
| +
|
| + std::set<GURL> origins;
|
| + EXPECT_FALSE(database->GetOriginsWithRegistrations(&origins));
|
| +
|
| + std::vector<ServiceWorkerResourceRecord> resources;
|
| +
|
| + ServiceWorkerRegistrationData data1;
|
| + data1.set_registration_id(123);
|
| + data1.set_scope_url("http://example.com/foo");
|
| + data1.set_script_url("http://example.com/script1.js");
|
| + data1.set_version_id(456);
|
| + ASSERT_TRUE(database->WriteRegistration(data1, resources));
|
| +
|
| + ServiceWorkerRegistrationData data2;
|
| + data2.set_registration_id(234);
|
| + data2.set_scope_url("https://www.example.com/bar");
|
| + data2.set_script_url("https://www.example.com/script2.js");
|
| + data2.set_version_id(567);
|
| + ASSERT_TRUE(database->WriteRegistration(data2, resources));
|
| +
|
| + ServiceWorkerRegistrationData data3;
|
| + data3.set_registration_id(345);
|
| + data3.set_scope_url("https://example.org/hoge");
|
| + data3.set_script_url("https://example.org/script3.js");
|
| + data3.set_version_id(678);
|
| + ASSERT_TRUE(database->WriteRegistration(data3, resources));
|
| +
|
| + // Same origin with |data3|.
|
| + ServiceWorkerRegistrationData data4;
|
| + data4.set_registration_id(456);
|
| + data4.set_scope_url("https://example.org/fuga");
|
| + data4.set_script_url("https://example.org/script4.js");
|
| + data4.set_version_id(789);
|
| + ASSERT_TRUE(database->WriteRegistration(data4, resources));
|
| +
|
| + EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins));
|
| + EXPECT_EQ(3U, origins.size());
|
| + EXPECT_TRUE(ContainsKey(origins, GURL("http://example.com")));
|
| + EXPECT_TRUE(ContainsKey(origins, GURL("https://www.example.com")));
|
| + EXPECT_TRUE(ContainsKey(origins, GURL("https://example.org")));
|
| +}
|
| +
|
| +TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) {
|
| + scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
|
| +
|
| + GURL origin("https://example.org");
|
| + std::vector<ServiceWorkerRegistrationData> registrations;
|
| + EXPECT_FALSE(database->GetRegistrationsForOrigin(origin, ®istrations));
|
| +
|
| + std::vector<ServiceWorkerResourceRecord> resources;
|
| +
|
| + ServiceWorkerRegistrationData data1;
|
| + data1.set_registration_id(100);
|
| + data1.set_scope_url("http://example.com/foo");
|
| + data1.set_script_url("http://example.com/script1.js");
|
| + data1.set_version_id(1000);
|
| + ASSERT_TRUE(database->WriteRegistration(data1, resources));
|
| +
|
| + ServiceWorkerRegistrationData data2;
|
| + data2.set_registration_id(200);
|
| + data2.set_scope_url("https://www.example.com/bar");
|
| + data2.set_script_url("https://www.example.com/script2.js");
|
| + data2.set_version_id(2000);
|
| + ASSERT_TRUE(database->WriteRegistration(data2, resources));
|
| +
|
| + ServiceWorkerRegistrationData data3;
|
| + data3.set_registration_id(300);
|
| + data3.set_scope_url("https://example.org/hoge");
|
| + data3.set_script_url("https://example.org/script3.js");
|
| + data3.set_version_id(3000);
|
| + ASSERT_TRUE(database->WriteRegistration(data3, resources));
|
| +
|
| + // Same origin with |data3|.
|
| + ServiceWorkerRegistrationData data4;
|
| + data4.set_registration_id(400);
|
| + data4.set_scope_url("https://example.org/fuga");
|
| + data4.set_script_url("https://example.org/script4.js");
|
| + data4.set_version_id(4000);
|
| + ASSERT_TRUE(database->WriteRegistration(data4, resources));
|
| +
|
| + EXPECT_TRUE(database->GetRegistrationsForOrigin(origin, ®istrations));
|
| + EXPECT_EQ(2U, registrations.size());
|
| + VerifyRegistrationData(data3, registrations[0]);
|
| + VerifyRegistrationData(data4, registrations[1]);
|
| +}
|
| +
|
| +TEST(ServiceWorkerDatabaseTest, Registration_Basic) {
|
| + scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
|
| +
|
| + ServiceWorkerRegistrationData data;
|
| + data.set_registration_id(100);
|
| + data.set_scope_url("http://example.com/foo");
|
| + data.set_script_url("http://example.com/script.js");
|
| + data.set_version_id(200);
|
| +
|
| + ServiceWorkerResourceRecord resource1;
|
| + resource1.set_resource_id(1);
|
| + resource1.set_url("http://example.com/resource1");
|
| + ServiceWorkerResourceRecord resource2;
|
| + resource2.set_resource_id(2);
|
| + resource2.set_url("http://example.com/resource2");
|
| +
|
| + std::vector<ServiceWorkerResourceRecord> resources;
|
| + resources.push_back(resource1);
|
| + resources.push_back(resource2);
|
| +
|
| + database->WriteRegistration(data, resources);
|
| +
|
| + ServiceWorkerRegistrationData data_out;
|
| + std::vector<ServiceWorkerResourceRecord> resources_out;
|
| + database->ReadRegistration(data.registration_id(), &data_out, &resources_out);
|
| +
|
| + VerifyRegistrationData(data, data_out);
|
| + VerifyResourceRecords(resources, resources_out);
|
| +}
|
| +
|
| +TEST(ServiceWorkerDatabaseTest, Registration_Multiple) {
|
| + scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
|
| +
|
| + // Registration 1.
|
| + ServiceWorkerRegistrationData data1;
|
| + data1.set_registration_id(123);
|
| + data1.set_scope_url("http://example.com/foo");
|
| + data1.set_script_url("http://example.com/script1.js");
|
| + data1.set_version_id(100);
|
| +
|
| + ServiceWorkerResourceRecord resource1;
|
| + resource1.set_resource_id(1);
|
| + resource1.set_url("http://example.com/resource1");
|
| + ServiceWorkerResourceRecord resource2;
|
| + resource2.set_resource_id(2);
|
| + resource2.set_url("http://example.com/resource2");
|
| +
|
| + std::vector<ServiceWorkerResourceRecord> resources1;
|
| + resources1.push_back(resource1);
|
| + resources1.push_back(resource2);
|
| + database->WriteRegistration(data1, resources1);
|
| +
|
| + // Registration 2.
|
| + ServiceWorkerRegistrationData data2;
|
| + data2.set_registration_id(456);
|
| + data2.set_scope_url("http://example.com/bar");
|
| + data2.set_script_url("http://example.com/script2.js");
|
| + data2.set_version_id(200);
|
| +
|
| + ServiceWorkerResourceRecord resource3;
|
| + resource3.set_resource_id(10);
|
| + resource3.set_url("http://example.com/resource3");
|
| +
|
| + std::vector<ServiceWorkerResourceRecord> resources2;
|
| + resources2.push_back(resource1); // Same resource with the registration 1.
|
| + resources2.push_back(resource3);
|
| + database->WriteRegistration(data2, resources2);
|
| +
|
| + ServiceWorkerRegistrationData data_out;
|
| + std::vector<ServiceWorkerResourceRecord> resources_out;
|
| + database->ReadRegistration(
|
| + data1.registration_id(), &data_out, &resources_out);
|
| +
|
| + VerifyRegistrationData(data1, data_out);
|
| + VerifyResourceRecords(resources1, resources_out);
|
| +}
|
| +
|
| +TEST(ServiceWorkerDatabaseTest, UncommittedResourceIds) {
|
| + scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory());
|
| +
|
| + std::set<int64> ids1;
|
| + ids1.insert(1);
|
| + ids1.insert(2);
|
| + ids1.insert(3);
|
| +
|
| + // Write {1, 2, 3}
|
| + EXPECT_TRUE(database->WriteUncommittedResourceIds(ids1));
|
| +
|
| + std::set<int64> ids_out;
|
| + EXPECT_TRUE(database->GetUncommittedResourceIds(&ids_out));
|
| + EXPECT_EQ(ids1.size(), ids_out.size());
|
| + EXPECT_TRUE(base::STLIncludes(ids1, ids_out));
|
| +
|
| + std::set<int64> ids2;
|
| + ids2.insert(2);
|
| + ids2.insert(4);
|
| +
|
| + // Write {2, 4}
|
| + EXPECT_TRUE(database->WriteUncommittedResourceIds(ids2));
|
| +
|
| + ids_out.clear();
|
| + EXPECT_TRUE(database->GetUncommittedResourceIds(&ids_out));
|
| + EXPECT_EQ(4U, ids_out.size());
|
| + EXPECT_TRUE(ContainsKey(ids_out, 1));
|
| + EXPECT_TRUE(ContainsKey(ids_out, 2));
|
| + EXPECT_TRUE(ContainsKey(ids_out, 3));
|
| + EXPECT_TRUE(ContainsKey(ids_out, 4));
|
| +
|
| + // Remove {2, 4}.
|
| + EXPECT_TRUE(database->ClearUncommittedResourceIds(ids2));
|
| +
|
| + ids_out.clear();
|
| + EXPECT_TRUE(database->GetUncommittedResourceIds(&ids_out));
|
| + EXPECT_EQ(2U, ids_out.size());
|
| + EXPECT_TRUE(ContainsKey(ids_out, 1));
|
| + EXPECT_TRUE(ContainsKey(ids_out, 3));
|
| }
|
|
|
| } // namespace content
|
|
|