summaryrefslogtreecommitdiffstats
path: root/mojo/shell
diff options
context:
space:
mode:
authorviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-20 23:36:54 +0000
committerviettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-03-20 23:36:54 +0000
commit418ac1f413106725548196b8a9fcbe6d84913c06 (patch)
treee44666a27bb5df1da3dc82423ab910fa504300c9 /mojo/shell
parent4807ede33026431a6735f1e85ee68bc7482c70ea (diff)
downloadchromium_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.cc2
-rw-r--r--mojo/shell/dynamic_service_loader.cc17
-rw-r--r--mojo/shell/dynamic_service_runner.h4
-rw-r--r--mojo/shell/in_process_dynamic_service_runner.cc14
-rw-r--r--mojo/shell/in_process_dynamic_service_runner.h2
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_;