diff options
author | aberent@chromium.org <aberent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-27 15:29:56 +0000 |
---|---|---|
committer | aberent@chromium.org <aberent@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-27 15:29:56 +0000 |
commit | 232e09d18fa339b9dcb49f30d2e919fe673da1c5 (patch) | |
tree | d1a7e8698c6a7fab8f3f7925a81760f18504d5f7 /content/browser/startup_task_runner.h | |
parent | dc0fd43f60f29a9167f90cf1559ce1adc17d9969 (diff) | |
download | chromium_src-232e09d18fa339b9dcb49f30d2e919fe673da1c5.zip chromium_src-232e09d18fa339b9dcb49f30d2e919fe673da1c5.tar.gz chromium_src-232e09d18fa339b9dcb49f30d2e919fe673da1c5.tar.bz2 |
Allow overlapping sync and async startup requests
On Android we can get a second request to start the browser while
the an asynchronous request is in progress. Since the second
request may be synchronous, we may have switch to completing
initialization synchronously. This patch handles this by tracking
which initialization tasks have been run, and running the remaining
initialization tasks.
BUG=260574
Review URL: https://chromiumcodereview.appspot.com/22691002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@219795 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/startup_task_runner.h')
-rw-r--r-- | content/browser/startup_task_runner.h | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/content/browser/startup_task_runner.h b/content/browser/startup_task_runner.h index 5f954ed..80e5627 100644 --- a/content/browser/startup_task_runner.h +++ b/content/browser/startup_task_runner.h @@ -8,7 +8,6 @@ #include <list> #include "base/callback.h" -#include "base/memory/ref_counted.h" #include "base/single_thread_task_runner.h" #include "build/build_config.h" @@ -32,30 +31,31 @@ typedef base::Callback<int(void)> StartupTask; // no opportunity to handle UI events between the tasks of a // SingleThreadedTaskRunner. -class CONTENT_EXPORT StartupTaskRunner - : public base::RefCounted<StartupTaskRunner> { +class CONTENT_EXPORT StartupTaskRunner { public: // Constructor: Note that |startup_complete_callback| is optional. If it is // not null it will be called once all the startup tasks have run. - StartupTaskRunner(bool browser_may_start_asynchronously, - base::Callback<void(int)> startup_complete_callback, + StartupTaskRunner(base::Callback<void(int)> startup_complete_callback, scoped_refptr<base::SingleThreadTaskRunner> proxy); + ~StartupTaskRunner(); + // Add a task to the queue of startup tasks to be run. - virtual void AddTask(StartupTask& callback); + void AddTask(StartupTask& callback); + + // Start running the tasks asynchronously. + void StartRunningTasksAsync(); - // Start running the tasks. - virtual void StartRunningTasks(); + // Run all tasks, or all remaining tasks, synchronously + void RunAllTasksNow(); private: friend class base::RefCounted<StartupTaskRunner>; - virtual ~StartupTaskRunner(); std::list<StartupTask> task_list_; void WrappedTask(); - const bool asynchronous_startup_; base::Callback<void(int)> startup_complete_callback_; scoped_refptr<base::SingleThreadTaskRunner> proxy_; |