Index: mojo/shell/dynamic_application_loader.cc |
diff --git a/mojo/shell/dynamic_application_loader.cc b/mojo/shell/dynamic_application_loader.cc |
index 7c578714da68d306bd905e0c66197143c0dc9ea3..bed70a48b33d31e0305a8278fe9969e62e77e6ed 100644 |
--- a/mojo/shell/dynamic_application_loader.cc |
+++ b/mojo/shell/dynamic_application_loader.cc |
@@ -53,9 +53,11 @@ class DynamicApplicationLoader::Loader { |
Loader(MimeTypeToURLMap* mime_type_to_url, |
Context* context, |
DynamicServiceRunnerFactory* runner_factory, |
+ ScopedMessagePipeHandle shell_handle, |
scoped_refptr<ApplicationLoader::LoadCallbacks> load_callbacks, |
const LoaderCompleteCallback& loader_complete_callback) |
- : load_callbacks_(load_callbacks), |
+ : shell_handle_(shell_handle.Pass()), |
+ load_callbacks_(load_callbacks), |
loader_complete_callback_(loader_complete_callback), |
context_(context), |
mime_type_to_url_(mime_type_to_url), |
@@ -84,15 +86,16 @@ class DynamicApplicationLoader::Loader { |
std::string shebang; |
if (PeekContentHandler(&shebang, &url)) { |
load_callbacks_->LoadWithContentHandler( |
- url, AsURLResponse(context_->task_runners()->blocking_pool(), |
- static_cast<int>(shebang.size()))); |
+ url, shell_handle_.Pass(), |
+ AsURLResponse(context_->task_runners()->blocking_pool(), |
+ static_cast<int>(shebang.size()))); |
return; |
} |
MimeTypeToURLMap::iterator iter = mime_type_to_url_->find(MimeType()); |
if (iter != mime_type_to_url_->end()) { |
load_callbacks_->LoadWithContentHandler( |
- iter->second, |
+ iter->second, shell_handle_.Pass(), |
AsURLResponse(context_->task_runners()->blocking_pool(), 0)); |
return; |
} |
@@ -124,12 +127,7 @@ class DynamicApplicationLoader::Loader { |
} |
void RunLibrary(const base::FilePath& path, bool path_exists) { |
- ScopedMessagePipeHandle shell_handle = |
- load_callbacks_->RegisterApplication(); |
- if (!shell_handle.is_valid()) { |
- ReportComplete(); |
- return; |
- } |
+ DCHECK(shell_handle_.is_valid()); |
if (!path_exists) { |
LOG(ERROR) << "Library not started because library path '" << path.value() |
@@ -140,10 +138,11 @@ class DynamicApplicationLoader::Loader { |
runner_ = runner_factory_->Create(context_); |
runner_->Start( |
- path, shell_handle.Pass(), |
+ path, shell_handle_.Pass(), |
base::Bind(&Loader::ReportComplete, weak_ptr_factory_.GetWeakPtr())); |
} |
+ ScopedMessagePipeHandle shell_handle_; |
scoped_refptr<ApplicationLoader::LoadCallbacks> load_callbacks_; |
LoaderCompleteCallback loader_complete_callback_; |
Context* context_; |
@@ -160,11 +159,13 @@ class DynamicApplicationLoader::LocalLoader : public Loader { |
MimeTypeToURLMap* mime_type_to_url, |
Context* context, |
DynamicServiceRunnerFactory* runner_factory, |
+ ScopedMessagePipeHandle shell_handle, |
scoped_refptr<ApplicationLoader::LoadCallbacks> load_callbacks, |
const LoaderCompleteCallback& loader_complete_callback) |
: Loader(mime_type_to_url, |
context, |
runner_factory, |
+ shell_handle.Pass(), |
load_callbacks, |
loader_complete_callback), |
url_(url), |
@@ -246,11 +247,13 @@ class DynamicApplicationLoader::NetworkLoader : public Loader { |
MimeTypeToURLMap* mime_type_to_url, |
Context* context, |
DynamicServiceRunnerFactory* runner_factory, |
+ ScopedMessagePipeHandle shell_handle, |
scoped_refptr<ApplicationLoader::LoadCallbacks> load_callbacks, |
const LoaderCompleteCallback& loader_complete_callback) |
: Loader(mime_type_to_url, |
context, |
runner_factory, |
+ shell_handle.Pass(), |
load_callbacks, |
loader_complete_callback), |
weak_ptr_factory_(this) { |
@@ -368,11 +371,12 @@ void DynamicApplicationLoader::RegisterContentHandler( |
void DynamicApplicationLoader::Load( |
ApplicationManager* manager, |
const GURL& url, |
+ ScopedMessagePipeHandle shell_handle, |
scoped_refptr<LoadCallbacks> load_callbacks) { |
if (url.SchemeIsFile()) { |
- loaders_.push_back(new LocalLoader(url, &mime_type_to_url_, context_, |
- runner_factory_.get(), load_callbacks, |
- loader_complete_callback_)); |
+ loaders_.push_back(new LocalLoader( |
+ url, &mime_type_to_url_, context_, runner_factory_.get(), |
+ shell_handle.Pass(), load_callbacks, loader_complete_callback_)); |
return; |
} |
@@ -381,9 +385,10 @@ void DynamicApplicationLoader::Load( |
GURL("mojo:network_service"), &network_service_); |
} |
- loaders_.push_back(new NetworkLoader( |
- url, network_service_.get(), &mime_type_to_url_, context_, |
- runner_factory_.get(), load_callbacks, loader_complete_callback_)); |
+ loaders_.push_back( |
+ new NetworkLoader(url, network_service_.get(), &mime_type_to_url_, |
+ context_, runner_factory_.get(), shell_handle.Pass(), |
+ load_callbacks, loader_complete_callback_)); |
} |
void DynamicApplicationLoader::OnApplicationError(ApplicationManager* manager, |