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 <string> | 7 #include <string> |
8 | 8 |
9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
10 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
491 database->WriteRegistration( | 491 database->WriteRegistration( |
492 data, resources, &deleted_version, &newly_purgeable_resources)); | 492 data, resources, &deleted_version, &newly_purgeable_resources)); |
493 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version.version_id); | 493 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version.version_id); |
494 EXPECT_TRUE(newly_purgeable_resources.empty()); | 494 EXPECT_TRUE(newly_purgeable_resources.empty()); |
495 | 495 |
496 // Make sure that the registration and resource records are stored. | 496 // Make sure that the registration and resource records are stored. |
497 RegistrationData data_out; | 497 RegistrationData data_out; |
498 std::vector<Resource> resources_out; | 498 std::vector<Resource> resources_out; |
499 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 499 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
500 database->ReadRegistration( | 500 database->ReadRegistration( |
501 data.registration_id, origin, &data_out, &resources_out)); | 501 data.registration_id, origin, &data_out, &resources_out)); |
502 VerifyRegistrationData(data, data_out); | 502 VerifyRegistrationData(data, data_out); |
503 VerifyResourceRecords(resources, resources_out); | 503 VerifyResourceRecords(resources, resources_out); |
504 | 504 |
505 // Make sure that the resource is removed from the uncommitted list. | 505 // Make sure that the resource is removed from the uncommitted list. |
506 uncommitted_ids_out.clear(); | 506 uncommitted_ids_out.clear(); |
507 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 507 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
508 database->GetUncommittedResourceIds(&uncommitted_ids_out)); | 508 database->GetUncommittedResourceIds(&uncommitted_ids_out)); |
509 EXPECT_TRUE(uncommitted_ids_out.empty()); | 509 EXPECT_TRUE(uncommitted_ids_out.empty()); |
510 | 510 |
511 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 511 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); | 734 EXPECT_TRUE(ContainsKey(purgeable_ids_out, resources1[1].resource_id)); |
735 | 735 |
736 // Make sure that registration2 is still alive. | 736 // Make sure that registration2 is still alive. |
737 resources_out.clear(); | 737 resources_out.clear(); |
738 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( | 738 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->ReadRegistration( |
739 data2.registration_id, origin, &data_out, &resources_out)); | 739 data2.registration_id, origin, &data_out, &resources_out)); |
740 VerifyRegistrationData(data2, data_out); | 740 VerifyRegistrationData(data2, data_out); |
741 VerifyResourceRecords(resources2, resources_out); | 741 VerifyResourceRecords(resources2, resources_out); |
742 } | 742 } |
743 | 743 |
| 744 TEST(ServiceWorkerDatabaseTest, Registration_UninitializedDatabase) { |
| 745 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 746 const GURL origin("http://example.com"); |
| 747 |
| 748 // Should be failed because the database does not exist. |
| 749 RegistrationData data_out; |
| 750 std::vector<Resource> resources_out; |
| 751 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 752 database->ReadRegistration( |
| 753 100, origin, &data_out, &resources_out)); |
| 754 EXPECT_EQ(kInvalidServiceWorkerRegistrationId, data_out.registration_id); |
| 755 EXPECT_TRUE(resources_out.empty()); |
| 756 |
| 757 // Deleting non-existent registration should succeed. |
| 758 RegistrationData deleted_version; |
| 759 std::vector<int64> newly_purgeable_resources; |
| 760 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 761 database->DeleteRegistration( |
| 762 100, origin, &deleted_version, &newly_purgeable_resources)); |
| 763 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version.version_id); |
| 764 EXPECT_TRUE(newly_purgeable_resources.empty()); |
| 765 |
| 766 // Actually create a new database, but not initialized yet. |
| 767 database->LazyOpen(true); |
| 768 |
| 769 // Should be failed because the database is not initialized. |
| 770 ASSERT_EQ(ServiceWorkerDatabase::UNINITIALIZED, database->state_); |
| 771 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 772 database->ReadRegistration( |
| 773 100, origin, &data_out, &resources_out)); |
| 774 EXPECT_EQ(kInvalidServiceWorkerRegistrationId, data_out.registration_id); |
| 775 EXPECT_TRUE(resources_out.empty()); |
| 776 |
| 777 // Deleting non-existent registration should succeed. |
| 778 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 779 database->DeleteRegistration( |
| 780 100, origin, &deleted_version, &newly_purgeable_resources)); |
| 781 EXPECT_EQ(kInvalidServiceWorkerVersionId, deleted_version.version_id); |
| 782 EXPECT_TRUE(newly_purgeable_resources.empty()); |
| 783 } |
| 784 |
744 TEST(ServiceWorkerDatabaseTest, UserData_Basic) { | 785 TEST(ServiceWorkerDatabaseTest, UserData_Basic) { |
745 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 786 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
746 const GURL kOrigin("http://example.com"); | 787 const GURL kOrigin("http://example.com"); |
747 | 788 |
748 // Should be failed because the database does not exist. | |
749 std::string user_data_out; | |
750 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | |
751 database->WriteUserData(100, kOrigin, "key1", "data")); | |
752 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | |
753 database->ReadUserData(100, "key1", &user_data_out)); | |
754 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | |
755 database->DeleteUserData(100, "key1")); | |
756 | |
757 // Add a registration. | 789 // Add a registration. |
758 RegistrationData data; | 790 RegistrationData data; |
759 data.registration_id = 100; | 791 data.registration_id = 100; |
760 data.scope = URL(kOrigin, "/foo"); | 792 data.scope = URL(kOrigin, "/foo"); |
761 data.script = URL(kOrigin, "/script.js"); | 793 data.script = URL(kOrigin, "/script.js"); |
762 data.version_id = 200; | 794 data.version_id = 200; |
763 | 795 |
764 std::vector<Resource> resources; | 796 std::vector<Resource> resources; |
765 ServiceWorkerDatabase::RegistrationData deleted_version; | 797 ServiceWorkerDatabase::RegistrationData deleted_version; |
766 std::vector<int64> newly_purgeable_resources; | 798 std::vector<int64> newly_purgeable_resources; |
767 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 799 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
768 database->WriteRegistration( | 800 database->WriteRegistration( |
769 data, resources, &deleted_version, &newly_purgeable_resources)); | 801 data, resources, &deleted_version, &newly_purgeable_resources)); |
770 | 802 |
771 // Write user data associated with the stored registration. | 803 // Write user data associated with the stored registration. |
| 804 std::string user_data_out; |
772 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 805 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
773 database->WriteUserData( | 806 database->WriteUserData( |
774 data.registration_id, kOrigin, "key1", "data")); | 807 data.registration_id, kOrigin, "key1", "data")); |
775 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 808 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
776 database->ReadUserData( | 809 database->ReadUserData( |
777 data.registration_id, "key1", &user_data_out)); | 810 data.registration_id, "key1", &user_data_out)); |
778 EXPECT_EQ("data", user_data_out); | 811 EXPECT_EQ("data", user_data_out); |
779 | 812 |
780 // Writing user data not associated with the stored registration should be | 813 // Writing user data not associated with the stored registration should be |
781 // failed. | 814 // failed. |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
971 data1.registration_id, "key1", &user_data_out)); | 1004 data1.registration_id, "key1", &user_data_out)); |
972 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1005 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
973 database->ReadUserData( | 1006 database->ReadUserData( |
974 data1.registration_id, "key2", &user_data_out)); | 1007 data1.registration_id, "key2", &user_data_out)); |
975 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1008 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
976 database->ReadUserData( | 1009 database->ReadUserData( |
977 data2.registration_id, "key3", &user_data_out)); | 1010 data2.registration_id, "key3", &user_data_out)); |
978 EXPECT_EQ("data3", user_data_out); | 1011 EXPECT_EQ("data3", user_data_out); |
979 } | 1012 } |
980 | 1013 |
| 1014 TEST(ServiceWorkerDatabaseTest, UserData_UninitializedDatabase) { |
| 1015 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
| 1016 const GURL kOrigin("http://example.com"); |
| 1017 |
| 1018 // Should be failed because the database does not exist. |
| 1019 std::string user_data_out; |
| 1020 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1021 database->ReadUserData(100, "key", &user_data_out)); |
| 1022 |
| 1023 // Should be failed because the associated registration does not exist. |
| 1024 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1025 database->WriteUserData(100, kOrigin, "key", "data")); |
| 1026 |
| 1027 // Deleting non-existent entry should succeed. |
| 1028 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1029 database->DeleteUserData(100, "key")); |
| 1030 |
| 1031 // Actually create a new database, but not initialized yet. |
| 1032 database->LazyOpen(true); |
| 1033 |
| 1034 // Should be failed because the database is not initialized. |
| 1035 ASSERT_EQ(ServiceWorkerDatabase::UNINITIALIZED, database->state_); |
| 1036 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1037 database->ReadUserData(100, "key", &user_data_out)); |
| 1038 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1039 database->WriteUserData(100, kOrigin, "key", "data")); |
| 1040 |
| 1041 // Deleting non-existent entry should succeed. |
| 1042 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1043 database->DeleteUserData(100, "key")); |
| 1044 } |
| 1045 |
981 TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) { | 1046 TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) { |
982 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 1047 scoped_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
983 GURL origin("http://example.com"); | 1048 GURL origin("http://example.com"); |
984 | 1049 |
985 ServiceWorkerDatabase::RegistrationData deleted_version; | 1050 ServiceWorkerDatabase::RegistrationData deleted_version; |
986 std::vector<int64> newly_purgeable_resources; | 1051 std::vector<int64> newly_purgeable_resources; |
987 | 1052 |
988 // Should be false because a registration does not exist. | 1053 // Should be false because a registration does not exist. |
989 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1054 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
990 database->UpdateVersionToActive(0, origin)); | 1055 database->UpdateVersionToActive(0, origin)); |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1336 CreateDatabase(database_dir.path())); | 1401 CreateDatabase(database_dir.path())); |
1337 | 1402 |
1338 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); | 1403 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); |
1339 ASSERT_TRUE(base::DirectoryExists(database_dir.path())); | 1404 ASSERT_TRUE(base::DirectoryExists(database_dir.path())); |
1340 | 1405 |
1341 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->DestroyDatabase()); | 1406 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->DestroyDatabase()); |
1342 ASSERT_FALSE(base::DirectoryExists(database_dir.path())); | 1407 ASSERT_FALSE(base::DirectoryExists(database_dir.path())); |
1343 } | 1408 } |
1344 | 1409 |
1345 } // namespace content | 1410 } // namespace content |
OLD | NEW |