OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/service_worker/service_worker_database.h" | 5 #include "content/browser/service_worker/service_worker_database.h" |
6 | 6 |
7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
| 8 #include "base/stl_util.h" |
| 9 #include "content/browser/service_worker/service_worker_database.pb.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
9 | 11 |
10 namespace content { | 12 namespace content { |
11 | 13 |
12 namespace { | 14 namespace { |
13 | 15 |
14 struct AvailableIds { | 16 struct AvailableIds { |
15 int64 reg_id; | 17 int64 reg_id; |
16 int64 res_id; | 18 int64 res_id; |
17 int64 ver_id; | 19 int64 ver_id; |
18 | 20 |
19 AvailableIds() : reg_id(-1), res_id(-1), ver_id(-1) {} | 21 AvailableIds() : reg_id(-1), res_id(-1), ver_id(-1) {} |
20 ~AvailableIds() {} | 22 ~AvailableIds() {} |
21 }; | 23 }; |
22 | 24 |
23 ServiceWorkerDatabase* CreateDatabase(const base::FilePath& path) { | 25 ServiceWorkerDatabase* CreateDatabase(const base::FilePath& path) { |
24 return new ServiceWorkerDatabase(path); | 26 return new ServiceWorkerDatabase(path); |
25 } | 27 } |
26 | 28 |
27 ServiceWorkerDatabase* CreateDatabaseInMemory() { | 29 ServiceWorkerDatabase* CreateDatabaseInMemory() { |
28 return new ServiceWorkerDatabase(base::FilePath()); | 30 return new ServiceWorkerDatabase(base::FilePath()); |
29 } | 31 } |
30 | 32 |
| 33 void VerifyRegistrationData( |
| 34 const ServiceWorkerRegistrationData& expected, |
| 35 const ServiceWorkerRegistrationData& actual) { |
| 36 EXPECT_EQ(expected.registration_id(), actual.registration_id()); |
| 37 EXPECT_EQ(expected.scope_url(), actual.scope_url()); |
| 38 EXPECT_EQ(expected.script_url(), actual.script_url()); |
| 39 EXPECT_EQ(expected.version_id(), actual.version_id()); |
| 40 } |
| 41 |
31 } // namespace | 42 } // namespace |
32 | 43 |
33 TEST(ServiceWorkerDatabaseTest, OpenDatabase) { | 44 TEST(ServiceWorkerDatabaseTest, OpenDatabase) { |
34 base::ScopedTempDir database_dir; | 45 base::ScopedTempDir database_dir; |
35 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 46 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
36 scoped_ptr<ServiceWorkerDatabase> database( | 47 scoped_ptr<ServiceWorkerDatabase> database( |
37 CreateDatabase(database_dir.path())); | 48 CreateDatabase(database_dir.path())); |
38 | 49 |
39 // Should be false because the database does not exist at the path. | 50 // Should be false because the database does not exist at the path. |
40 EXPECT_FALSE(database->LazyOpen(false)); | 51 EXPECT_FALSE(database->LazyOpen(false)); |
(...skipping 25 matching lines...) Expand all Loading... |
66 EXPECT_FALSE(database->GetNextAvailableIds( | 77 EXPECT_FALSE(database->GetNextAvailableIds( |
67 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 78 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
68 | 79 |
69 ASSERT_TRUE(database->LazyOpen(true)); | 80 ASSERT_TRUE(database->LazyOpen(true)); |
70 EXPECT_TRUE(database->GetNextAvailableIds( | 81 EXPECT_TRUE(database->GetNextAvailableIds( |
71 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 82 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
72 EXPECT_EQ(0, ids.reg_id); | 83 EXPECT_EQ(0, ids.reg_id); |
73 EXPECT_EQ(0, ids.ver_id); | 84 EXPECT_EQ(0, ids.ver_id); |
74 EXPECT_EQ(0, ids.res_id); | 85 EXPECT_EQ(0, ids.res_id); |
75 | 86 |
76 // TODO(nhiroki): Test GetNextAvailableIds() after update these ids. | 87 // Writing a registration bumps the next available ids. |
| 88 std::vector<ServiceWorkerResourceRecord> resources; |
| 89 ServiceWorkerRegistrationData data; |
| 90 data.set_registration_id(100); |
| 91 data.set_scope_url("http://example.com/foo"); |
| 92 data.set_script_url("http://example.com/script.js"); |
| 93 data.set_version_id(200); |
| 94 ASSERT_TRUE(database->WriteRegistration(data, resources)); |
| 95 |
| 96 EXPECT_TRUE(database->GetNextAvailableIds( |
| 97 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
| 98 EXPECT_EQ(101, ids.reg_id); |
| 99 EXPECT_EQ(201, ids.ver_id); |
| 100 EXPECT_EQ(0, ids.res_id); |
| 101 } |
| 102 |
| 103 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
| 104 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 105 |
| 106 std::set<GURL> origins; |
| 107 EXPECT_FALSE(database->GetOriginsWithRegistrations(&origins)); |
| 108 |
| 109 std::vector<ServiceWorkerResourceRecord> resources; |
| 110 |
| 111 ServiceWorkerRegistrationData data1; |
| 112 data1.set_registration_id(123); |
| 113 data1.set_scope_url("http://example.com/foo"); |
| 114 data1.set_script_url("http://example.com/script1.js"); |
| 115 data1.set_version_id(456); |
| 116 ASSERT_TRUE(database->WriteRegistration(data1, resources)); |
| 117 |
| 118 ServiceWorkerRegistrationData data2; |
| 119 data2.set_registration_id(234); |
| 120 data2.set_scope_url("https://www.example.com/bar"); |
| 121 data2.set_script_url("https://www.example.com/script2.js"); |
| 122 data2.set_version_id(567); |
| 123 ASSERT_TRUE(database->WriteRegistration(data2, resources)); |
| 124 |
| 125 ServiceWorkerRegistrationData data3; |
| 126 data3.set_registration_id(345); |
| 127 data3.set_scope_url("https://example.org/hoge"); |
| 128 data3.set_script_url("https://example.org/script3.js"); |
| 129 data3.set_version_id(678); |
| 130 ASSERT_TRUE(database->WriteRegistration(data3, resources)); |
| 131 |
| 132 // Same origin with |data3|. |
| 133 ServiceWorkerRegistrationData data4; |
| 134 data4.set_registration_id(456); |
| 135 data4.set_scope_url("https://example.org/fuga"); |
| 136 data4.set_script_url("https://example.org/script4.js"); |
| 137 data4.set_version_id(789); |
| 138 ASSERT_TRUE(database->WriteRegistration(data4, resources)); |
| 139 |
| 140 EXPECT_TRUE(database->GetOriginsWithRegistrations(&origins)); |
| 141 EXPECT_EQ(3U, origins.size()); |
| 142 EXPECT_TRUE(ContainsKey(origins, GURL("http://example.com"))); |
| 143 EXPECT_TRUE(ContainsKey(origins, GURL("https://www.example.com"))); |
| 144 EXPECT_TRUE(ContainsKey(origins, GURL("https://example.org"))); |
| 145 } |
| 146 |
| 147 TEST(ServiceWorkerDatabaseTest, GetRegistrationsForOrigin) { |
| 148 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 149 |
| 150 GURL origin("https://example.org"); |
| 151 std::vector<ServiceWorkerRegistrationData> registrations; |
| 152 EXPECT_FALSE(database->GetRegistrationsForOrigin(origin, ®istrations)); |
| 153 |
| 154 std::vector<ServiceWorkerResourceRecord> resources; |
| 155 |
| 156 ServiceWorkerRegistrationData data1; |
| 157 data1.set_registration_id(100); |
| 158 data1.set_scope_url("http://example.com/foo"); |
| 159 data1.set_script_url("http://example.com/script1.js"); |
| 160 data1.set_version_id(1000); |
| 161 ASSERT_TRUE(database->WriteRegistration(data1, resources)); |
| 162 |
| 163 ServiceWorkerRegistrationData data2; |
| 164 data2.set_registration_id(200); |
| 165 data2.set_scope_url("https://www.example.com/bar"); |
| 166 data2.set_script_url("https://www.example.com/script2.js"); |
| 167 data2.set_version_id(2000); |
| 168 ASSERT_TRUE(database->WriteRegistration(data2, resources)); |
| 169 |
| 170 ServiceWorkerRegistrationData data3; |
| 171 data3.set_registration_id(300); |
| 172 data3.set_scope_url("https://example.org/hoge"); |
| 173 data3.set_script_url("https://example.org/script3.js"); |
| 174 data3.set_version_id(3000); |
| 175 ASSERT_TRUE(database->WriteRegistration(data3, resources)); |
| 176 |
| 177 // Same origin with |data3|. |
| 178 ServiceWorkerRegistrationData data4; |
| 179 data4.set_registration_id(400); |
| 180 data4.set_scope_url("https://example.org/fuga"); |
| 181 data4.set_script_url("https://example.org/script4.js"); |
| 182 data4.set_version_id(4000); |
| 183 ASSERT_TRUE(database->WriteRegistration(data4, resources)); |
| 184 |
| 185 EXPECT_TRUE(database->GetRegistrationsForOrigin(origin, ®istrations)); |
| 186 EXPECT_EQ(2U, registrations.size()); |
| 187 VerifyRegistrationData(data3, registrations[0]); |
| 188 VerifyRegistrationData(data4, registrations[1]); |
| 189 } |
| 190 |
| 191 TEST(ServiceWorkerDatabaseTest, Registration) { |
| 192 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 193 |
| 194 ServiceWorkerRegistrationData data; |
| 195 data.set_registration_id(100); |
| 196 data.set_scope_url("http://example.com/foo"); |
| 197 data.set_script_url("http://example.com/script.js"); |
| 198 data.set_version_id(200); |
| 199 |
| 200 // TODO(nhiroki): Test ResourceRecord manipulation. |
| 201 std::vector<ServiceWorkerResourceRecord> resources; |
| 202 |
| 203 database->WriteRegistration(data, resources); |
| 204 |
| 205 ServiceWorkerRegistrationData data_out; |
| 206 std::vector<ServiceWorkerResourceRecord> resources_out; |
| 207 database->ReadRegistration(data.registration_id(), |
| 208 GURL("http://example.com"), |
| 209 &data_out, &resources_out); |
| 210 |
| 211 VerifyRegistrationData(data, data_out); |
77 } | 212 } |
78 | 213 |
79 } // namespace content | 214 } // namespace content |
OLD | NEW |