| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <string> | 10 #include <string> |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 EXPECT_EQ(expected[i].size_bytes, actual[i].size_bytes); | 83 EXPECT_EQ(expected[i].size_bytes, actual[i].size_bytes); |
| 84 } | 84 } |
| 85 } | 85 } |
| 86 | 86 |
| 87 } // namespace | 87 } // namespace |
| 88 | 88 |
| 89 TEST(ServiceWorkerDatabaseTest, OpenDatabase) { | 89 TEST(ServiceWorkerDatabaseTest, OpenDatabase) { |
| 90 base::ScopedTempDir database_dir; | 90 base::ScopedTempDir database_dir; |
| 91 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 91 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
| 92 std::unique_ptr<ServiceWorkerDatabase> database( | 92 std::unique_ptr<ServiceWorkerDatabase> database( |
| 93 CreateDatabase(database_dir.path())); | 93 CreateDatabase(database_dir.GetPath())); |
| 94 | 94 |
| 95 // Should be false because the database does not exist at the path. | 95 // Should be false because the database does not exist at the path. |
| 96 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 96 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 97 database->LazyOpen(false)); | 97 database->LazyOpen(false)); |
| 98 | 98 |
| 99 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); | 99 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); |
| 100 | 100 |
| 101 database.reset(CreateDatabase(database_dir.path())); | 101 database.reset(CreateDatabase(database_dir.GetPath())); |
| 102 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(false)); | 102 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(false)); |
| 103 } | 103 } |
| 104 | 104 |
| 105 TEST(ServiceWorkerDatabaseTest, OpenDatabase_InMemory) { | 105 TEST(ServiceWorkerDatabaseTest, OpenDatabase_InMemory) { |
| 106 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 106 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 107 | 107 |
| 108 // Should be false because the database does not exist in memory. | 108 // Should be false because the database does not exist in memory. |
| 109 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 109 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 110 database->LazyOpen(false)); | 110 database->LazyOpen(false)); |
| 111 | 111 |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 | 143 |
| 144 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 144 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 145 database->ReadDatabaseVersion(&db_version)); | 145 database->ReadDatabaseVersion(&db_version)); |
| 146 EXPECT_LT(0, db_version); | 146 EXPECT_LT(0, db_version); |
| 147 } | 147 } |
| 148 | 148 |
| 149 TEST(ServiceWorkerDatabaseTest, DatabaseVersion_ObsoleteSchemaVersion) { | 149 TEST(ServiceWorkerDatabaseTest, DatabaseVersion_ObsoleteSchemaVersion) { |
| 150 base::ScopedTempDir database_dir; | 150 base::ScopedTempDir database_dir; |
| 151 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 151 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
| 152 std::unique_ptr<ServiceWorkerDatabase> database( | 152 std::unique_ptr<ServiceWorkerDatabase> database( |
| 153 CreateDatabase(database_dir.path())); | 153 CreateDatabase(database_dir.GetPath())); |
| 154 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); | 154 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); |
| 155 | 155 |
| 156 // First writing triggers database initialization and bumps the schema | 156 // First writing triggers database initialization and bumps the schema |
| 157 // version. | 157 // version. |
| 158 GURL origin("http://example.com"); | 158 GURL origin("http://example.com"); |
| 159 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; | 159 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; |
| 160 resources.push_back(CreateResource(1, URL(origin, "/resource"), 10)); | 160 resources.push_back(CreateResource(1, URL(origin, "/resource"), 10)); |
| 161 ServiceWorkerDatabase::RegistrationData deleted_version; | 161 ServiceWorkerDatabase::RegistrationData deleted_version; |
| 162 std::vector<int64_t> newly_purgeable_resources; | 162 std::vector<int64_t> newly_purgeable_resources; |
| 163 ServiceWorkerDatabase::RegistrationData data; | 163 ServiceWorkerDatabase::RegistrationData data; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 174 int64_t old_db_version = 1; | 174 int64_t old_db_version = 1; |
| 175 leveldb::WriteBatch batch; | 175 leveldb::WriteBatch batch; |
| 176 batch.Put("INITDATA_DB_VERSION", base::Int64ToString(old_db_version)); | 176 batch.Put("INITDATA_DB_VERSION", base::Int64ToString(old_db_version)); |
| 177 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->WriteBatch(&batch)); | 177 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->WriteBatch(&batch)); |
| 178 db_version = -1; | 178 db_version = -1; |
| 179 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 179 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 180 database->ReadDatabaseVersion(&db_version)); | 180 database->ReadDatabaseVersion(&db_version)); |
| 181 ASSERT_EQ(old_db_version, db_version); | 181 ASSERT_EQ(old_db_version, db_version); |
| 182 | 182 |
| 183 // Opening the database whose schema version is obsolete should fail. | 183 // Opening the database whose schema version is obsolete should fail. |
| 184 database.reset(CreateDatabase(database_dir.path())); | 184 database.reset(CreateDatabase(database_dir.GetPath())); |
| 185 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_FAILED, | 185 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_FAILED, |
| 186 database->LazyOpen(true)); | 186 database->LazyOpen(true)); |
| 187 } | 187 } |
| 188 | 188 |
| 189 TEST(ServiceWorkerDatabaseTest, DatabaseVersion_CorruptedSchemaVersion) { | 189 TEST(ServiceWorkerDatabaseTest, DatabaseVersion_CorruptedSchemaVersion) { |
| 190 base::ScopedTempDir database_dir; | 190 base::ScopedTempDir database_dir; |
| 191 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 191 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
| 192 std::unique_ptr<ServiceWorkerDatabase> database( | 192 std::unique_ptr<ServiceWorkerDatabase> database( |
| 193 CreateDatabase(database_dir.path())); | 193 CreateDatabase(database_dir.GetPath())); |
| 194 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); | 194 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); |
| 195 | 195 |
| 196 // First writing triggers database initialization and bumps the schema | 196 // First writing triggers database initialization and bumps the schema |
| 197 // version. | 197 // version. |
| 198 GURL origin("http://example.com"); | 198 GURL origin("http://example.com"); |
| 199 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; | 199 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; |
| 200 resources.push_back(CreateResource(1, URL(origin, "/resource"), 10)); | 200 resources.push_back(CreateResource(1, URL(origin, "/resource"), 10)); |
| 201 ServiceWorkerDatabase::RegistrationData deleted_version; | 201 ServiceWorkerDatabase::RegistrationData deleted_version; |
| 202 std::vector<int64_t> newly_purgeable_resources; | 202 std::vector<int64_t> newly_purgeable_resources; |
| 203 ServiceWorkerDatabase::RegistrationData data; | 203 ServiceWorkerDatabase::RegistrationData data; |
| 204 data.resources_total_size_bytes = 10; | 204 data.resources_total_size_bytes = 10; |
| 205 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 205 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 206 database->WriteRegistration(data, resources, &deleted_version, | 206 database->WriteRegistration(data, resources, &deleted_version, |
| 207 &newly_purgeable_resources)); | 207 &newly_purgeable_resources)); |
| 208 int64_t db_version = -1; | 208 int64_t db_version = -1; |
| 209 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 209 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 210 database->ReadDatabaseVersion(&db_version)); | 210 database->ReadDatabaseVersion(&db_version)); |
| 211 ASSERT_LT(0, db_version); | 211 ASSERT_LT(0, db_version); |
| 212 | 212 |
| 213 // Emulate a corrupted schema version. | 213 // Emulate a corrupted schema version. |
| 214 int64_t corrupted_db_version = -10; | 214 int64_t corrupted_db_version = -10; |
| 215 leveldb::WriteBatch batch; | 215 leveldb::WriteBatch batch; |
| 216 batch.Put("INITDATA_DB_VERSION", base::Int64ToString(corrupted_db_version)); | 216 batch.Put("INITDATA_DB_VERSION", base::Int64ToString(corrupted_db_version)); |
| 217 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->WriteBatch(&batch)); | 217 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, database->WriteBatch(&batch)); |
| 218 db_version = -1; | 218 db_version = -1; |
| 219 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED, | 219 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED, |
| 220 database->ReadDatabaseVersion(&db_version)); | 220 database->ReadDatabaseVersion(&db_version)); |
| 221 | 221 |
| 222 // Opening the database whose schema version is corrupted should fail. | 222 // Opening the database whose schema version is corrupted should fail. |
| 223 database.reset(CreateDatabase(database_dir.path())); | 223 database.reset(CreateDatabase(database_dir.GetPath())); |
| 224 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED, | 224 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_CORRUPTED, |
| 225 database->LazyOpen(true)); | 225 database->LazyOpen(true)); |
| 226 } | 226 } |
| 227 | 227 |
| 228 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { | 228 TEST(ServiceWorkerDatabaseTest, GetNextAvailableIds) { |
| 229 base::ScopedTempDir database_dir; | 229 base::ScopedTempDir database_dir; |
| 230 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 230 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
| 231 std::unique_ptr<ServiceWorkerDatabase> database( | 231 std::unique_ptr<ServiceWorkerDatabase> database( |
| 232 CreateDatabase(database_dir.path())); | 232 CreateDatabase(database_dir.GetPath())); |
| 233 | 233 |
| 234 GURL origin("http://example.com"); | 234 GURL origin("http://example.com"); |
| 235 | 235 |
| 236 // The database has never been used, so returns initial values. | 236 // The database has never been used, so returns initial values. |
| 237 AvailableIds ids; | 237 AvailableIds ids; |
| 238 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( | 238 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( |
| 239 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 239 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
| 240 EXPECT_EQ(0, ids.reg_id); | 240 EXPECT_EQ(0, ids.reg_id); |
| 241 EXPECT_EQ(0, ids.ver_id); | 241 EXPECT_EQ(0, ids.ver_id); |
| 242 EXPECT_EQ(0, ids.res_id); | 242 EXPECT_EQ(0, ids.res_id); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 database->WriteRegistration(data2, resources2, &deleted_version, | 310 database->WriteRegistration(data2, resources2, &deleted_version, |
| 311 &newly_purgeable_resources)); | 311 &newly_purgeable_resources)); |
| 312 | 312 |
| 313 // Same with resources. | 313 // Same with resources. |
| 314 int64_t kLowResourceId = 15; | 314 int64_t kLowResourceId = 15; |
| 315 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 315 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 316 database->WriteUncommittedResourceIds( | 316 database->WriteUncommittedResourceIds( |
| 317 std::set<int64_t>(&kLowResourceId, &kLowResourceId + 1))); | 317 std::set<int64_t>(&kLowResourceId, &kLowResourceId + 1))); |
| 318 | 318 |
| 319 // Close and reopen the database to verify the stored values. | 319 // Close and reopen the database to verify the stored values. |
| 320 database.reset(CreateDatabase(database_dir.path())); | 320 database.reset(CreateDatabase(database_dir.GetPath())); |
| 321 | 321 |
| 322 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( | 322 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->GetNextAvailableIds( |
| 323 &ids.reg_id, &ids.ver_id, &ids.res_id)); | 323 &ids.reg_id, &ids.ver_id, &ids.res_id)); |
| 324 EXPECT_EQ(101, ids.reg_id); | 324 EXPECT_EQ(101, ids.reg_id); |
| 325 EXPECT_EQ(201, ids.ver_id); | 325 EXPECT_EQ(201, ids.ver_id); |
| 326 EXPECT_EQ(21, ids.res_id); | 326 EXPECT_EQ(21, ids.res_id); |
| 327 } | 327 } |
| 328 | 328 |
| 329 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { | 329 TEST(ServiceWorkerDatabaseTest, GetOriginsWithRegistrations) { |
| 330 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 330 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| (...skipping 1297 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1628 ServiceWorkerDatabase::STATUS_OK, | 1628 ServiceWorkerDatabase::STATUS_OK, |
| 1629 database->ReadUserData(data3.registration_id, {"key6"}, &user_data_out)); | 1629 database->ReadUserData(data3.registration_id, {"key6"}, &user_data_out)); |
| 1630 ASSERT_EQ(1u, user_data_out.size()); | 1630 ASSERT_EQ(1u, user_data_out.size()); |
| 1631 EXPECT_EQ("data6", user_data_out[0]); | 1631 EXPECT_EQ("data6", user_data_out[0]); |
| 1632 } | 1632 } |
| 1633 | 1633 |
| 1634 TEST(ServiceWorkerDatabaseTest, DestroyDatabase) { | 1634 TEST(ServiceWorkerDatabaseTest, DestroyDatabase) { |
| 1635 base::ScopedTempDir database_dir; | 1635 base::ScopedTempDir database_dir; |
| 1636 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 1636 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
| 1637 std::unique_ptr<ServiceWorkerDatabase> database( | 1637 std::unique_ptr<ServiceWorkerDatabase> database( |
| 1638 CreateDatabase(database_dir.path())); | 1638 CreateDatabase(database_dir.GetPath())); |
| 1639 | 1639 |
| 1640 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); | 1640 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); |
| 1641 ASSERT_TRUE(base::DirectoryExists(database_dir.path())); | 1641 ASSERT_TRUE(base::DirectoryExists(database_dir.GetPath())); |
| 1642 | 1642 |
| 1643 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->DestroyDatabase()); | 1643 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->DestroyDatabase()); |
| 1644 ASSERT_FALSE(base::DirectoryExists(database_dir.path())); | 1644 ASSERT_FALSE(base::DirectoryExists(database_dir.GetPath())); |
| 1645 } | 1645 } |
| 1646 | 1646 |
| 1647 TEST(ServiceWorkerDatabaseTest, GetOriginsWithForeignFetchRegistrations) { | 1647 TEST(ServiceWorkerDatabaseTest, GetOriginsWithForeignFetchRegistrations) { |
| 1648 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 1648 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 1649 | 1649 |
| 1650 std::set<GURL> origins; | 1650 std::set<GURL> origins; |
| 1651 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1651 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1652 database->GetOriginsWithForeignFetchRegistrations(&origins)); | 1652 database->GetOriginsWithForeignFetchRegistrations(&origins)); |
| 1653 EXPECT_TRUE(origins.empty()); | 1653 EXPECT_TRUE(origins.empty()); |
| 1654 | 1654 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1774 &deleted_version, | 1774 &deleted_version, |
| 1775 &newly_purgeable_resources)); | 1775 &newly_purgeable_resources)); |
| 1776 | 1776 |
| 1777 origins.clear(); | 1777 origins.clear(); |
| 1778 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1778 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1779 database->GetOriginsWithForeignFetchRegistrations(&origins)); | 1779 database->GetOriginsWithForeignFetchRegistrations(&origins)); |
| 1780 EXPECT_EQ(0U, origins.size()); | 1780 EXPECT_EQ(0U, origins.size()); |
| 1781 } | 1781 } |
| 1782 | 1782 |
| 1783 } // namespace content | 1783 } // namespace content |
| OLD | NEW |