Index: mojo/shell/shell.cc |
diff --git a/mojo/shell/shell.cc b/mojo/shell/shell.cc |
index 277379fc6da672aa740514dcc51bd187c68b2e4a..087c0be1a02207e2577cc99b5d7126528b40752e 100644 |
--- a/mojo/shell/shell.cc |
+++ b/mojo/shell/shell.cc |
@@ -213,9 +213,31 @@ class Shell::Instance : public mojom::Connector, |
// mojom::Shell implementation: |
void CreateInstance(mojom::ShellClientFactoryPtr factory, |
mojom::IdentityPtr target, |
- mojom::CapabilityFilterPtr filter, |
mojom::PIDReceiverRequest pid_receiver, |
const CreateInstanceCallback& callback) override { |
+ // We need to bounce through the package manager to load the |
+ // CapabilityFilter. |
+ std::string name = target->name; |
+ shell_->shell_resolver_->ResolveMojoName(name, base::Bind( |
+ &mojo::shell::Shell::Instance::OnResolvedNameForCreateInstance, |
+ weak_factory_.GetWeakPtr(), base::Passed(std::move(factory)), |
+ base::Passed(std::move(target)), base::Passed(std::move(pid_receiver)), |
+ callback)); |
+ } |
+ void AddInstanceListener(mojom::InstanceListenerPtr listener) override { |
+ // TODO(beng): this should only track the instances matching this user, and |
+ // root. |
+ shell_->AddInstanceListener(std::move(listener)); |
+ } |
+ |
+ void OnResolvedNameForCreateInstance(mojom::ShellClientFactoryPtr factory, |
+ mojom::IdentityPtr target, |
+ mojom::PIDReceiverRequest pid_receiver, |
+ const CreateInstanceCallback& callback, |
+ const String& resolved_name, |
+ const String& resolved_instance, |
+ mojom::CapabilityFilterPtr filter, |
+ const String& file_url) { |
if (!base::IsValidGUID(target->user_id)) |
callback.Run(mojom::ConnectResult::INVALID_ARGUMENT); |
@@ -228,7 +250,7 @@ class Shell::Instance : public mojom::Connector, |
mojom::ShellClientRequest request; |
Instance* instance = shell_->CreateInstance( |
- target_id, filter->filter.To<CapabilityFilter>(), &request); |
+ target_id, filter->filter.To<CapabilityFilter>(), &request); |
instance->pid_receiver_binding_.Bind(std::move(pid_receiver)); |
instance->factory_ = std::move(factory); |
instance->factory_->CreateShellClient(std::move(request), target->name); |
@@ -238,11 +260,6 @@ class Shell::Instance : public mojom::Connector, |
// created instance is identified by |name| and may be subsequently reached |
// by client code using this identity. |
} |
- void AddInstanceListener(mojom::InstanceListenerPtr listener) override { |
- // TODO(beng): this should only track the instances matching this user, and |
- // root. |
- shell_->AddInstanceListener(std::move(listener)); |
- } |
uint32_t GenerateUniqueID() const { |
static uint32_t id = mojom::kInvalidInstanceID; |