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 976 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
987 data.resources_total_size_bytes = 100; | 987 data.resources_total_size_bytes = 100; |
988 std::vector<Resource> resources; | 988 std::vector<Resource> resources; |
989 resources.push_back(CreateResource(1, data.script, 100)); | 989 resources.push_back(CreateResource(1, data.script, 100)); |
990 ServiceWorkerDatabase::RegistrationData deleted_version; | 990 ServiceWorkerDatabase::RegistrationData deleted_version; |
991 std::vector<int64_t> newly_purgeable_resources; | 991 std::vector<int64_t> newly_purgeable_resources; |
992 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 992 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
993 database->WriteRegistration( | 993 database->WriteRegistration( |
994 data, resources, &deleted_version, &newly_purgeable_resources)); | 994 data, resources, &deleted_version, &newly_purgeable_resources)); |
995 | 995 |
996 // Write user data associated with the stored registration. | 996 // Write user data associated with the stored registration. |
997 std::string user_data_out; | 997 std::vector<std::string> user_data_out; |
998 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 998 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
999 database->WriteUserData( | 999 database->WriteUserData(data.registration_id, kOrigin, |
1000 data.registration_id, kOrigin, "key1", "data")); | 1000 {{"key1", "data"}})); |
1001 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1001 EXPECT_EQ( |
1002 database->ReadUserData( | 1002 ServiceWorkerDatabase::STATUS_OK, |
1003 data.registration_id, "key1", &user_data_out)); | 1003 database->ReadUserData(data.registration_id, {"key1"}, &user_data_out)); |
1004 EXPECT_EQ("data", user_data_out); | 1004 ASSERT_EQ(1u, user_data_out.size()); |
| 1005 EXPECT_EQ("data", user_data_out[0]); |
1005 | 1006 |
1006 // Writing user data not associated with the stored registration should be | 1007 // Writing user data not associated with the stored registration should be |
1007 // failed. | 1008 // failed. |
1008 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1009 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1009 database->WriteUserData(300, kOrigin, "key1", "data")); | 1010 database->WriteUserData(300, kOrigin, {{"key1", "data"}})); |
1010 | 1011 |
1011 // Write empty user data for a different key. | 1012 // Write empty user data for a different key. |
1012 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1013 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1013 database->WriteUserData( | 1014 database->WriteUserData(data.registration_id, kOrigin, |
1014 data.registration_id, kOrigin, "key2", std::string())); | 1015 {{"key2", std::string()}})); |
1015 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1016 EXPECT_EQ( |
1016 database->ReadUserData( | 1017 ServiceWorkerDatabase::STATUS_OK, |
1017 data.registration_id, "key2", &user_data_out)); | 1018 database->ReadUserData(data.registration_id, {"key2"}, &user_data_out)); |
1018 EXPECT_EQ(std::string(), user_data_out); | 1019 ASSERT_EQ(1u, user_data_out.size()); |
1019 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1020 EXPECT_EQ(std::string(), user_data_out[0]); |
1020 database->ReadUserData( | 1021 EXPECT_EQ( |
1021 data.registration_id, "key1", &user_data_out)); | 1022 ServiceWorkerDatabase::STATUS_OK, |
1022 EXPECT_EQ("data", user_data_out); | 1023 database->ReadUserData(data.registration_id, {"key1"}, &user_data_out)); |
| 1024 ASSERT_EQ(1u, user_data_out.size()); |
| 1025 EXPECT_EQ("data", user_data_out[0]); |
1023 | 1026 |
1024 // Overwrite the existing user data. | 1027 // Overwrite the existing user data. |
1025 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1028 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1026 database->WriteUserData( | 1029 database->WriteUserData(data.registration_id, kOrigin, |
1027 data.registration_id, kOrigin, "key1", "overwrite")); | 1030 {{"key1", "overwrite"}})); |
1028 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1031 EXPECT_EQ( |
1029 database->ReadUserData( | 1032 ServiceWorkerDatabase::STATUS_OK, |
1030 data.registration_id, "key1", &user_data_out)); | 1033 database->ReadUserData(data.registration_id, {"key1"}, &user_data_out)); |
1031 EXPECT_EQ("overwrite", user_data_out); | 1034 ASSERT_EQ(1u, user_data_out.size()); |
| 1035 EXPECT_EQ("overwrite", user_data_out[0]); |
1032 | 1036 |
1033 // Delete the user data. | 1037 // Delete the user data. |
1034 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1038 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1035 database->DeleteUserData(data.registration_id, "key1")); | 1039 database->DeleteUserData(data.registration_id, {"key1"})); |
| 1040 EXPECT_EQ( |
| 1041 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1042 database->ReadUserData(data.registration_id, {"key1"}, &user_data_out)); |
| 1043 EXPECT_TRUE(user_data_out.empty()); |
| 1044 EXPECT_EQ( |
| 1045 ServiceWorkerDatabase::STATUS_OK, |
| 1046 database->ReadUserData(data.registration_id, {"key2"}, &user_data_out)); |
| 1047 ASSERT_EQ(1u, user_data_out.size()); |
| 1048 EXPECT_EQ(std::string(), user_data_out[0]); |
| 1049 |
| 1050 // Write/overwrite multiple user data keys. |
| 1051 EXPECT_EQ( |
| 1052 ServiceWorkerDatabase::STATUS_OK, |
| 1053 database->WriteUserData( |
| 1054 data.registration_id, kOrigin, |
| 1055 {{"key2", "overwrite2"}, {"key3", "data3"}, {"key4", "data4"}})); |
| 1056 EXPECT_EQ( |
| 1057 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1058 database->ReadUserData(data.registration_id, {"key1"}, &user_data_out)); |
| 1059 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
| 1060 database->ReadUserData(data.registration_id, |
| 1061 {"key2", "key3", "key4"}, &user_data_out)); |
| 1062 ASSERT_EQ(3u, user_data_out.size()); |
| 1063 EXPECT_EQ("overwrite2", user_data_out[0]); |
| 1064 EXPECT_EQ("data3", user_data_out[1]); |
| 1065 EXPECT_EQ("data4", user_data_out[2]); |
| 1066 // Multiple reads fail if one is not found. |
1036 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1067 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1037 database->ReadUserData( | 1068 database->ReadUserData(data.registration_id, {"key2", "key1"}, |
1038 data.registration_id, "key1", &user_data_out)); | 1069 &user_data_out)); |
1039 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1070 EXPECT_TRUE(user_data_out.empty()); |
1040 database->ReadUserData( | 1071 |
1041 data.registration_id, "key2", &user_data_out)); | 1072 // Delete multiple user data keys, even if some are not found. |
1042 EXPECT_EQ(std::string(), user_data_out); | 1073 EXPECT_EQ( |
| 1074 ServiceWorkerDatabase::STATUS_OK, |
| 1075 database->DeleteUserData(data.registration_id, {"key1", "key2", "key3"})); |
| 1076 EXPECT_EQ( |
| 1077 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1078 database->ReadUserData(data.registration_id, {"key1"}, &user_data_out)); |
| 1079 EXPECT_EQ( |
| 1080 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1081 database->ReadUserData(data.registration_id, {"key2"}, &user_data_out)); |
| 1082 EXPECT_EQ( |
| 1083 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1084 database->ReadUserData(data.registration_id, {"key3"}, &user_data_out)); |
| 1085 EXPECT_EQ( |
| 1086 ServiceWorkerDatabase::STATUS_OK, |
| 1087 database->ReadUserData(data.registration_id, {"key4"}, &user_data_out)); |
| 1088 ASSERT_EQ(1u, user_data_out.size()); |
| 1089 EXPECT_EQ("data4", user_data_out[0]); |
1043 } | 1090 } |
1044 | 1091 |
1045 TEST(ServiceWorkerDatabaseTest, UserData_DataIsolation) { | 1092 TEST(ServiceWorkerDatabaseTest, UserData_DataIsolation) { |
1046 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 1093 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
1047 const GURL kOrigin("http://example.com"); | 1094 const GURL kOrigin("http://example.com"); |
1048 | 1095 |
1049 // Add registration 1. | 1096 // Add registration 1. |
1050 RegistrationData data1; | 1097 RegistrationData data1; |
1051 data1.registration_id = 100; | 1098 data1.registration_id = 100; |
1052 data1.scope = URL(kOrigin, "/foo"); | 1099 data1.scope = URL(kOrigin, "/foo"); |
(...skipping 16 matching lines...) Expand all Loading... |
1069 ServiceWorkerDatabase::RegistrationData deleted_version; | 1116 ServiceWorkerDatabase::RegistrationData deleted_version; |
1070 std::vector<int64_t> newly_purgeable_resources; | 1117 std::vector<int64_t> newly_purgeable_resources; |
1071 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1118 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1072 database->WriteRegistration(data1, resources1, &deleted_version, | 1119 database->WriteRegistration(data1, resources1, &deleted_version, |
1073 &newly_purgeable_resources)); | 1120 &newly_purgeable_resources)); |
1074 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1121 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1075 database->WriteRegistration(data2, resources2, &deleted_version, | 1122 database->WriteRegistration(data2, resources2, &deleted_version, |
1076 &newly_purgeable_resources)); | 1123 &newly_purgeable_resources)); |
1077 | 1124 |
1078 // Write user data associated with the registration1. | 1125 // Write user data associated with the registration1. |
1079 std::string user_data_out; | 1126 std::vector<std::string> user_data_out; |
1080 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1127 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1081 database->WriteUserData( | 1128 database->WriteUserData(data1.registration_id, kOrigin, |
1082 data1.registration_id, kOrigin, "key", "data1")); | 1129 {{"key", "data1"}})); |
1083 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1130 EXPECT_EQ( |
1084 database->ReadUserData( | 1131 ServiceWorkerDatabase::STATUS_OK, |
1085 data1.registration_id, "key", &user_data_out)); | 1132 database->ReadUserData(data1.registration_id, {"key"}, &user_data_out)); |
1086 EXPECT_EQ("data1", user_data_out); | 1133 ASSERT_EQ(1u, user_data_out.size()); |
1087 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1134 EXPECT_EQ("data1", user_data_out[0]); |
1088 database->ReadUserData( | 1135 EXPECT_EQ( |
1089 data2.registration_id, "key", &user_data_out)); | 1136 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1137 database->ReadUserData(data2.registration_id, {"key"}, &user_data_out)); |
1090 | 1138 |
1091 // Write user data associated with the registration2. This shouldn't overwrite | 1139 // Write user data associated with the registration2. This shouldn't overwrite |
1092 // the data associated with registration1. | 1140 // the data associated with registration1. |
1093 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1141 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1094 database->WriteUserData( | 1142 database->WriteUserData(data2.registration_id, kOrigin, |
1095 data2.registration_id, kOrigin, "key", "data2")); | 1143 {{"key", "data2"}})); |
1096 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1144 EXPECT_EQ( |
1097 database->ReadUserData( | 1145 ServiceWorkerDatabase::STATUS_OK, |
1098 data1.registration_id, "key", &user_data_out)); | 1146 database->ReadUserData(data1.registration_id, {"key"}, &user_data_out)); |
1099 EXPECT_EQ("data1", user_data_out); | 1147 ASSERT_EQ(1u, user_data_out.size()); |
1100 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1148 EXPECT_EQ("data1", user_data_out[0]); |
1101 database->ReadUserData( | 1149 EXPECT_EQ( |
1102 data2.registration_id, "key", &user_data_out)); | 1150 ServiceWorkerDatabase::STATUS_OK, |
1103 EXPECT_EQ("data2", user_data_out); | 1151 database->ReadUserData(data2.registration_id, {"key"}, &user_data_out)); |
| 1152 ASSERT_EQ(1u, user_data_out.size()); |
| 1153 EXPECT_EQ("data2", user_data_out[0]); |
1104 | 1154 |
1105 // Get all registrations with user data. | 1155 // Get all registrations with user data. |
1106 std::vector<std::pair<int64_t, std::string>> user_data_list; | 1156 std::vector<std::pair<int64_t, std::string>> user_data_list; |
1107 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1157 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1108 database->ReadUserDataForAllRegistrations("key", &user_data_list)); | 1158 database->ReadUserDataForAllRegistrations("key", &user_data_list)); |
1109 EXPECT_EQ(2u, user_data_list.size()); | 1159 EXPECT_EQ(2u, user_data_list.size()); |
1110 EXPECT_EQ(data1.registration_id, user_data_list[0].first); | 1160 EXPECT_EQ(data1.registration_id, user_data_list[0].first); |
1111 EXPECT_EQ("data1", user_data_list[0].second); | 1161 EXPECT_EQ("data1", user_data_list[0].second); |
1112 EXPECT_EQ(data2.registration_id, user_data_list[1].first); | 1162 EXPECT_EQ(data2.registration_id, user_data_list[1].first); |
1113 EXPECT_EQ("data2", user_data_list[1].second); | 1163 EXPECT_EQ("data2", user_data_list[1].second); |
1114 | 1164 |
1115 // Delete the data associated with the registration2. This shouldn't delete | 1165 // Delete the data associated with the registration2. This shouldn't delete |
1116 // the data associated with registration1. | 1166 // the data associated with registration1. |
1117 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1167 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1118 database->DeleteUserData(data2.registration_id, "key")); | 1168 database->DeleteUserData(data2.registration_id, {"key"})); |
1119 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1169 EXPECT_EQ( |
1120 database->ReadUserData( | 1170 ServiceWorkerDatabase::STATUS_OK, |
1121 data1.registration_id, "key", &user_data_out)); | 1171 database->ReadUserData(data1.registration_id, {"key"}, &user_data_out)); |
1122 EXPECT_EQ("data1", user_data_out); | 1172 ASSERT_EQ(1u, user_data_out.size()); |
1123 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1173 EXPECT_EQ("data1", user_data_out[0]); |
1124 database->ReadUserData( | 1174 EXPECT_EQ( |
1125 data2.registration_id, "key", &user_data_out)); | 1175 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
| 1176 database->ReadUserData(data2.registration_id, {"key"}, &user_data_out)); |
1126 | 1177 |
1127 // And again get all registrations with user data. | 1178 // And again get all registrations with user data. |
1128 user_data_list.clear(); | 1179 user_data_list.clear(); |
1129 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1180 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1130 database->ReadUserDataForAllRegistrations("key", &user_data_list)); | 1181 database->ReadUserDataForAllRegistrations("key", &user_data_list)); |
1131 EXPECT_EQ(1u, user_data_list.size()); | 1182 EXPECT_EQ(1u, user_data_list.size()); |
1132 EXPECT_EQ(data1.registration_id, user_data_list[0].first); | 1183 EXPECT_EQ(data1.registration_id, user_data_list[0].first); |
1133 EXPECT_EQ("data1", user_data_list[0].second); | 1184 EXPECT_EQ("data1", user_data_list[0].second); |
1134 } | 1185 } |
1135 | 1186 |
(...skipping 24 matching lines...) Expand all Loading... |
1160 ServiceWorkerDatabase::RegistrationData deleted_version; | 1211 ServiceWorkerDatabase::RegistrationData deleted_version; |
1161 std::vector<int64_t> newly_purgeable_resources; | 1212 std::vector<int64_t> newly_purgeable_resources; |
1162 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1213 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1163 database->WriteRegistration(data1, resources1, &deleted_version, | 1214 database->WriteRegistration(data1, resources1, &deleted_version, |
1164 &newly_purgeable_resources)); | 1215 &newly_purgeable_resources)); |
1165 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1216 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1166 database->WriteRegistration(data2, resources2, &deleted_version, | 1217 database->WriteRegistration(data2, resources2, &deleted_version, |
1167 &newly_purgeable_resources)); | 1218 &newly_purgeable_resources)); |
1168 | 1219 |
1169 // Write user data associated with the registration1. | 1220 // Write user data associated with the registration1. |
1170 std::string user_data_out; | 1221 std::vector<std::string> user_data_out; |
1171 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1222 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1172 database->WriteUserData( | 1223 database->WriteUserData(data1.registration_id, kOrigin, |
1173 data1.registration_id, kOrigin, "key1", "data1")); | 1224 {{"key1", "data1"}})); |
1174 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1225 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1175 database->WriteUserData( | 1226 database->WriteUserData(data1.registration_id, kOrigin, |
1176 data1.registration_id, kOrigin, "key2", "data2")); | 1227 {{"key2", "data2"}})); |
1177 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1228 ASSERT_EQ( |
1178 database->ReadUserData( | 1229 ServiceWorkerDatabase::STATUS_OK, |
1179 data1.registration_id, "key1", &user_data_out)); | 1230 database->ReadUserData(data1.registration_id, {"key1"}, &user_data_out)); |
1180 ASSERT_EQ("data1", user_data_out); | 1231 ASSERT_EQ(1u, user_data_out.size()); |
1181 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1232 ASSERT_EQ("data1", user_data_out[0]); |
1182 database->ReadUserData( | 1233 ASSERT_EQ( |
1183 data1.registration_id, "key2", &user_data_out)); | 1234 ServiceWorkerDatabase::STATUS_OK, |
1184 ASSERT_EQ("data2", user_data_out); | 1235 database->ReadUserData(data1.registration_id, {"key2"}, &user_data_out)); |
| 1236 ASSERT_EQ(1u, user_data_out.size()); |
| 1237 ASSERT_EQ("data2", user_data_out[0]); |
1185 | 1238 |
1186 // Write user data associated with the registration2. | 1239 // Write user data associated with the registration2. |
1187 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1240 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1188 database->WriteUserData( | 1241 database->WriteUserData(data2.registration_id, kOrigin, |
1189 data2.registration_id, kOrigin, "key3", "data3")); | 1242 {{"key3", "data3"}})); |
1190 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1243 ASSERT_EQ( |
1191 database->ReadUserData( | 1244 ServiceWorkerDatabase::STATUS_OK, |
1192 data2.registration_id, "key3", &user_data_out)); | 1245 database->ReadUserData(data2.registration_id, {"key3"}, &user_data_out)); |
1193 ASSERT_EQ("data3", user_data_out); | 1246 ASSERT_EQ(1u, user_data_out.size()); |
| 1247 ASSERT_EQ("data3", user_data_out[0]); |
1194 | 1248 |
1195 // Delete all data associated with the registration1. This shouldn't delete | 1249 // Delete all data associated with the registration1. This shouldn't delete |
1196 // the data associated with registration2. | 1250 // the data associated with registration2. |
1197 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1251 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1198 database->DeleteRegistration( | 1252 database->DeleteRegistration( |
1199 data1.registration_id, kOrigin, | 1253 data1.registration_id, kOrigin, |
1200 &deleted_version, &newly_purgeable_resources)); | 1254 &deleted_version, &newly_purgeable_resources)); |
1201 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1255 EXPECT_EQ( |
1202 database->ReadUserData( | 1256 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1203 data1.registration_id, "key1", &user_data_out)); | 1257 database->ReadUserData(data1.registration_id, {"key1"}, &user_data_out)); |
1204 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1258 EXPECT_EQ( |
1205 database->ReadUserData( | 1259 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1206 data1.registration_id, "key2", &user_data_out)); | 1260 database->ReadUserData(data1.registration_id, {"key2"}, &user_data_out)); |
1207 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1261 EXPECT_EQ( |
1208 database->ReadUserData( | 1262 ServiceWorkerDatabase::STATUS_OK, |
1209 data2.registration_id, "key3", &user_data_out)); | 1263 database->ReadUserData(data2.registration_id, {"key3"}, &user_data_out)); |
1210 EXPECT_EQ("data3", user_data_out); | 1264 ASSERT_EQ(1u, user_data_out.size()); |
| 1265 EXPECT_EQ("data3", user_data_out[0]); |
1211 } | 1266 } |
1212 | 1267 |
1213 TEST(ServiceWorkerDatabaseTest, UserData_UninitializedDatabase) { | 1268 TEST(ServiceWorkerDatabaseTest, UserData_UninitializedDatabase) { |
1214 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 1269 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
1215 const GURL kOrigin("http://example.com"); | 1270 const GURL kOrigin("http://example.com"); |
1216 | 1271 |
1217 // Should be failed because the database does not exist. | 1272 // Should be failed because the database does not exist. |
1218 std::string user_data_out; | 1273 std::vector<std::string> user_data_out; |
1219 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1274 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1220 database->ReadUserData(100, "key", &user_data_out)); | 1275 database->ReadUserData(100, {"key"}, &user_data_out)); |
1221 | 1276 |
1222 // Should be failed because the associated registration does not exist. | 1277 // Should be failed because the associated registration does not exist. |
1223 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1278 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1224 database->WriteUserData(100, kOrigin, "key", "data")); | 1279 database->WriteUserData(100, kOrigin, {{"key", "data"}})); |
1225 | 1280 |
1226 // Deleting non-existent entry should succeed. | 1281 // Deleting non-existent entry should succeed. |
1227 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1282 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1228 database->DeleteUserData(100, "key")); | 1283 database->DeleteUserData(100, {"key"})); |
1229 | 1284 |
1230 // Actually create a new database, but not initialized yet. | 1285 // Actually create a new database, but not initialized yet. |
1231 database->LazyOpen(true); | 1286 database->LazyOpen(true); |
1232 | 1287 |
1233 // Should be failed because the database is not initialized. | 1288 // Should be failed because the database is not initialized. |
1234 ASSERT_EQ(ServiceWorkerDatabase::UNINITIALIZED, database->state_); | 1289 ASSERT_EQ(ServiceWorkerDatabase::UNINITIALIZED, database->state_); |
1235 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1290 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1236 database->ReadUserData(100, "key", &user_data_out)); | 1291 database->ReadUserData(100, {"key"}, &user_data_out)); |
1237 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1292 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1238 database->WriteUserData(100, kOrigin, "key", "data")); | 1293 database->WriteUserData(100, kOrigin, {{"key", "data"}})); |
1239 | 1294 |
1240 // Deleting non-existent entry should succeed. | 1295 // Deleting non-existent entry should succeed. |
1241 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1296 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1242 database->DeleteUserData(100, "key")); | 1297 database->DeleteUserData(100, {"key"})); |
1243 } | 1298 } |
1244 | 1299 |
1245 TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) { | 1300 TEST(ServiceWorkerDatabaseTest, UpdateVersionToActive) { |
1246 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); | 1301 std::unique_ptr<ServiceWorkerDatabase> database(CreateDatabaseInMemory()); |
1247 GURL origin("http://example.com"); | 1302 GURL origin("http://example.com"); |
1248 | 1303 |
1249 ServiceWorkerDatabase::RegistrationData deleted_version; | 1304 ServiceWorkerDatabase::RegistrationData deleted_version; |
1250 std::vector<int64_t> newly_purgeable_resources; | 1305 std::vector<int64_t> newly_purgeable_resources; |
1251 | 1306 |
1252 // Should be false because a registration does not exist. | 1307 // Should be false because a registration does not exist. |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1437 data1.resources_total_size_bytes = 2013 + 512; | 1492 data1.resources_total_size_bytes = 2013 + 512; |
1438 data1.foreign_fetch_scopes.push_back(URL(origin1, "/foo/ff")); | 1493 data1.foreign_fetch_scopes.push_back(URL(origin1, "/foo/ff")); |
1439 | 1494 |
1440 std::vector<Resource> resources1; | 1495 std::vector<Resource> resources1; |
1441 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"), 2013)); | 1496 resources1.push_back(CreateResource(1, URL(origin1, "/resource1"), 2013)); |
1442 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"), 512)); | 1497 resources1.push_back(CreateResource(2, URL(origin1, "/resource2"), 512)); |
1443 ASSERT_EQ( | 1498 ASSERT_EQ( |
1444 ServiceWorkerDatabase::STATUS_OK, | 1499 ServiceWorkerDatabase::STATUS_OK, |
1445 database->WriteRegistration( | 1500 database->WriteRegistration( |
1446 data1, resources1, &deleted_version, &newly_purgeable_resources)); | 1501 data1, resources1, &deleted_version, &newly_purgeable_resources)); |
1447 ASSERT_EQ( | 1502 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1448 ServiceWorkerDatabase::STATUS_OK, | 1503 database->WriteUserData(data1.registration_id, origin1, |
1449 database->WriteUserData( | 1504 {{"key1", "data1"}})); |
1450 data1.registration_id, origin1, "key1", "data1")); | 1505 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1451 ASSERT_EQ( | 1506 database->WriteUserData(data1.registration_id, origin1, |
1452 ServiceWorkerDatabase::STATUS_OK, | 1507 {{"key2", "data2"}})); |
1453 database->WriteUserData( | |
1454 data1.registration_id, origin1, "key2", "data2")); | |
1455 | 1508 |
1456 RegistrationData data2; | 1509 RegistrationData data2; |
1457 data2.registration_id = 11; | 1510 data2.registration_id = 11; |
1458 data2.scope = URL(origin1, "/bar"); | 1511 data2.scope = URL(origin1, "/bar"); |
1459 data2.script = URL(origin1, "/script2.js"); | 1512 data2.script = URL(origin1, "/script2.js"); |
1460 data2.version_id = 101; | 1513 data2.version_id = 101; |
1461 data2.resources_total_size_bytes = 4 + 5; | 1514 data2.resources_total_size_bytes = 4 + 5; |
1462 | 1515 |
1463 std::vector<Resource> resources2; | 1516 std::vector<Resource> resources2; |
1464 resources2.push_back(CreateResource(3, URL(origin1, "/resource3"), 4)); | 1517 resources2.push_back(CreateResource(3, URL(origin1, "/resource3"), 4)); |
1465 resources2.push_back(CreateResource(4, URL(origin1, "/resource4"), 5)); | 1518 resources2.push_back(CreateResource(4, URL(origin1, "/resource4"), 5)); |
1466 ASSERT_EQ( | 1519 ASSERT_EQ( |
1467 ServiceWorkerDatabase::STATUS_OK, | 1520 ServiceWorkerDatabase::STATUS_OK, |
1468 database->WriteRegistration( | 1521 database->WriteRegistration( |
1469 data2, resources2, &deleted_version, &newly_purgeable_resources)); | 1522 data2, resources2, &deleted_version, &newly_purgeable_resources)); |
1470 ASSERT_EQ( | 1523 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1471 ServiceWorkerDatabase::STATUS_OK, | 1524 database->WriteUserData(data2.registration_id, origin1, |
1472 database->WriteUserData( | 1525 {{"key3", "data3"}})); |
1473 data2.registration_id, origin1, "key3", "data3")); | 1526 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1474 ASSERT_EQ( | 1527 database->WriteUserData(data2.registration_id, origin1, |
1475 ServiceWorkerDatabase::STATUS_OK, | 1528 {{"key4", "data4"}})); |
1476 database->WriteUserData( | |
1477 data2.registration_id, origin1, "key4", "data4")); | |
1478 | 1529 |
1479 // |origin2| has one registration (registration3). | 1530 // |origin2| has one registration (registration3). |
1480 RegistrationData data3; | 1531 RegistrationData data3; |
1481 data3.registration_id = 12; | 1532 data3.registration_id = 12; |
1482 data3.scope = URL(origin2, "/hoge"); | 1533 data3.scope = URL(origin2, "/hoge"); |
1483 data3.script = URL(origin2, "/script3.js"); | 1534 data3.script = URL(origin2, "/script3.js"); |
1484 data3.version_id = 102; | 1535 data3.version_id = 102; |
1485 data3.resources_total_size_bytes = 6 + 7; | 1536 data3.resources_total_size_bytes = 6 + 7; |
1486 data3.foreign_fetch_scopes.push_back(URL(origin2, "/hoge/ff")); | 1537 data3.foreign_fetch_scopes.push_back(URL(origin2, "/hoge/ff")); |
1487 | 1538 |
1488 std::vector<Resource> resources3; | 1539 std::vector<Resource> resources3; |
1489 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"), 6)); | 1540 resources3.push_back(CreateResource(5, URL(origin2, "/resource5"), 6)); |
1490 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"), 7)); | 1541 resources3.push_back(CreateResource(6, URL(origin2, "/resource6"), 7)); |
1491 ASSERT_EQ( | 1542 ASSERT_EQ( |
1492 ServiceWorkerDatabase::STATUS_OK, | 1543 ServiceWorkerDatabase::STATUS_OK, |
1493 database->WriteRegistration( | 1544 database->WriteRegistration( |
1494 data3, resources3, &deleted_version, &newly_purgeable_resources)); | 1545 data3, resources3, &deleted_version, &newly_purgeable_resources)); |
1495 ASSERT_EQ( | 1546 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1496 ServiceWorkerDatabase::STATUS_OK, | 1547 database->WriteUserData(data3.registration_id, origin2, |
1497 database->WriteUserData( | 1548 {{"key5", "data5"}})); |
1498 data3.registration_id, origin2, "key5", "data5")); | 1549 ASSERT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1499 ASSERT_EQ( | 1550 database->WriteUserData(data3.registration_id, origin2, |
1500 ServiceWorkerDatabase::STATUS_OK, | 1551 {{"key6", "data6"}})); |
1501 database->WriteUserData( | |
1502 data3.registration_id, origin2, "key6", "data6")); | |
1503 | 1552 |
1504 std::set<GURL> origins_to_delete; | 1553 std::set<GURL> origins_to_delete; |
1505 origins_to_delete.insert(origin1); | 1554 origins_to_delete.insert(origin1); |
1506 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1555 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1507 database->DeleteAllDataForOrigins(origins_to_delete, | 1556 database->DeleteAllDataForOrigins(origins_to_delete, |
1508 &newly_purgeable_resources)); | 1557 &newly_purgeable_resources)); |
1509 | 1558 |
1510 // |origin1| should be removed from the unique origin list. | 1559 // |origin1| should be removed from the unique origin list. |
1511 std::set<GURL> unique_origins; | 1560 std::set<GURL> unique_origins; |
1512 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1561 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1548 std::set<int64_t> purgeable_ids_out; | 1597 std::set<int64_t> purgeable_ids_out; |
1549 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1598 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1550 database->GetPurgeableResourceIds(&purgeable_ids_out)); | 1599 database->GetPurgeableResourceIds(&purgeable_ids_out)); |
1551 EXPECT_EQ(4u, purgeable_ids_out.size()); | 1600 EXPECT_EQ(4u, purgeable_ids_out.size()); |
1552 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); | 1601 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 1)); |
1553 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); | 1602 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 2)); |
1554 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); | 1603 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 3)); |
1555 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); | 1604 EXPECT_TRUE(ContainsKey(purgeable_ids_out, 4)); |
1556 | 1605 |
1557 // The user data associated with |origin1| should be removed. | 1606 // The user data associated with |origin1| should be removed. |
1558 std::string user_data_out; | 1607 std::vector<std::string> user_data_out; |
1559 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1608 EXPECT_EQ( |
1560 database->ReadUserData( | 1609 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1561 data1.registration_id, "key1", &user_data_out)); | 1610 database->ReadUserData(data1.registration_id, {"key1"}, &user_data_out)); |
1562 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1611 EXPECT_EQ( |
1563 database->ReadUserData( | 1612 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1564 data1.registration_id, "key2", &user_data_out)); | 1613 database->ReadUserData(data1.registration_id, {"key2"}, &user_data_out)); |
1565 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1614 EXPECT_EQ( |
1566 database->ReadUserData( | 1615 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1567 data2.registration_id, "key3", &user_data_out)); | 1616 database->ReadUserData(data2.registration_id, {"key3"}, &user_data_out)); |
1568 EXPECT_EQ(ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, | 1617 EXPECT_EQ( |
1569 database->ReadUserData( | 1618 ServiceWorkerDatabase::STATUS_ERROR_NOT_FOUND, |
1570 data2.registration_id, "key4", &user_data_out)); | 1619 database->ReadUserData(data2.registration_id, {"key4"}, &user_data_out)); |
1571 | 1620 |
1572 // The user data associated with |origin2| should not be removed. | 1621 // The user data associated with |origin2| should not be removed. |
1573 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1622 EXPECT_EQ( |
1574 database->ReadUserData( | 1623 ServiceWorkerDatabase::STATUS_OK, |
1575 data3.registration_id, "key5", &user_data_out)); | 1624 database->ReadUserData(data3.registration_id, {"key5"}, &user_data_out)); |
1576 EXPECT_EQ("data5", user_data_out); | 1625 ASSERT_EQ(1u, user_data_out.size()); |
1577 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1626 EXPECT_EQ("data5", user_data_out[0]); |
1578 database->ReadUserData( | 1627 EXPECT_EQ( |
1579 data3.registration_id, "key6", &user_data_out)); | 1628 ServiceWorkerDatabase::STATUS_OK, |
1580 EXPECT_EQ("data6", user_data_out); | 1629 database->ReadUserData(data3.registration_id, {"key6"}, &user_data_out)); |
| 1630 ASSERT_EQ(1u, user_data_out.size()); |
| 1631 EXPECT_EQ("data6", user_data_out[0]); |
1581 } | 1632 } |
1582 | 1633 |
1583 TEST(ServiceWorkerDatabaseTest, DestroyDatabase) { | 1634 TEST(ServiceWorkerDatabaseTest, DestroyDatabase) { |
1584 base::ScopedTempDir database_dir; | 1635 base::ScopedTempDir database_dir; |
1585 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); | 1636 ASSERT_TRUE(database_dir.CreateUniqueTempDir()); |
1586 std::unique_ptr<ServiceWorkerDatabase> database( | 1637 std::unique_ptr<ServiceWorkerDatabase> database( |
1587 CreateDatabase(database_dir.path())); | 1638 CreateDatabase(database_dir.path())); |
1588 | 1639 |
1589 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); | 1640 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, database->LazyOpen(true)); |
1590 ASSERT_TRUE(base::DirectoryExists(database_dir.path())); | 1641 ASSERT_TRUE(base::DirectoryExists(database_dir.path())); |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1723 &deleted_version, | 1774 &deleted_version, |
1724 &newly_purgeable_resources)); | 1775 &newly_purgeable_resources)); |
1725 | 1776 |
1726 origins.clear(); | 1777 origins.clear(); |
1727 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, | 1778 EXPECT_EQ(ServiceWorkerDatabase::STATUS_OK, |
1728 database->GetOriginsWithForeignFetchRegistrations(&origins)); | 1779 database->GetOriginsWithForeignFetchRegistrations(&origins)); |
1729 EXPECT_EQ(0U, origins.size()); | 1780 EXPECT_EQ(0U, origins.size()); |
1730 } | 1781 } |
1731 | 1782 |
1732 } // namespace content | 1783 } // namespace content |
OLD | NEW |