diff options
author | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-20 23:36:54 +0000 |
---|---|---|
committer | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-20 23:36:54 +0000 |
commit | 418ac1f413106725548196b8a9fcbe6d84913c06 (patch) | |
tree | e44666a27bb5df1da3dc82423ab910fa504300c9 /mojo/shell | |
parent | 4807ede33026431a6735f1e85ee68bc7482c70ea (diff) | |
download | chromium_src-418ac1f413106725548196b8a9fcbe6d84913c06.zip chromium_src-418ac1f413106725548196b8a9fcbe6d84913c06.tar.gz chromium_src-418ac1f413106725548196b8a9fcbe6d84913c06.tar.bz2 |
Mojo: Run DynamicServiceRunner::Start()'s callback on a reasonable thread.
R=sky@chromium.org
Review URL: https://codereview.chromium.org/206683003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258457 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'mojo/shell')
-rw-r--r-- | mojo/shell/app_child_process.cc | 2 | ||||
-rw-r--r-- | mojo/shell/dynamic_service_loader.cc | 17 | ||||
-rw-r--r-- | mojo/shell/dynamic_service_runner.h | 4 | ||||
-rw-r--r-- | mojo/shell/in_process_dynamic_service_runner.cc | 14 | ||||
-rw-r--r-- | mojo/shell/in_process_dynamic_service_runner.h | 2 |
5 files changed, 22 insertions, 17 deletions
diff --git a/mojo/shell/app_child_process.cc b/mojo/shell/app_child_process.cc index 0ba6188..3d07789 100644 --- a/mojo/shell/app_child_process.cc +++ b/mojo/shell/app_child_process.cc @@ -117,6 +117,8 @@ class AppChildControllerImpl : public mojo_shell::AppChildController { ScopedMessagePipeHandle service) OVERRIDE { DVLOG(2) << "AppChildControllerImpl::StartApp(" << app_path.To<std::string>() << ", ...)"; + + // TODO(vtl): Load/run app. } private: diff --git a/mojo/shell/dynamic_service_loader.cc b/mojo/shell/dynamic_service_loader.cc index b5a7ac4..bea1496 100644 --- a/mojo/shell/dynamic_service_loader.cc +++ b/mojo/shell/dynamic_service_loader.cc @@ -66,24 +66,16 @@ class DynamicServiceLoader::LoadContext : public mojo::shell::Loader::Delegate { const std::string* mime_type) OVERRIDE { DVLOG(2) << "Completed load of " << app_url << " (" << url_ << ") to " << app_path.value(); + DCHECK(loader_->context_->task_runners()->ui_runner()-> + BelongsToCurrentThread()); runner_->Start( app_path, service_handle_.Pass(), - base::Bind(&LoadContext::AppCompleted, - scoped_refptr<base::TaskRunner>( - loader_->context_->task_runners()->ui_runner()), + base::Bind(&DynamicServiceLoader::AppCompleted, base::Unretained(loader_), url_)); } - static void AppCompleted(scoped_refptr<base::TaskRunner> task_runner, - DynamicServiceLoader* loader, - const GURL& url) { - task_runner->PostTask(FROM_HERE, - base::Bind(&DynamicServiceLoader::AppCompleted, - base::Unretained(loader), url)); - } - DynamicServiceLoader* const loader_; const GURL url_; scoped_ptr<mojo::shell::Loader::Job> request_; @@ -114,6 +106,9 @@ void DynamicServiceLoader::LoadService(ServiceManager* manager, } void DynamicServiceLoader::AppCompleted(const GURL& url) { + DCHECK(context_->task_runners()->ui_runner()->BelongsToCurrentThread()); + DVLOG(2) << "App completed (url: " << url << ")"; + LoadContextMap::iterator it = url_to_load_context_.find(url); DCHECK(it != url_to_load_context_.end()) << url; diff --git a/mojo/shell/dynamic_service_runner.h b/mojo/shell/dynamic_service_runner.h index bd0e74f..00a92a5 100644 --- a/mojo/shell/dynamic_service_runner.h +++ b/mojo/shell/dynamic_service_runner.h @@ -23,7 +23,9 @@ class DynamicServiceRunner { public: virtual ~DynamicServiceRunner() {} - // Takes ownership of the file at |app_path|. + // Takes ownership of the file at |app_path|. Loads the app in that file and + // runs it on some other thread/process. |app_completed_callback| is posted + // (to the thread on which |Start()| was called) after |MojoMain()| completes. virtual void Start(const base::FilePath& app_path, ScopedShellHandle service_handle, const base::Closure& app_completed_callback) = 0; diff --git a/mojo/shell/in_process_dynamic_service_runner.cc b/mojo/shell/in_process_dynamic_service_runner.cc index e366158..62ca5e3 100644 --- a/mojo/shell/in_process_dynamic_service_runner.cc +++ b/mojo/shell/in_process_dynamic_service_runner.cc @@ -7,7 +7,9 @@ #include "base/bind.h" #include "base/callback_helpers.h" #include "base/file_util.h" +#include "base/location.h" #include "base/logging.h" +#include "base/message_loop/message_loop_proxy.h" #include "base/scoped_native_library.h" namespace mojo { @@ -34,8 +36,11 @@ void InProcessDynamicServiceRunner::Start( DCHECK(!service_handle_.is_valid()); service_handle_ = service_handle.Pass(); - DCHECK(app_completed_callback_.is_null()); - app_completed_callback_ = app_completed_callback; + DCHECK(app_completed_callback_runner_.is_null()); + app_completed_callback_runner_ = base::Bind(&base::TaskRunner::PostTask, + base::MessageLoopProxy::current(), + FROM_HERE, + app_completed_callback); DCHECK(!thread_.HasBeenStarted()); thread_.Start(); @@ -71,8 +76,9 @@ void InProcessDynamicServiceRunner::Run() { LOG(ERROR) << "MojoMain returned an error: " << result; } while (false); - app_completed_callback_.Run(); - app_completed_callback_.Reset(); + bool success = app_completed_callback_runner_.Run(); + app_completed_callback_runner_.Reset(); + LOG_IF(ERROR, !success) << "Failed post run app_completed_callback"; } } // namespace shell diff --git a/mojo/shell/in_process_dynamic_service_runner.h b/mojo/shell/in_process_dynamic_service_runner.h index ea674cd..e95eeb5 100644 --- a/mojo/shell/in_process_dynamic_service_runner.h +++ b/mojo/shell/in_process_dynamic_service_runner.h @@ -32,7 +32,7 @@ class InProcessDynamicServiceRunner base::FilePath app_path_; ScopedShellHandle service_handle_; - base::Closure app_completed_callback_; + base::Callback<bool(void)> app_completed_callback_runner_; base::DelegateSimpleThread thread_; |