| 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 |