| Index: content/browser/startup_task_runner_unittest.cc
|
| diff --git a/content/browser/startup_task_runner_unittest.cc b/content/browser/startup_task_runner_unittest.cc
|
| index b63f5556faf3a417b32332deca2f9b44f2d8826b..fcd2b3d1da64eefc89a56cb7ff1880fbce8892f8 100644
|
| --- a/content/browser/startup_task_runner_unittest.cc
|
| +++ b/content/browser/startup_task_runner_unittest.cc
|
| @@ -23,7 +23,8 @@ using testing::Assign;
|
| using testing::Invoke;
|
| using testing::WithArg;
|
|
|
| -bool observer_called = false;
|
| +int observer_calls = 0;
|
| +int task_count = 0;
|
| int observer_result;
|
| base::Closure task;
|
|
|
| @@ -35,7 +36,7 @@ bool SaveTaskArg(const Closure& arg) {
|
| }
|
|
|
| void Observer(int result) {
|
| - observer_called = true;
|
| + observer_calls++;
|
| observer_result = result;
|
| }
|
|
|
| @@ -44,22 +45,26 @@ class StartupTaskRunnerTest : public testing::Test {
|
|
|
| virtual void SetUp() {
|
| last_task_ = 0;
|
| - observer_called = false;
|
| + observer_calls = 0;
|
| + task_count = 0;
|
| }
|
|
|
| int Task1() {
|
| last_task_ = 1;
|
| + task_count++;
|
| return 0;
|
| }
|
|
|
| int Task2() {
|
| last_task_ = 2;
|
| + task_count++;
|
| return 0;
|
| }
|
|
|
| int FailingTask() {
|
| // Task returning failure
|
| last_task_ = 3;
|
| + task_count++;
|
| return 1;
|
| }
|
|
|
| @@ -133,8 +138,18 @@ TEST_F(StartupTaskRunnerTest, SynchronousExecution) {
|
| // On an immediate StartupTaskRunner the tasks should now all have run.
|
| EXPECT_EQ(GetLastTask(), 2);
|
|
|
| - EXPECT_TRUE(observer_called);
|
| + EXPECT_EQ(task_count, 2);
|
| + EXPECT_EQ(observer_calls, 1);
|
| EXPECT_EQ(observer_result, 0);
|
| +
|
| + // Running the tasks asynchronously shouldn't do anything
|
| + // In particular Post... should not be called
|
| + runner.StartRunningTasksAsync();
|
| +
|
| + // No more tasks should be run and the observer should not have been called
|
| + // again
|
| + EXPECT_EQ(task_count, 2);
|
| + EXPECT_EQ(observer_calls, 1);
|
| }
|
|
|
| TEST_F(StartupTaskRunnerTest, NullObserver) {
|
| @@ -160,8 +175,16 @@ TEST_F(StartupTaskRunnerTest, NullObserver) {
|
|
|
| // On an immediate StartupTaskRunner the tasks should now all have run.
|
| EXPECT_EQ(GetLastTask(), 2);
|
| + EXPECT_EQ(task_count, 2);
|
| +
|
| + // Running the tasks asynchronously shouldn't do anything
|
| + // In particular Post... should not be called
|
| + runner.StartRunningTasksAsync();
|
| +
|
| + // No more tasks should have been run
|
| + EXPECT_EQ(task_count, 2);
|
|
|
| - EXPECT_FALSE(observer_called);
|
| + EXPECT_EQ(observer_calls, 0);
|
| }
|
|
|
| TEST_F(StartupTaskRunnerTest, SynchronousExecutionFailedTask) {
|
| @@ -187,9 +210,18 @@ TEST_F(StartupTaskRunnerTest, SynchronousExecutionFailedTask) {
|
|
|
| // Only the first task should have run, since it failed
|
| EXPECT_EQ(GetLastTask(), 3);
|
| -
|
| - EXPECT_TRUE(observer_called);
|
| + EXPECT_EQ(task_count, 1);
|
| + EXPECT_EQ(observer_calls, 1);
|
| EXPECT_EQ(observer_result, 1);
|
| +
|
| + // After a failed task all remaining tasks should be cancelled
|
| + // In particular Post... should not be called by running asynchronously
|
| + runner.StartRunningTasksAsync();
|
| +
|
| + // The observer should only be called the first time the queue completes and
|
| + // no more tasks should have run
|
| + EXPECT_EQ(observer_calls, 1);
|
| + EXPECT_EQ(task_count, 1);
|
| }
|
|
|
| TEST_F(StartupTaskRunnerTest, AsynchronousExecution) {
|
| @@ -224,12 +256,19 @@ TEST_F(StartupTaskRunnerTest, AsynchronousExecution) {
|
| // be added to the queue, hence updating "task". The loop should actually run
|
| // at most 3 times (once for each task plus possibly once for the observer),
|
| // the "4" is a backstop.
|
| - for (int i = 0; i < 4 && !observer_called; i++) {
|
| + for (int i = 0; i < 4 && observer_calls == 0; i++) {
|
| task.Run();
|
| EXPECT_EQ(i + 1, GetLastTask());
|
| }
|
| - EXPECT_TRUE(observer_called);
|
| + EXPECT_EQ(task_count, 2);
|
| + EXPECT_EQ(observer_calls, 1);
|
| EXPECT_EQ(observer_result, 0);
|
| +
|
| + // Check that running synchronously now doesn't do anything
|
| +
|
| + runner.RunAllTasksNow();
|
| + EXPECT_EQ(task_count, 2);
|
| + EXPECT_EQ(observer_calls, 1);
|
| }
|
|
|
| TEST_F(StartupTaskRunnerTest, AsynchronousExecutionFailedTask) {
|
| @@ -264,13 +303,19 @@ TEST_F(StartupTaskRunnerTest, AsynchronousExecutionFailedTask) {
|
| // be added to the queue, hence updating "task". The loop should actually run
|
| // at most twice (once for the failed task plus possibly once for the
|
| // observer), the "4" is a backstop.
|
| - for (int i = 0; i < 4 && !observer_called; i++) {
|
| + for (int i = 0; i < 4 && observer_calls == 0; i++) {
|
| task.Run();
|
| }
|
| EXPECT_EQ(GetLastTask(), 3);
|
| + EXPECT_EQ(task_count, 1);
|
|
|
| - EXPECT_TRUE(observer_called);
|
| + EXPECT_EQ(observer_calls, 1);
|
| EXPECT_EQ(observer_result, 1);
|
| +
|
| + // Check that running synchronously now doesn't do anything
|
| + runner.RunAllTasksNow();
|
| + EXPECT_EQ(observer_calls, 1);
|
| + EXPECT_EQ(task_count, 1);
|
| }
|
| } // namespace
|
| } // namespace content
|
|
|