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 <map> | 5 #include <map> |
6 #include <set> | 6 #include <set> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/message_loop_proxy.h" | 10 #include "base/message_loop_proxy.h" |
(...skipping 26 matching lines...) Expand all Loading... |
37 num_delete_origins_completions_(0), | 37 num_delete_origins_completions_(0), |
38 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { | 38 weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { |
39 } | 39 } |
40 | 40 |
41 int64 GetOriginUsage( | 41 int64 GetOriginUsage( |
42 quota::QuotaClient* client, | 42 quota::QuotaClient* client, |
43 const GURL& origin, | 43 const GURL& origin, |
44 quota::StorageType type) { | 44 quota::StorageType type) { |
45 usage_ = -1; | 45 usage_ = -1; |
46 AsyncGetOriginUsage(client, origin, type); | 46 AsyncGetOriginUsage(client, origin, type); |
47 MessageLoop::current()->RunAllPending(); | 47 MessageLoop::current()->RunUntilIdle(); |
48 return usage_; | 48 return usage_; |
49 } | 49 } |
50 | 50 |
51 const std::set<GURL>& GetOriginsForType( | 51 const std::set<GURL>& GetOriginsForType( |
52 quota::QuotaClient* client, | 52 quota::QuotaClient* client, |
53 quota::StorageType type) { | 53 quota::StorageType type) { |
54 origins_.clear(); | 54 origins_.clear(); |
55 AsyncGetOriginsForType(client, type); | 55 AsyncGetOriginsForType(client, type); |
56 MessageLoop::current()->RunAllPending(); | 56 MessageLoop::current()->RunUntilIdle(); |
57 return origins_; | 57 return origins_; |
58 } | 58 } |
59 | 59 |
60 const std::set<GURL>& GetOriginsForHost( | 60 const std::set<GURL>& GetOriginsForHost( |
61 quota::QuotaClient* client, | 61 quota::QuotaClient* client, |
62 quota::StorageType type, | 62 quota::StorageType type, |
63 const std::string& host) { | 63 const std::string& host) { |
64 origins_.clear(); | 64 origins_.clear(); |
65 AsyncGetOriginsForHost(client, type, host); | 65 AsyncGetOriginsForHost(client, type, host); |
66 MessageLoop::current()->RunAllPending(); | 66 MessageLoop::current()->RunUntilIdle(); |
67 return origins_; | 67 return origins_; |
68 } | 68 } |
69 | 69 |
70 quota::QuotaStatusCode DeleteOriginData( | 70 quota::QuotaStatusCode DeleteOriginData( |
71 quota::QuotaClient* client, | 71 quota::QuotaClient* client, |
72 quota::StorageType type, | 72 quota::StorageType type, |
73 const GURL& origin) { | 73 const GURL& origin) { |
74 delete_status_ = quota::kQuotaStatusUnknown; | 74 delete_status_ = quota::kQuotaStatusUnknown; |
75 AsyncDeleteOriginData(client, type, origin); | 75 AsyncDeleteOriginData(client, type, origin); |
76 MessageLoop::current()->RunAllPending(); | 76 MessageLoop::current()->RunUntilIdle(); |
77 return delete_status_; | 77 return delete_status_; |
78 } | 78 } |
79 | 79 |
80 void AsyncGetOriginUsage( | 80 void AsyncGetOriginUsage( |
81 quota::QuotaClient* client, | 81 quota::QuotaClient* client, |
82 const GURL& origin, | 82 const GURL& origin, |
83 quota::StorageType type) { | 83 quota::StorageType type) { |
84 client->GetOriginUsage( | 84 client->GetOriginUsage( |
85 origin, type, | 85 origin, type, |
86 base::Bind(&AppCacheQuotaClientTest::OnGetOriginUsageComplete, | 86 base::Bind(&AppCacheQuotaClientTest::OnGetOriginUsageComplete, |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 AsyncGetOriginsForType(client, kTemp); | 311 AsyncGetOriginsForType(client, kTemp); |
312 AsyncGetOriginsForHost(client, kTemp, kOriginA.host()); | 312 AsyncGetOriginsForHost(client, kTemp, kOriginA.host()); |
313 AsyncGetOriginsForHost(client, kTemp, kOriginOther.host()); | 313 AsyncGetOriginsForHost(client, kTemp, kOriginOther.host()); |
314 AsyncDeleteOriginData(client, kTemp, kOriginA); | 314 AsyncDeleteOriginData(client, kTemp, kOriginA); |
315 AsyncDeleteOriginData(client, kPerm, kOriginA); | 315 AsyncDeleteOriginData(client, kPerm, kOriginA); |
316 AsyncDeleteOriginData(client, kTemp, kOriginB); | 316 AsyncDeleteOriginData(client, kTemp, kOriginB); |
317 | 317 |
318 EXPECT_EQ(0, num_get_origin_usage_completions_); | 318 EXPECT_EQ(0, num_get_origin_usage_completions_); |
319 EXPECT_EQ(0, num_get_origins_completions_); | 319 EXPECT_EQ(0, num_get_origins_completions_); |
320 EXPECT_EQ(0, num_delete_origins_completions_); | 320 EXPECT_EQ(0, num_delete_origins_completions_); |
321 MessageLoop::current()->RunAllPending(); | 321 MessageLoop::current()->RunUntilIdle(); |
322 EXPECT_EQ(0, num_get_origin_usage_completions_); | 322 EXPECT_EQ(0, num_get_origin_usage_completions_); |
323 EXPECT_EQ(0, num_get_origins_completions_); | 323 EXPECT_EQ(0, num_get_origins_completions_); |
324 EXPECT_EQ(0, num_delete_origins_completions_); | 324 EXPECT_EQ(0, num_delete_origins_completions_); |
325 | 325 |
326 // Pending requests should get serviced when the appcache is ready. | 326 // Pending requests should get serviced when the appcache is ready. |
327 Call_NotifyAppCacheReady(client); | 327 Call_NotifyAppCacheReady(client); |
328 EXPECT_EQ(2, num_get_origin_usage_completions_); | 328 EXPECT_EQ(2, num_get_origin_usage_completions_); |
329 EXPECT_EQ(4, num_get_origins_completions_); | 329 EXPECT_EQ(4, num_get_origins_completions_); |
330 EXPECT_EQ(0, num_delete_origins_completions_); | 330 EXPECT_EQ(0, num_delete_origins_completions_); |
331 MessageLoop::current()->RunAllPending(); | 331 MessageLoop::current()->RunUntilIdle(); |
332 EXPECT_EQ(3, num_delete_origins_completions_); // deletes are really async | 332 EXPECT_EQ(3, num_delete_origins_completions_); // deletes are really async |
333 | 333 |
334 // They should be serviced in order requested. | 334 // They should be serviced in order requested. |
335 EXPECT_EQ(10, usage_); | 335 EXPECT_EQ(10, usage_); |
336 EXPECT_EQ(1ul, origins_.size()); | 336 EXPECT_EQ(1ul, origins_.size()); |
337 EXPECT_TRUE(origins_.find(kOriginOther) != origins_.end()); | 337 EXPECT_TRUE(origins_.find(kOriginOther) != origins_.end()); |
338 | 338 |
339 Call_NotifyAppCacheDestroyed(client); | 339 Call_NotifyAppCacheDestroyed(client); |
340 Call_OnQuotaManagerDestroyed(client); | 340 Call_OnQuotaManagerDestroyed(client); |
341 } | 341 } |
342 | 342 |
343 TEST_F(AppCacheQuotaClientTest, DestroyServiceWithPending) { | 343 TEST_F(AppCacheQuotaClientTest, DestroyServiceWithPending) { |
344 AppCacheQuotaClient* client = CreateClient(); | 344 AppCacheQuotaClient* client = CreateClient(); |
345 | 345 |
346 SetUsageMapEntry(kOriginA, 1000); | 346 SetUsageMapEntry(kOriginA, 1000); |
347 SetUsageMapEntry(kOriginB, 10); | 347 SetUsageMapEntry(kOriginB, 10); |
348 SetUsageMapEntry(kOriginOther, 500); | 348 SetUsageMapEntry(kOriginOther, 500); |
349 | 349 |
350 // Queue up some reqeusts prior to being ready. | 350 // Queue up some reqeusts prior to being ready. |
351 AsyncGetOriginUsage(client, kOriginA, kPerm); | 351 AsyncGetOriginUsage(client, kOriginA, kPerm); |
352 AsyncGetOriginUsage(client, kOriginB, kTemp); | 352 AsyncGetOriginUsage(client, kOriginB, kTemp); |
353 AsyncGetOriginsForType(client, kPerm); | 353 AsyncGetOriginsForType(client, kPerm); |
354 AsyncGetOriginsForType(client, kTemp); | 354 AsyncGetOriginsForType(client, kTemp); |
355 AsyncGetOriginsForHost(client, kTemp, kOriginA.host()); | 355 AsyncGetOriginsForHost(client, kTemp, kOriginA.host()); |
356 AsyncGetOriginsForHost(client, kTemp, kOriginOther.host()); | 356 AsyncGetOriginsForHost(client, kTemp, kOriginOther.host()); |
357 AsyncDeleteOriginData(client, kTemp, kOriginA); | 357 AsyncDeleteOriginData(client, kTemp, kOriginA); |
358 AsyncDeleteOriginData(client, kPerm, kOriginA); | 358 AsyncDeleteOriginData(client, kPerm, kOriginA); |
359 AsyncDeleteOriginData(client, kTemp, kOriginB); | 359 AsyncDeleteOriginData(client, kTemp, kOriginB); |
360 MessageLoop::current()->RunAllPending(); | 360 MessageLoop::current()->RunUntilIdle(); |
361 EXPECT_EQ(0, num_get_origin_usage_completions_); | 361 EXPECT_EQ(0, num_get_origin_usage_completions_); |
362 EXPECT_EQ(0, num_get_origins_completions_); | 362 EXPECT_EQ(0, num_get_origins_completions_); |
363 EXPECT_EQ(0, num_delete_origins_completions_); | 363 EXPECT_EQ(0, num_delete_origins_completions_); |
364 | 364 |
365 // Kill the service. | 365 // Kill the service. |
366 Call_NotifyAppCacheDestroyed(client); | 366 Call_NotifyAppCacheDestroyed(client); |
367 | 367 |
368 // All should have been aborted and called completion. | 368 // All should have been aborted and called completion. |
369 EXPECT_EQ(2, num_get_origin_usage_completions_); | 369 EXPECT_EQ(2, num_get_origin_usage_completions_); |
370 EXPECT_EQ(4, num_get_origins_completions_); | 370 EXPECT_EQ(4, num_get_origins_completions_); |
(...skipping 15 matching lines...) Expand all Loading... |
386 // Queue up some reqeusts prior to being ready. | 386 // Queue up some reqeusts prior to being ready. |
387 AsyncGetOriginUsage(client, kOriginA, kPerm); | 387 AsyncGetOriginUsage(client, kOriginA, kPerm); |
388 AsyncGetOriginUsage(client, kOriginB, kTemp); | 388 AsyncGetOriginUsage(client, kOriginB, kTemp); |
389 AsyncGetOriginsForType(client, kPerm); | 389 AsyncGetOriginsForType(client, kPerm); |
390 AsyncGetOriginsForType(client, kTemp); | 390 AsyncGetOriginsForType(client, kTemp); |
391 AsyncGetOriginsForHost(client, kTemp, kOriginA.host()); | 391 AsyncGetOriginsForHost(client, kTemp, kOriginA.host()); |
392 AsyncGetOriginsForHost(client, kTemp, kOriginOther.host()); | 392 AsyncGetOriginsForHost(client, kTemp, kOriginOther.host()); |
393 AsyncDeleteOriginData(client, kTemp, kOriginA); | 393 AsyncDeleteOriginData(client, kTemp, kOriginA); |
394 AsyncDeleteOriginData(client, kPerm, kOriginA); | 394 AsyncDeleteOriginData(client, kPerm, kOriginA); |
395 AsyncDeleteOriginData(client, kTemp, kOriginB); | 395 AsyncDeleteOriginData(client, kTemp, kOriginB); |
396 MessageLoop::current()->RunAllPending(); | 396 MessageLoop::current()->RunUntilIdle(); |
397 EXPECT_EQ(0, num_get_origin_usage_completions_); | 397 EXPECT_EQ(0, num_get_origin_usage_completions_); |
398 EXPECT_EQ(0, num_get_origins_completions_); | 398 EXPECT_EQ(0, num_get_origins_completions_); |
399 EXPECT_EQ(0, num_delete_origins_completions_); | 399 EXPECT_EQ(0, num_delete_origins_completions_); |
400 | 400 |
401 // Kill the quota manager. | 401 // Kill the quota manager. |
402 Call_OnQuotaManagerDestroyed(client); | 402 Call_OnQuotaManagerDestroyed(client); |
403 Call_NotifyAppCacheReady(client); | 403 Call_NotifyAppCacheReady(client); |
404 | 404 |
405 // Callbacks should be deleted and not called. | 405 // Callbacks should be deleted and not called. |
406 MessageLoop::current()->RunAllPending(); | 406 MessageLoop::current()->RunUntilIdle(); |
407 EXPECT_EQ(0, num_get_origin_usage_completions_); | 407 EXPECT_EQ(0, num_get_origin_usage_completions_); |
408 EXPECT_EQ(0, num_get_origins_completions_); | 408 EXPECT_EQ(0, num_get_origins_completions_); |
409 EXPECT_EQ(0, num_delete_origins_completions_); | 409 EXPECT_EQ(0, num_delete_origins_completions_); |
410 | 410 |
411 Call_NotifyAppCacheDestroyed(client); | 411 Call_NotifyAppCacheDestroyed(client); |
412 } | 412 } |
413 | 413 |
414 TEST_F(AppCacheQuotaClientTest, DestroyWithDeleteInProgress) { | 414 TEST_F(AppCacheQuotaClientTest, DestroyWithDeleteInProgress) { |
415 AppCacheQuotaClient* client = CreateClient(); | 415 AppCacheQuotaClient* client = CreateClient(); |
416 Call_NotifyAppCacheReady(client); | 416 Call_NotifyAppCacheReady(client); |
417 | 417 |
418 // Start an async delete. | 418 // Start an async delete. |
419 AsyncDeleteOriginData(client, kTemp, kOriginB); | 419 AsyncDeleteOriginData(client, kTemp, kOriginB); |
420 EXPECT_EQ(0, num_delete_origins_completions_); | 420 EXPECT_EQ(0, num_delete_origins_completions_); |
421 | 421 |
422 // Kill the service. | 422 // Kill the service. |
423 Call_NotifyAppCacheDestroyed(client); | 423 Call_NotifyAppCacheDestroyed(client); |
424 | 424 |
425 // Should have been aborted. | 425 // Should have been aborted. |
426 EXPECT_EQ(1, num_delete_origins_completions_); | 426 EXPECT_EQ(1, num_delete_origins_completions_); |
427 EXPECT_EQ(quota::kQuotaErrorAbort, delete_status_); | 427 EXPECT_EQ(quota::kQuotaErrorAbort, delete_status_); |
428 | 428 |
429 // A real completion callback from the service should | 429 // A real completion callback from the service should |
430 // be dropped if it comes in after NotifyAppCacheDestroyed. | 430 // be dropped if it comes in after NotifyAppCacheDestroyed. |
431 MessageLoop::current()->RunAllPending(); | 431 MessageLoop::current()->RunUntilIdle(); |
432 EXPECT_EQ(1, num_delete_origins_completions_); | 432 EXPECT_EQ(1, num_delete_origins_completions_); |
433 EXPECT_EQ(quota::kQuotaErrorAbort, delete_status_); | 433 EXPECT_EQ(quota::kQuotaErrorAbort, delete_status_); |
434 | 434 |
435 Call_OnQuotaManagerDestroyed(client); | 435 Call_OnQuotaManagerDestroyed(client); |
436 } | 436 } |
437 | 437 |
438 } // namespace appcache | 438 } // namespace appcache |
OLD | NEW |