Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(688)

Side by Side Diff: net/cookies/cookie_monster_unittest.cc

Issue 2053133002: Remove MessageLoop::current()->RunUntilIdle() in net. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/cookies/cookie_monster_perftest.cc ('k') | net/disk_cache/backend_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "net/cookies/cookie_monster.h" 5 #include "net/cookies/cookie_monster.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/location.h" 13 #include "base/location.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/memory/ref_counted.h" 15 #include "base/memory/ref_counted.h"
16 #include "base/message_loop/message_loop.h"
17 #include "base/metrics/histogram.h" 16 #include "base/metrics/histogram.h"
18 #include "base/metrics/histogram_samples.h" 17 #include "base/metrics/histogram_samples.h"
18 #include "base/run_loop.h"
19 #include "base/single_thread_task_runner.h" 19 #include "base/single_thread_task_runner.h"
20 #include "base/strings/string_number_conversions.h" 20 #include "base/strings/string_number_conversions.h"
21 #include "base/strings/string_piece.h" 21 #include "base/strings/string_piece.h"
22 #include "base/strings/string_split.h" 22 #include "base/strings/string_split.h"
23 #include "base/strings/string_tokenizer.h" 23 #include "base/strings/string_tokenizer.h"
24 #include "base/strings/stringprintf.h" 24 #include "base/strings/stringprintf.h"
25 #include "base/test/histogram_tester.h" 25 #include "base/test/histogram_tester.h"
26 #include "base/threading/thread.h" 26 #include "base/threading/thread.h"
27 #include "base/threading/thread_task_runner_handle.h" 27 #include "base/threading/thread_task_runner_handle.h"
28 #include "base/time/time.h" 28 #include "base/time/time.h"
(...skipping 2499 matching lines...) Expand 10 before | Expand all | Expand 10 after
2528 TEST_F(CookieMonsterTest, FlushStore) { 2528 TEST_F(CookieMonsterTest, FlushStore) {
2529 scoped_refptr<CallbackCounter> counter(new CallbackCounter()); 2529 scoped_refptr<CallbackCounter> counter(new CallbackCounter());
2530 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore()); 2530 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore());
2531 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2531 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2532 2532
2533 ASSERT_EQ(0, store->flush_count()); 2533 ASSERT_EQ(0, store->flush_count());
2534 ASSERT_EQ(0, counter->callback_count()); 2534 ASSERT_EQ(0, counter->callback_count());
2535 2535
2536 // Before initialization, FlushStore() should just run the callback. 2536 // Before initialization, FlushStore() should just run the callback.
2537 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); 2537 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get()));
2538 base::MessageLoop::current()->RunUntilIdle(); 2538 base::RunLoop().RunUntilIdle();
2539 2539
2540 ASSERT_EQ(0, store->flush_count()); 2540 ASSERT_EQ(0, store->flush_count());
2541 ASSERT_EQ(1, counter->callback_count()); 2541 ASSERT_EQ(1, counter->callback_count());
2542 2542
2543 // NULL callback is safe. 2543 // NULL callback is safe.
2544 cm->FlushStore(base::Closure()); 2544 cm->FlushStore(base::Closure());
2545 base::MessageLoop::current()->RunUntilIdle(); 2545 base::RunLoop().RunUntilIdle();
2546 2546
2547 ASSERT_EQ(0, store->flush_count()); 2547 ASSERT_EQ(0, store->flush_count());
2548 ASSERT_EQ(1, counter->callback_count()); 2548 ASSERT_EQ(1, counter->callback_count());
2549 2549
2550 // After initialization, FlushStore() should delegate to the store. 2550 // After initialization, FlushStore() should delegate to the store.
2551 GetAllCookies(cm.get()); // Force init. 2551 GetAllCookies(cm.get()); // Force init.
2552 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); 2552 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get()));
2553 base::MessageLoop::current()->RunUntilIdle(); 2553 base::RunLoop().RunUntilIdle();
2554 2554
2555 ASSERT_EQ(1, store->flush_count()); 2555 ASSERT_EQ(1, store->flush_count());
2556 ASSERT_EQ(2, counter->callback_count()); 2556 ASSERT_EQ(2, counter->callback_count());
2557 2557
2558 // NULL callback is still safe. 2558 // NULL callback is still safe.
2559 cm->FlushStore(base::Closure()); 2559 cm->FlushStore(base::Closure());
2560 base::MessageLoop::current()->RunUntilIdle(); 2560 base::RunLoop().RunUntilIdle();
2561 2561
2562 ASSERT_EQ(2, store->flush_count()); 2562 ASSERT_EQ(2, store->flush_count());
2563 ASSERT_EQ(2, counter->callback_count()); 2563 ASSERT_EQ(2, counter->callback_count());
2564 2564
2565 // If there's no backing store, FlushStore() is always a safe no-op. 2565 // If there's no backing store, FlushStore() is always a safe no-op.
2566 cm.reset(new CookieMonster(nullptr, nullptr)); 2566 cm.reset(new CookieMonster(nullptr, nullptr));
2567 GetAllCookies(cm.get()); // Force init. 2567 GetAllCookies(cm.get()); // Force init.
2568 cm->FlushStore(base::Closure()); 2568 cm->FlushStore(base::Closure());
2569 base::MessageLoop::current()->RunUntilIdle(); 2569 base::RunLoop().RunUntilIdle();
2570 2570
2571 ASSERT_EQ(2, counter->callback_count()); 2571 ASSERT_EQ(2, counter->callback_count());
2572 2572
2573 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get())); 2573 cm->FlushStore(base::Bind(&CallbackCounter::Callback, counter.get()));
2574 base::MessageLoop::current()->RunUntilIdle(); 2574 base::RunLoop().RunUntilIdle();
2575 2575
2576 ASSERT_EQ(3, counter->callback_count()); 2576 ASSERT_EQ(3, counter->callback_count());
2577 } 2577 }
2578 2578
2579 TEST_F(CookieMonsterTest, SetAllCookies) { 2579 TEST_F(CookieMonsterTest, SetAllCookies) {
2580 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore()); 2580 scoped_refptr<FlushablePersistentStore> store(new FlushablePersistentStore());
2581 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr)); 2581 std::unique_ptr<CookieMonster> cm(new CookieMonster(store.get(), nullptr));
2582 cm->SetPersistSessionCookies(true); 2582 cm->SetPersistSessionCookies(true);
2583 2583
2584 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "U=V; path=/")); 2584 EXPECT_TRUE(SetCookie(cm.get(), http_www_google_.url(), "U=V; path=/"));
(...skipping 777 matching lines...) Expand 10 before | Expand all | Expand 10 after
3362 if (out_removes) 3362 if (out_removes)
3363 out_removes->push_back(removed); 3363 out_removes->push_back(removed);
3364 } 3364 }
3365 3365
3366 TEST_F(CookieMonsterNotificationTest, NoNotifyWithNoCookie) { 3366 TEST_F(CookieMonsterNotificationTest, NoNotifyWithNoCookie) {
3367 std::vector<CanonicalCookie> cookies; 3367 std::vector<CanonicalCookie> cookies;
3368 std::unique_ptr<CookieStore::CookieChangedSubscription> sub( 3368 std::unique_ptr<CookieStore::CookieChangedSubscription> sub(
3369 monster()->AddCallbackForCookie( 3369 monster()->AddCallbackForCookie(
3370 test_url_, "abc", 3370 test_url_, "abc",
3371 base::Bind(&RecordCookieChanges, &cookies, nullptr))); 3371 base::Bind(&RecordCookieChanges, &cookies, nullptr)));
3372 base::MessageLoop::current()->RunUntilIdle(); 3372 base::RunLoop().RunUntilIdle();
3373 EXPECT_EQ(0U, cookies.size()); 3373 EXPECT_EQ(0U, cookies.size());
3374 } 3374 }
3375 3375
3376 TEST_F(CookieMonsterNotificationTest, NoNotifyWithInitialCookie) { 3376 TEST_F(CookieMonsterNotificationTest, NoNotifyWithInitialCookie) {
3377 std::vector<CanonicalCookie> cookies; 3377 std::vector<CanonicalCookie> cookies;
3378 SetCookie(monster(), test_url_, "abc=def"); 3378 SetCookie(monster(), test_url_, "abc=def");
3379 base::MessageLoop::current()->RunUntilIdle(); 3379 base::RunLoop().RunUntilIdle();
3380 std::unique_ptr<CookieStore::CookieChangedSubscription> sub( 3380 std::unique_ptr<CookieStore::CookieChangedSubscription> sub(
3381 monster()->AddCallbackForCookie( 3381 monster()->AddCallbackForCookie(
3382 test_url_, "abc", 3382 test_url_, "abc",
3383 base::Bind(&RecordCookieChanges, &cookies, nullptr))); 3383 base::Bind(&RecordCookieChanges, &cookies, nullptr)));
3384 base::MessageLoop::current()->RunUntilIdle(); 3384 base::RunLoop().RunUntilIdle();
3385 EXPECT_EQ(0U, cookies.size()); 3385 EXPECT_EQ(0U, cookies.size());
3386 } 3386 }
3387 3387
3388 TEST_F(CookieMonsterNotificationTest, NotifyOnSet) { 3388 TEST_F(CookieMonsterNotificationTest, NotifyOnSet) {
3389 std::vector<CanonicalCookie> cookies; 3389 std::vector<CanonicalCookie> cookies;
3390 std::vector<bool> removes; 3390 std::vector<bool> removes;
3391 std::unique_ptr<CookieStore::CookieChangedSubscription> sub( 3391 std::unique_ptr<CookieStore::CookieChangedSubscription> sub(
3392 monster()->AddCallbackForCookie( 3392 monster()->AddCallbackForCookie(
3393 test_url_, "abc", 3393 test_url_, "abc",
3394 base::Bind(&RecordCookieChanges, &cookies, &removes))); 3394 base::Bind(&RecordCookieChanges, &cookies, &removes)));
3395 SetCookie(monster(), test_url_, "abc=def"); 3395 SetCookie(monster(), test_url_, "abc=def");
3396 base::MessageLoop::current()->RunUntilIdle(); 3396 base::RunLoop().RunUntilIdle();
3397 EXPECT_EQ(1U, cookies.size()); 3397 EXPECT_EQ(1U, cookies.size());
3398 EXPECT_EQ(1U, removes.size()); 3398 EXPECT_EQ(1U, removes.size());
3399 3399
3400 EXPECT_EQ("abc", cookies[0].Name()); 3400 EXPECT_EQ("abc", cookies[0].Name());
3401 EXPECT_EQ("def", cookies[0].Value()); 3401 EXPECT_EQ("def", cookies[0].Value());
3402 EXPECT_FALSE(removes[0]); 3402 EXPECT_FALSE(removes[0]);
3403 } 3403 }
3404 3404
3405 TEST_F(CookieMonsterNotificationTest, NotifyOnDelete) { 3405 TEST_F(CookieMonsterNotificationTest, NotifyOnDelete) {
3406 std::vector<CanonicalCookie> cookies; 3406 std::vector<CanonicalCookie> cookies;
3407 std::vector<bool> removes; 3407 std::vector<bool> removes;
3408 std::unique_ptr<CookieStore::CookieChangedSubscription> sub( 3408 std::unique_ptr<CookieStore::CookieChangedSubscription> sub(
3409 monster()->AddCallbackForCookie( 3409 monster()->AddCallbackForCookie(
3410 test_url_, "abc", 3410 test_url_, "abc",
3411 base::Bind(&RecordCookieChanges, &cookies, &removes))); 3411 base::Bind(&RecordCookieChanges, &cookies, &removes)));
3412 SetCookie(monster(), test_url_, "abc=def"); 3412 SetCookie(monster(), test_url_, "abc=def");
3413 base::MessageLoop::current()->RunUntilIdle(); 3413 base::RunLoop().RunUntilIdle();
3414 EXPECT_EQ(1U, cookies.size()); 3414 EXPECT_EQ(1U, cookies.size());
3415 EXPECT_EQ(1U, removes.size()); 3415 EXPECT_EQ(1U, removes.size());
3416 3416
3417 DeleteCookie(monster(), test_url_, "abc"); 3417 DeleteCookie(monster(), test_url_, "abc");
3418 base::MessageLoop::current()->RunUntilIdle(); 3418 base::RunLoop().RunUntilIdle();
3419 EXPECT_EQ(2U, cookies.size()); 3419 EXPECT_EQ(2U, cookies.size());
3420 EXPECT_EQ(2U, removes.size()); 3420 EXPECT_EQ(2U, removes.size());
3421 3421
3422 EXPECT_EQ("abc", cookies[1].Name()); 3422 EXPECT_EQ("abc", cookies[1].Name());
3423 EXPECT_EQ("def", cookies[1].Value()); 3423 EXPECT_EQ("def", cookies[1].Value());
3424 EXPECT_TRUE(removes[1]); 3424 EXPECT_TRUE(removes[1]);
3425 } 3425 }
3426 3426
3427 TEST_F(CookieMonsterNotificationTest, NotifyOnUpdate) { 3427 TEST_F(CookieMonsterNotificationTest, NotifyOnUpdate) {
3428 std::vector<CanonicalCookie> cookies; 3428 std::vector<CanonicalCookie> cookies;
3429 std::vector<bool> removes; 3429 std::vector<bool> removes;
3430 std::unique_ptr<CookieStore::CookieChangedSubscription> sub( 3430 std::unique_ptr<CookieStore::CookieChangedSubscription> sub(
3431 monster()->AddCallbackForCookie( 3431 monster()->AddCallbackForCookie(
3432 test_url_, "abc", 3432 test_url_, "abc",
3433 base::Bind(&RecordCookieChanges, &cookies, &removes))); 3433 base::Bind(&RecordCookieChanges, &cookies, &removes)));
3434 SetCookie(monster(), test_url_, "abc=def"); 3434 SetCookie(monster(), test_url_, "abc=def");
3435 base::MessageLoop::current()->RunUntilIdle(); 3435 base::RunLoop().RunUntilIdle();
3436 EXPECT_EQ(1U, cookies.size()); 3436 EXPECT_EQ(1U, cookies.size());
3437 3437
3438 // Replacing an existing cookie is actually a two-phase delete + set 3438 // Replacing an existing cookie is actually a two-phase delete + set
3439 // operation, so we get an extra notification. 3439 // operation, so we get an extra notification.
3440 SetCookie(monster(), test_url_, "abc=ghi"); 3440 SetCookie(monster(), test_url_, "abc=ghi");
3441 base::MessageLoop::current()->RunUntilIdle(); 3441 base::RunLoop().RunUntilIdle();
3442 3442
3443 EXPECT_EQ(3U, cookies.size()); 3443 EXPECT_EQ(3U, cookies.size());
3444 EXPECT_EQ(3U, removes.size()); 3444 EXPECT_EQ(3U, removes.size());
3445 3445
3446 EXPECT_EQ("abc", cookies[1].Name()); 3446 EXPECT_EQ("abc", cookies[1].Name());
3447 EXPECT_EQ("def", cookies[1].Value()); 3447 EXPECT_EQ("def", cookies[1].Value());
3448 EXPECT_TRUE(removes[1]); 3448 EXPECT_TRUE(removes[1]);
3449 3449
3450 EXPECT_EQ("abc", cookies[2].Name()); 3450 EXPECT_EQ("abc", cookies[2].Name());
3451 EXPECT_EQ("ghi", cookies[2].Value()); 3451 EXPECT_EQ("ghi", cookies[2].Value());
3452 EXPECT_FALSE(removes[2]); 3452 EXPECT_FALSE(removes[2]);
3453 } 3453 }
3454 3454
3455 TEST_F(CookieMonsterNotificationTest, MultipleNotifies) { 3455 TEST_F(CookieMonsterNotificationTest, MultipleNotifies) {
3456 std::vector<CanonicalCookie> cookies0; 3456 std::vector<CanonicalCookie> cookies0;
3457 std::vector<CanonicalCookie> cookies1; 3457 std::vector<CanonicalCookie> cookies1;
3458 std::unique_ptr<CookieStore::CookieChangedSubscription> sub0( 3458 std::unique_ptr<CookieStore::CookieChangedSubscription> sub0(
3459 monster()->AddCallbackForCookie( 3459 monster()->AddCallbackForCookie(
3460 test_url_, "abc", 3460 test_url_, "abc",
3461 base::Bind(&RecordCookieChanges, &cookies0, nullptr))); 3461 base::Bind(&RecordCookieChanges, &cookies0, nullptr)));
3462 std::unique_ptr<CookieStore::CookieChangedSubscription> sub1( 3462 std::unique_ptr<CookieStore::CookieChangedSubscription> sub1(
3463 monster()->AddCallbackForCookie( 3463 monster()->AddCallbackForCookie(
3464 test_url_, "def", 3464 test_url_, "def",
3465 base::Bind(&RecordCookieChanges, &cookies1, nullptr))); 3465 base::Bind(&RecordCookieChanges, &cookies1, nullptr)));
3466 SetCookie(monster(), test_url_, "abc=def"); 3466 SetCookie(monster(), test_url_, "abc=def");
3467 base::MessageLoop::current()->RunUntilIdle(); 3467 base::RunLoop().RunUntilIdle();
3468 EXPECT_EQ(1U, cookies0.size()); 3468 EXPECT_EQ(1U, cookies0.size());
3469 EXPECT_EQ(0U, cookies1.size()); 3469 EXPECT_EQ(0U, cookies1.size());
3470 SetCookie(monster(), test_url_, "def=abc"); 3470 SetCookie(monster(), test_url_, "def=abc");
3471 base::MessageLoop::current()->RunUntilIdle(); 3471 base::RunLoop().RunUntilIdle();
3472 EXPECT_EQ(1U, cookies0.size()); 3472 EXPECT_EQ(1U, cookies0.size());
3473 EXPECT_EQ(1U, cookies1.size()); 3473 EXPECT_EQ(1U, cookies1.size());
3474 } 3474 }
3475 3475
3476 TEST_F(CookieMonsterNotificationTest, MultipleSameNotifies) { 3476 TEST_F(CookieMonsterNotificationTest, MultipleSameNotifies) {
3477 std::vector<CanonicalCookie> cookies0; 3477 std::vector<CanonicalCookie> cookies0;
3478 std::vector<CanonicalCookie> cookies1; 3478 std::vector<CanonicalCookie> cookies1;
3479 std::unique_ptr<CookieStore::CookieChangedSubscription> sub0( 3479 std::unique_ptr<CookieStore::CookieChangedSubscription> sub0(
3480 monster()->AddCallbackForCookie( 3480 monster()->AddCallbackForCookie(
3481 test_url_, "abc", 3481 test_url_, "abc",
3482 base::Bind(&RecordCookieChanges, &cookies0, nullptr))); 3482 base::Bind(&RecordCookieChanges, &cookies0, nullptr)));
3483 std::unique_ptr<CookieStore::CookieChangedSubscription> sub1( 3483 std::unique_ptr<CookieStore::CookieChangedSubscription> sub1(
3484 monster()->AddCallbackForCookie( 3484 monster()->AddCallbackForCookie(
3485 test_url_, "abc", 3485 test_url_, "abc",
3486 base::Bind(&RecordCookieChanges, &cookies1, nullptr))); 3486 base::Bind(&RecordCookieChanges, &cookies1, nullptr)));
3487 SetCookie(monster(), test_url_, "abc=def"); 3487 SetCookie(monster(), test_url_, "abc=def");
3488 base::MessageLoop::current()->RunUntilIdle(); 3488 base::RunLoop().RunUntilIdle();
3489 EXPECT_EQ(1U, cookies0.size()); 3489 EXPECT_EQ(1U, cookies0.size());
3490 EXPECT_EQ(1U, cookies0.size()); 3490 EXPECT_EQ(1U, cookies0.size());
3491 } 3491 }
3492 3492
3493 } // namespace net 3493 } // namespace net
OLDNEW
« no previous file with comments | « net/cookies/cookie_monster_perftest.cc ('k') | net/disk_cache/backend_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698