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

Side by Side Diff: sync/internal_api/http_bridge_unittest.cc

Issue 2031713002: Migrate WaitableEvent to enum-based constructor in sync/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@WEvent_enums
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
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 7
8 #include "base/bit_cast.h" 8 #include "base/bit_cast.h"
9 #include "base/metrics/field_trial.h" 9 #include "base/metrics/field_trial.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 411
412 // Tests an interesting case where code using the HttpBridge aborts the fetch 412 // Tests an interesting case where code using the HttpBridge aborts the fetch
413 // and releases ownership before a pending fetch completed callback is issued by 413 // and releases ownership before a pending fetch completed callback is issued by
414 // the underlying URLFetcher (and before that URLFetcher is destroyed, which 414 // the underlying URLFetcher (and before that URLFetcher is destroyed, which
415 // would cancel the callback). 415 // would cancel the callback).
416 TEST_F(MAYBE_SyncHttpBridgeTest, AbortAndReleaseBeforeFetchComplete) { 416 TEST_F(MAYBE_SyncHttpBridgeTest, AbortAndReleaseBeforeFetchComplete) {
417 base::Thread sync_thread("SyncThread"); 417 base::Thread sync_thread("SyncThread");
418 sync_thread.Start(); 418 sync_thread.Start();
419 419
420 // First, block the sync thread on the post. 420 // First, block the sync thread on the post.
421 base::WaitableEvent signal_when_created(false, false); 421 base::WaitableEvent signal_when_created(
422 base::WaitableEvent signal_when_released(false, false); 422 base::WaitableEvent::ResetPolicy::AUTOMATIC,
423 base::WaitableEvent::InitialState::NOT_SIGNALED);
424 base::WaitableEvent signal_when_released(
425 base::WaitableEvent::ResetPolicy::AUTOMATIC,
426 base::WaitableEvent::InitialState::NOT_SIGNALED);
423 sync_thread.message_loop()->PostTask(FROM_HERE, 427 sync_thread.message_loop()->PostTask(FROM_HERE,
424 base::Bind(&MAYBE_SyncHttpBridgeTest::RunSyncThreadBridgeUseTest, 428 base::Bind(&MAYBE_SyncHttpBridgeTest::RunSyncThreadBridgeUseTest,
425 base::Unretained(this), 429 base::Unretained(this),
426 &signal_when_created, 430 &signal_when_created,
427 &signal_when_released)); 431 &signal_when_released));
428 432
429 // Stop IO so we can control order of operations. 433 // Stop IO so we can control order of operations.
430 base::WaitableEvent io_waiter(false, false); 434 base::WaitableEvent io_waiter(
435 base::WaitableEvent::ResetPolicy::AUTOMATIC,
436 base::WaitableEvent::InitialState::NOT_SIGNALED);
431 ASSERT_TRUE(io_thread()->task_runner()->PostTask( 437 ASSERT_TRUE(io_thread()->task_runner()->PostTask(
432 FROM_HERE, 438 FROM_HERE,
433 base::Bind(&base::WaitableEvent::Wait, base::Unretained(&io_waiter)))); 439 base::Bind(&base::WaitableEvent::Wait, base::Unretained(&io_waiter))));
434 440
435 signal_when_created.Wait(); // Wait till we have a bridge to abort. 441 signal_when_created.Wait(); // Wait till we have a bridge to abort.
436 ASSERT_TRUE(bridge_for_race_test()); 442 ASSERT_TRUE(bridge_for_race_test());
437 443
438 // Schedule the fetch completion callback (but don't run it yet). Don't take 444 // Schedule the fetch completion callback (but don't run it yet). Don't take
439 // a reference to the bridge to mimic URLFetcher's handling of the delegate. 445 // a reference to the bridge to mimic URLFetcher's handling of the delegate.
440 net::URLFetcherDelegate* delegate = 446 net::URLFetcherDelegate* delegate =
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 TEST_F(MAYBE_SyncHttpBridgeTest, RequestContextGetterReleaseOrder) { 508 TEST_F(MAYBE_SyncHttpBridgeTest, RequestContextGetterReleaseOrder) {
503 base::Thread sync_thread("SyncThread"); 509 base::Thread sync_thread("SyncThread");
504 sync_thread.Start(); 510 sync_thread.Start();
505 511
506 syncer::HttpPostProviderFactory* factory = NULL; 512 syncer::HttpPostProviderFactory* factory = NULL;
507 syncer::HttpPostProviderInterface* bridge = NULL; 513 syncer::HttpPostProviderInterface* bridge = NULL;
508 514
509 scoped_refptr<net::URLRequestContextGetter> baseline_context_getter( 515 scoped_refptr<net::URLRequestContextGetter> baseline_context_getter(
510 new net::TestURLRequestContextGetter(io_thread()->task_runner())); 516 new net::TestURLRequestContextGetter(io_thread()->task_runner()));
511 517
512 base::WaitableEvent signal_when_created(false, false); 518 base::WaitableEvent signal_when_created(
513 base::WaitableEvent wait_for_shutdown(false, false); 519 base::WaitableEvent::ResetPolicy::AUTOMATIC,
520 base::WaitableEvent::InitialState::NOT_SIGNALED);
521 base::WaitableEvent wait_for_shutdown(
522 base::WaitableEvent::ResetPolicy::AUTOMATIC,
523 base::WaitableEvent::InitialState::NOT_SIGNALED);
514 524
515 CancelationSignal release_request_context_signal; 525 CancelationSignal release_request_context_signal;
516 526
517 // Create bridge factory and factory on sync thread and wait for the creation 527 // Create bridge factory and factory on sync thread and wait for the creation
518 // to finish. 528 // to finish.
519 sync_thread.message_loop()->PostTask( 529 sync_thread.message_loop()->PostTask(
520 FROM_HERE, base::Bind(&HttpBridgeRunOnSyncThread, 530 FROM_HERE, base::Bind(&HttpBridgeRunOnSyncThread,
521 base::Unretained(baseline_context_getter.get()), 531 base::Unretained(baseline_context_getter.get()),
522 &release_request_context_signal, &factory, &bridge, 532 &release_request_context_signal, &factory, &bridge,
523 &signal_when_created, &wait_for_shutdown)); 533 &signal_when_created, &wait_for_shutdown));
524 signal_when_created.Wait(); 534 signal_when_created.Wait();
525 535
526 // Simulate sync shutdown by aborting bridge and shutting down factory on 536 // Simulate sync shutdown by aborting bridge and shutting down factory on
527 // frontend. 537 // frontend.
528 bridge->Abort(); 538 bridge->Abort();
529 release_request_context_signal.Signal(); 539 release_request_context_signal.Signal();
530 540
531 // Wait for sync's RequestContextGetter to be cleared on IO thread and 541 // Wait for sync's RequestContextGetter to be cleared on IO thread and
532 // check for reference count. 542 // check for reference count.
533 base::WaitableEvent signal_wait_start(false, false); 543 base::WaitableEvent signal_wait_start(
534 base::WaitableEvent wait_done(false, false); 544 base::WaitableEvent::ResetPolicy::AUTOMATIC,
545 base::WaitableEvent::InitialState::NOT_SIGNALED);
546 base::WaitableEvent wait_done(
547 base::WaitableEvent::ResetPolicy::AUTOMATIC,
548 base::WaitableEvent::InitialState::NOT_SIGNALED);
535 io_thread()->message_loop()->PostTask( 549 io_thread()->message_loop()->PostTask(
536 FROM_HERE, 550 FROM_HERE,
537 base::Bind(&WaitOnIOThread, &signal_wait_start, &wait_done)); 551 base::Bind(&WaitOnIOThread, &signal_wait_start, &wait_done));
538 signal_wait_start.Wait(); 552 signal_wait_start.Wait();
539 // |baseline_context_getter| should have only one reference from local 553 // |baseline_context_getter| should have only one reference from local
540 // variable. 554 // variable.
541 EXPECT_TRUE(baseline_context_getter->HasOneRef()); 555 EXPECT_TRUE(baseline_context_getter->HasOneRef());
542 baseline_context_getter = NULL; 556 baseline_context_getter = NULL;
543 557
544 // Unblock and stop IO thread before sync thread. 558 // Unblock and stop IO thread before sync thread.
(...skipping 27 matching lines...) Expand all
572 586
573 // Sync thread: Finally run the posted task, only to find that our 587 // Sync thread: Finally run the posted task, only to find that our
574 // HttpBridgeFactory has been neutered. Should not crash. 588 // HttpBridgeFactory has been neutered. Should not crash.
575 factory->Init("TestUserAgent", BindToTrackerCallback()); 589 factory->Init("TestUserAgent", BindToTrackerCallback());
576 590
577 // At this point, attempting to use the factory would trigger a crash. Both 591 // At this point, attempting to use the factory would trigger a crash. Both
578 // this test and the real world code should make sure this never happens. 592 // this test and the real world code should make sure this never happens.
579 } 593 }
580 594
581 } // namespace syncer 595 } // namespace syncer
OLDNEW
« no previous file with comments | « sync/internal_api/http_bridge.cc ('k') | sync/internal_api/public/base/cancelation_signal_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698