OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/pickle.h" | 10 #include "base/pickle.h" |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
60 return; | 60 return; |
61 } | 61 } |
62 DCHECK(buf_len >= data_size_); | 62 DCHECK(buf_len >= data_size_); |
63 memcpy(buf->data(), data_, data_size_); | 63 memcpy(buf->data(), data_, data_size_); |
64 ScheduleUserCallback(data_size_); | 64 ScheduleUserCallback(data_size_); |
65 data_size_ = 0; | 65 data_size_ = 0; |
66 } | 66 } |
67 | 67 |
68 private: | 68 private: |
69 void ScheduleUserCallback(int result) { | 69 void ScheduleUserCallback(int result) { |
70 MessageLoop::current()->PostTask( | 70 base::MessageLoop::current()->PostTask( |
71 FROM_HERE, | 71 FROM_HERE, |
72 base::Bind(&MockResponseReader::InvokeUserCompletionCallback, | 72 base::Bind(&MockResponseReader::InvokeUserCompletionCallback, |
73 weak_factory_.GetWeakPtr(), result)); | 73 weak_factory_.GetWeakPtr(), |
brettw
2013/04/30 21:56:47
"
xhwang
2013/05/06 16:33:12
Done.
xhwang
2013/05/06 16:33:12
Done.
| |
74 result)); | |
74 } | 75 } |
75 | 76 |
76 scoped_ptr<net::HttpResponseInfo> info_; | 77 scoped_ptr<net::HttpResponseInfo> info_; |
77 int info_size_; | 78 int info_size_; |
78 const char* data_; | 79 const char* data_; |
79 int data_size_; | 80 int data_size_; |
80 }; | 81 }; |
81 | 82 |
82 } // namespace | 83 } // namespace |
83 | 84 |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
171 | 172 |
172 const GURL kOrigin; | 173 const GURL kOrigin; |
173 const GURL kManifestUrl; | 174 const GURL kManifestUrl; |
174 | 175 |
175 scoped_ptr<AppCacheService> service_; | 176 scoped_ptr<AppCacheService> service_; |
176 int delete_result_; | 177 int delete_result_; |
177 int delete_completion_count_; | 178 int delete_completion_count_; |
178 net::CompletionCallback deletion_callback_; | 179 net::CompletionCallback deletion_callback_; |
179 | 180 |
180 private: | 181 private: |
181 MessageLoop message_loop_; | 182 base::MessageLoop message_loop_; |
182 }; | 183 }; |
183 | 184 |
184 TEST_F(AppCacheServiceTest, DeleteAppCachesForOrigin) { | 185 TEST_F(AppCacheServiceTest, DeleteAppCachesForOrigin) { |
185 // Without giving mock storage simiulated info, should fail. | 186 // Without giving mock storage simiulated info, should fail. |
186 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); | 187 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); |
187 EXPECT_EQ(0, delete_completion_count_); | 188 EXPECT_EQ(0, delete_completion_count_); |
188 MessageLoop::current()->RunUntilIdle(); | 189 base::MessageLoop::current()->RunUntilIdle(); |
189 EXPECT_EQ(1, delete_completion_count_); | 190 EXPECT_EQ(1, delete_completion_count_); |
190 EXPECT_EQ(net::ERR_FAILED, delete_result_); | 191 EXPECT_EQ(net::ERR_FAILED, delete_result_); |
191 delete_completion_count_ = 0; | 192 delete_completion_count_ = 0; |
192 | 193 |
193 // Should succeed given an empty info collection. | 194 // Should succeed given an empty info collection. |
194 mock_storage()->SimulateGetAllInfo(new AppCacheInfoCollection); | 195 mock_storage()->SimulateGetAllInfo(new AppCacheInfoCollection); |
195 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); | 196 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); |
196 EXPECT_EQ(0, delete_completion_count_); | 197 EXPECT_EQ(0, delete_completion_count_); |
197 MessageLoop::current()->RunUntilIdle(); | 198 base::MessageLoop::current()->RunUntilIdle(); |
198 EXPECT_EQ(1, delete_completion_count_); | 199 EXPECT_EQ(1, delete_completion_count_); |
199 EXPECT_EQ(net::OK, delete_result_); | 200 EXPECT_EQ(net::OK, delete_result_); |
200 delete_completion_count_ = 0; | 201 delete_completion_count_ = 0; |
201 | 202 |
202 scoped_refptr<AppCacheInfoCollection> info(new AppCacheInfoCollection); | 203 scoped_refptr<AppCacheInfoCollection> info(new AppCacheInfoCollection); |
203 | 204 |
204 // Should succeed given a non-empty info collection. | 205 // Should succeed given a non-empty info collection. |
205 AppCacheInfo mock_manifest_1; | 206 AppCacheInfo mock_manifest_1; |
206 AppCacheInfo mock_manifest_2; | 207 AppCacheInfo mock_manifest_2; |
207 AppCacheInfo mock_manifest_3; | 208 AppCacheInfo mock_manifest_3; |
208 mock_manifest_1.manifest_url = kOrigin.Resolve("manifest1"); | 209 mock_manifest_1.manifest_url = kOrigin.Resolve("manifest1"); |
209 mock_manifest_2.manifest_url = kOrigin.Resolve("manifest2"); | 210 mock_manifest_2.manifest_url = kOrigin.Resolve("manifest2"); |
210 mock_manifest_3.manifest_url = kOrigin.Resolve("manifest3"); | 211 mock_manifest_3.manifest_url = kOrigin.Resolve("manifest3"); |
211 AppCacheInfoVector info_vector; | 212 AppCacheInfoVector info_vector; |
212 info_vector.push_back(mock_manifest_1); | 213 info_vector.push_back(mock_manifest_1); |
213 info_vector.push_back(mock_manifest_2); | 214 info_vector.push_back(mock_manifest_2); |
214 info_vector.push_back(mock_manifest_3); | 215 info_vector.push_back(mock_manifest_3); |
215 info->infos_by_origin[kOrigin] = info_vector; | 216 info->infos_by_origin[kOrigin] = info_vector; |
216 mock_storage()->SimulateGetAllInfo(info); | 217 mock_storage()->SimulateGetAllInfo(info); |
217 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); | 218 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); |
218 EXPECT_EQ(0, delete_completion_count_); | 219 EXPECT_EQ(0, delete_completion_count_); |
219 MessageLoop::current()->RunUntilIdle(); | 220 base::MessageLoop::current()->RunUntilIdle(); |
220 EXPECT_EQ(1, delete_completion_count_); | 221 EXPECT_EQ(1, delete_completion_count_); |
221 EXPECT_EQ(net::OK, delete_result_); | 222 EXPECT_EQ(net::OK, delete_result_); |
222 delete_completion_count_ = 0; | 223 delete_completion_count_ = 0; |
223 | 224 |
224 // Should fail if storage fails to delete. | 225 // Should fail if storage fails to delete. |
225 info->infos_by_origin[kOrigin] = info_vector; | 226 info->infos_by_origin[kOrigin] = info_vector; |
226 mock_storage()->SimulateGetAllInfo(info); | 227 mock_storage()->SimulateGetAllInfo(info); |
227 mock_storage()->SimulateMakeGroupObsoleteFailure(); | 228 mock_storage()->SimulateMakeGroupObsoleteFailure(); |
228 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); | 229 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); |
229 EXPECT_EQ(0, delete_completion_count_); | 230 EXPECT_EQ(0, delete_completion_count_); |
230 MessageLoop::current()->RunUntilIdle(); | 231 base::MessageLoop::current()->RunUntilIdle(); |
231 EXPECT_EQ(1, delete_completion_count_); | 232 EXPECT_EQ(1, delete_completion_count_); |
232 EXPECT_EQ(net::ERR_FAILED, delete_result_); | 233 EXPECT_EQ(net::ERR_FAILED, delete_result_); |
233 delete_completion_count_ = 0; | 234 delete_completion_count_ = 0; |
234 | 235 |
235 // Should complete with abort error if the service is deleted | 236 // Should complete with abort error if the service is deleted |
236 // prior to a delete completion. | 237 // prior to a delete completion. |
237 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); | 238 service_->DeleteAppCachesForOrigin(kOrigin, deletion_callback_); |
238 EXPECT_EQ(0, delete_completion_count_); | 239 EXPECT_EQ(0, delete_completion_count_); |
239 service_.reset(); // kill it | 240 service_.reset(); // kill it |
240 EXPECT_EQ(1, delete_completion_count_); | 241 EXPECT_EQ(1, delete_completion_count_); |
241 EXPECT_EQ(net::ERR_ABORTED, delete_result_); | 242 EXPECT_EQ(net::ERR_ABORTED, delete_result_); |
242 delete_completion_count_ = 0; | 243 delete_completion_count_ = 0; |
243 | 244 |
244 // Let any tasks lingering from the sudden deletion run and verify | 245 // Let any tasks lingering from the sudden deletion run and verify |
245 // no other completion calls occur. | 246 // no other completion calls occur. |
246 MessageLoop::current()->RunUntilIdle(); | 247 base::MessageLoop::current()->RunUntilIdle(); |
247 EXPECT_EQ(0, delete_completion_count_); | 248 EXPECT_EQ(0, delete_completion_count_); |
248 } | 249 } |
249 | 250 |
250 TEST_F(AppCacheServiceTest, CheckAppCacheResponse) { | 251 TEST_F(AppCacheServiceTest, CheckAppCacheResponse) { |
251 // Check a non-existing manifest. | 252 // Check a non-existing manifest. |
252 EXPECT_FALSE(IsGroupStored(kManifestUrl)); | 253 EXPECT_FALSE(IsGroupStored(kManifestUrl)); |
253 service_->CheckAppCacheResponse(kManifestUrl, 1, 1); | 254 service_->CheckAppCacheResponse(kManifestUrl, 1, 1); |
254 MessageLoop::current()->RunUntilIdle(); | 255 base::MessageLoop::current()->RunUntilIdle(); |
255 EXPECT_EQ(0, CountPendingHelpers()); | 256 EXPECT_EQ(0, CountPendingHelpers()); |
256 EXPECT_FALSE(IsGroupStored(kManifestUrl)); | 257 EXPECT_FALSE(IsGroupStored(kManifestUrl)); |
257 ResetStorage(); | 258 ResetStorage(); |
258 | 259 |
259 // Check a response that looks good. | 260 // Check a response that looks good. |
260 // Nothing should be deleted. | 261 // Nothing should be deleted. |
261 SetupMockGroup(); | 262 SetupMockGroup(); |
262 EXPECT_TRUE(IsGroupStored(kManifestUrl)); | 263 EXPECT_TRUE(IsGroupStored(kManifestUrl)); |
263 SetupMockReader(true, true, true); | 264 SetupMockReader(true, true, true); |
264 service_->CheckAppCacheResponse(kManifestUrl, kMockCacheId, kMockResponseId); | 265 service_->CheckAppCacheResponse(kManifestUrl, kMockCacheId, kMockResponseId); |
265 MessageLoop::current()->RunUntilIdle(); | 266 base::MessageLoop::current()->RunUntilIdle(); |
266 EXPECT_EQ(0, CountPendingHelpers()); | 267 EXPECT_EQ(0, CountPendingHelpers()); |
267 EXPECT_TRUE(IsGroupStored(kManifestUrl)); | 268 EXPECT_TRUE(IsGroupStored(kManifestUrl)); |
268 ResetStorage(); | 269 ResetStorage(); |
269 | 270 |
270 // Check a response for which there is no cache entry. | 271 // Check a response for which there is no cache entry. |
271 // The group should get deleted. | 272 // The group should get deleted. |
272 SetupMockGroup(); | 273 SetupMockGroup(); |
273 service_->CheckAppCacheResponse(kManifestUrl, kMockCacheId, | 274 service_->CheckAppCacheResponse(kManifestUrl, kMockCacheId, |
274 kMissingResponseId); | 275 kMissingResponseId); |
275 MessageLoop::current()->RunUntilIdle(); | 276 base::MessageLoop::current()->RunUntilIdle(); |
276 EXPECT_EQ(0, CountPendingHelpers()); | 277 EXPECT_EQ(0, CountPendingHelpers()); |
277 EXPECT_FALSE(IsGroupStored(kManifestUrl)); | 278 EXPECT_FALSE(IsGroupStored(kManifestUrl)); |
278 ResetStorage(); | 279 ResetStorage(); |
279 | 280 |
280 // Check a response for which there is no manifest entry in a newer version | 281 // Check a response for which there is no manifest entry in a newer version |
281 // of the cache. Nothing should get deleted in this case. | 282 // of the cache. Nothing should get deleted in this case. |
282 SetupMockGroup(); | 283 SetupMockGroup(); |
283 service_->CheckAppCacheResponse(kManifestUrl, kMissingCacheId, | 284 service_->CheckAppCacheResponse(kManifestUrl, kMissingCacheId, |
284 kMissingResponseId); | 285 kMissingResponseId); |
285 MessageLoop::current()->RunUntilIdle(); | 286 base::MessageLoop::current()->RunUntilIdle(); |
286 EXPECT_EQ(0, CountPendingHelpers()); | 287 EXPECT_EQ(0, CountPendingHelpers()); |
287 EXPECT_TRUE(IsGroupStored(kManifestUrl)); | 288 EXPECT_TRUE(IsGroupStored(kManifestUrl)); |
288 ResetStorage(); | 289 ResetStorage(); |
289 | 290 |
290 // Check a response with bad headers. | 291 // Check a response with bad headers. |
291 SetupMockGroup(); | 292 SetupMockGroup(); |
292 service_->CheckAppCacheResponse(kManifestUrl, kMockCacheId, kMockResponseId); | 293 service_->CheckAppCacheResponse(kManifestUrl, kMockCacheId, kMockResponseId); |
293 SetupMockReader(false, true, true); | 294 SetupMockReader(false, true, true); |
294 MessageLoop::current()->RunUntilIdle(); | 295 base::MessageLoop::current()->RunUntilIdle(); |
295 EXPECT_EQ(0, CountPendingHelpers()); | 296 EXPECT_EQ(0, CountPendingHelpers()); |
296 EXPECT_FALSE(IsGroupStored(kManifestUrl)); | 297 EXPECT_FALSE(IsGroupStored(kManifestUrl)); |
297 ResetStorage(); | 298 ResetStorage(); |
298 | 299 |
299 // Check a response with bad data. | 300 // Check a response with bad data. |
300 SetupMockGroup(); | 301 SetupMockGroup(); |
301 service_->CheckAppCacheResponse(kManifestUrl, kMockCacheId, kMockResponseId); | 302 service_->CheckAppCacheResponse(kManifestUrl, kMockCacheId, kMockResponseId); |
302 SetupMockReader(true, false, true); | 303 SetupMockReader(true, false, true); |
303 MessageLoop::current()->RunUntilIdle(); | 304 base::MessageLoop::current()->RunUntilIdle(); |
304 EXPECT_EQ(0, CountPendingHelpers()); | 305 EXPECT_EQ(0, CountPendingHelpers()); |
305 EXPECT_FALSE(IsGroupStored(kManifestUrl)); | 306 EXPECT_FALSE(IsGroupStored(kManifestUrl)); |
306 ResetStorage(); | 307 ResetStorage(); |
307 | 308 |
308 // Check a response with truncated data. | 309 // Check a response with truncated data. |
309 SetupMockGroup(); | 310 SetupMockGroup(); |
310 service_->CheckAppCacheResponse(kManifestUrl, kMockCacheId, kMockResponseId); | 311 service_->CheckAppCacheResponse(kManifestUrl, kMockCacheId, kMockResponseId); |
311 SetupMockReader(true, true, false); | 312 SetupMockReader(true, true, false); |
312 MessageLoop::current()->RunUntilIdle(); | 313 base::MessageLoop::current()->RunUntilIdle(); |
313 EXPECT_EQ(0, CountPendingHelpers()); | 314 EXPECT_EQ(0, CountPendingHelpers()); |
314 EXPECT_FALSE(IsGroupStored(kManifestUrl)); | 315 EXPECT_FALSE(IsGroupStored(kManifestUrl)); |
315 ResetStorage(); | 316 ResetStorage(); |
316 | 317 |
317 service_.reset(); // Clean up. | 318 service_.reset(); // Clean up. |
318 MessageLoop::current()->RunUntilIdle(); | 319 base::MessageLoop::current()->RunUntilIdle(); |
319 } | 320 } |
320 | 321 |
321 } // namespace appcache | 322 } // namespace appcache |
OLD | NEW |