Index: content/browser/startup_task_runner.cc |
diff --git a/content/browser/startup_task_runner.cc b/content/browser/startup_task_runner.cc |
index a7e730e5d875980ca730cec3b7185dbdf96c153c..d1fc904d5266b1f7dcc48a913a1827578b158c8a 100644 |
--- a/content/browser/startup_task_runner.cc |
+++ b/content/browser/startup_task_runner.cc |
@@ -11,40 +11,50 @@ |
namespace content { |
StartupTaskRunner::StartupTaskRunner( |
- bool browser_may_start_asynchronously, |
base::Callback<void(int)> const startup_complete_callback, |
scoped_refptr<base::SingleThreadTaskRunner> proxy) |
- : asynchronous_startup_(browser_may_start_asynchronously), |
- startup_complete_callback_(startup_complete_callback), |
- proxy_(proxy) {} |
+ : startup_complete_callback_(startup_complete_callback), proxy_(proxy) {} |
+ |
+StartupTaskRunner::~StartupTaskRunner() {} |
void StartupTaskRunner::AddTask(StartupTask& callback) { |
task_list_.push_back(callback); |
} |
-void StartupTaskRunner::StartRunningTasks() { |
+void StartupTaskRunner::StartRunningTasksAsync() { |
DCHECK(proxy_); |
int result = 0; |
- if (asynchronous_startup_ && !task_list_.empty()) { |
- const base::Closure next_task = |
- base::Bind(&StartupTaskRunner::WrappedTask, this); |
- proxy_->PostNonNestableTask(FROM_HERE, next_task); |
- } else { |
- for (std::list<StartupTask>::iterator it = task_list_.begin(); |
- it != task_list_.end(); |
- it++) { |
- result = it->Run(); |
- if (result > 0) { |
- break; |
- } |
- } |
+ if (task_list_.empty()) { |
if (!startup_complete_callback_.is_null()) { |
startup_complete_callback_.Run(result); |
} |
+ } else { |
+ const base::Closure next_task = |
+ base::Bind(&StartupTaskRunner::WrappedTask, base::Unretained(this)); |
+ proxy_->PostNonNestableTask(FROM_HERE, next_task); |
+ } |
+} |
+ |
+void StartupTaskRunner::RunAllTasksNow() { |
+ int result = 0; |
+ for (std::list<StartupTask>::iterator it = task_list_.begin(); |
+ it != task_list_.end(); |
+ it++) { |
+ result = it->Run(); |
+ if (result > 0) break; |
+ } |
+ if (!startup_complete_callback_.is_null()) { |
+ startup_complete_callback_.Run(result); |
} |
} |
void StartupTaskRunner::WrappedTask() { |
+ if (task_list_.empty()) { |
+ // This will happen if the remaining tasks have been run synchronously since |
+ // the WrappedTask was created. Any callback will already have been called, |
+ // so there is nothing to do |
+ return; |
+ } |
int result = task_list_.front().Run(); |
task_list_.pop_front(); |
if (result > 0 || task_list_.empty()) { |
@@ -53,11 +63,9 @@ void StartupTaskRunner::WrappedTask() { |
} |
} else { |
const base::Closure next_task = |
- base::Bind(&StartupTaskRunner::WrappedTask, this); |
+ base::Bind(&StartupTaskRunner::WrappedTask, base::Unretained(this)); |
proxy_->PostNonNestableTask(FROM_HERE, next_task); |
} |
} |
-StartupTaskRunner::~StartupTaskRunner() {} |
- |
} // namespace content |