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

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

Issue 248803003: ServiceWorker: Store registration data in ServiceWorkerDatabase (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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_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, &registrations));
+
+ 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, &registrations));
+ 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

Powered by Google App Engine
This is Rietveld 408576698