| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "mojo/shell/shell.h" | 5 #include "mojo/shell/shell.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 | 206 |
| 207 // InterfaceFactory<mojom::Shell>: | 207 // InterfaceFactory<mojom::Shell>: |
| 208 void Create(Connection* connection, | 208 void Create(Connection* connection, |
| 209 mojom::ShellRequest request) override { | 209 mojom::ShellRequest request) override { |
| 210 shell_bindings_.AddBinding(this, std::move(request)); | 210 shell_bindings_.AddBinding(this, std::move(request)); |
| 211 } | 211 } |
| 212 | 212 |
| 213 // mojom::Shell implementation: | 213 // mojom::Shell implementation: |
| 214 void CreateInstance(mojom::ShellClientFactoryPtr factory, | 214 void CreateInstance(mojom::ShellClientFactoryPtr factory, |
| 215 mojom::IdentityPtr target, | 215 mojom::IdentityPtr target, |
| 216 mojom::CapabilityFilterPtr filter, | |
| 217 mojom::PIDReceiverRequest pid_receiver, | 216 mojom::PIDReceiverRequest pid_receiver, |
| 218 const CreateInstanceCallback& callback) override { | 217 const CreateInstanceCallback& callback) override { |
| 218 // We need to bounce through the package manager to load the |
| 219 // CapabilityFilter. |
| 220 std::string name = target->name; |
| 221 shell_->shell_resolver_->ResolveMojoName(name, base::Bind( |
| 222 &mojo::shell::Shell::Instance::OnResolvedNameForCreateInstance, |
| 223 weak_factory_.GetWeakPtr(), base::Passed(std::move(factory)), |
| 224 base::Passed(std::move(target)), base::Passed(std::move(pid_receiver)), |
| 225 callback)); |
| 226 } |
| 227 void AddInstanceListener(mojom::InstanceListenerPtr listener) override { |
| 228 // TODO(beng): this should only track the instances matching this user, and |
| 229 // root. |
| 230 shell_->AddInstanceListener(std::move(listener)); |
| 231 } |
| 232 |
| 233 void OnResolvedNameForCreateInstance(mojom::ShellClientFactoryPtr factory, |
| 234 mojom::IdentityPtr target, |
| 235 mojom::PIDReceiverRequest pid_receiver, |
| 236 const CreateInstanceCallback& callback, |
| 237 const String& resolved_name, |
| 238 const String& resolved_instance, |
| 239 mojom::CapabilityFilterPtr filter, |
| 240 const String& file_url) { |
| 219 if (!base::IsValidGUID(target->user_id)) | 241 if (!base::IsValidGUID(target->user_id)) |
| 220 callback.Run(mojom::ConnectResult::INVALID_ARGUMENT); | 242 callback.Run(mojom::ConnectResult::INVALID_ARGUMENT); |
| 221 | 243 |
| 222 Identity target_id = target.To<Identity>(); | 244 Identity target_id = target.To<Identity>(); |
| 223 | 245 |
| 224 // TODO(beng): perform checking on policy of whether this instance is | 246 // TODO(beng): perform checking on policy of whether this instance is |
| 225 // allowed to pass different user_ids. | 247 // allowed to pass different user_ids. |
| 226 if (target_id.user_id() == mojom::kInheritUserID) | 248 if (target_id.user_id() == mojom::kInheritUserID) |
| 227 target_id.set_user_id(identity_.user_id()); | 249 target_id.set_user_id(identity_.user_id()); |
| 228 | 250 |
| 229 mojom::ShellClientRequest request; | 251 mojom::ShellClientRequest request; |
| 230 Instance* instance = shell_->CreateInstance( | 252 Instance* instance = shell_->CreateInstance( |
| 231 target_id, filter->filter.To<CapabilityFilter>(), &request); | 253 target_id, filter->filter.To<CapabilityFilter>(), &request); |
| 232 instance->pid_receiver_binding_.Bind(std::move(pid_receiver)); | 254 instance->pid_receiver_binding_.Bind(std::move(pid_receiver)); |
| 233 instance->factory_ = std::move(factory); | 255 instance->factory_ = std::move(factory); |
| 234 instance->factory_->CreateShellClient(std::move(request), target->name); | 256 instance->factory_->CreateShellClient(std::move(request), target->name); |
| 235 callback.Run(mojom::ConnectResult::SUCCEEDED); | 257 callback.Run(mojom::ConnectResult::SUCCEEDED); |
| 236 // We don't call ConnectToClient() here since the instance was created | 258 // We don't call ConnectToClient() here since the instance was created |
| 237 // manually by other code, not in response to a Connect() request. The newly | 259 // manually by other code, not in response to a Connect() request. The newly |
| 238 // created instance is identified by |name| and may be subsequently reached | 260 // created instance is identified by |name| and may be subsequently reached |
| 239 // by client code using this identity. | 261 // by client code using this identity. |
| 240 } | 262 } |
| 241 void AddInstanceListener(mojom::InstanceListenerPtr listener) override { | |
| 242 // TODO(beng): this should only track the instances matching this user, and | |
| 243 // root. | |
| 244 shell_->AddInstanceListener(std::move(listener)); | |
| 245 } | |
| 246 | 263 |
| 247 uint32_t GenerateUniqueID() const { | 264 uint32_t GenerateUniqueID() const { |
| 248 static uint32_t id = mojom::kInvalidInstanceID; | 265 static uint32_t id = mojom::kInvalidInstanceID; |
| 249 ++id; | 266 ++id; |
| 250 CHECK_NE(mojom::kInvalidInstanceID, id); | 267 CHECK_NE(mojom::kInvalidInstanceID, id); |
| 251 return id; | 268 return id; |
| 252 } | 269 } |
| 253 | 270 |
| 254 void PIDAvailable(base::ProcessId pid) { | 271 void PIDAvailable(base::ProcessId pid) { |
| 255 pid_ = pid; | 272 pid_ = pid; |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 for (auto it = native_runners_.begin(); it != native_runners_.end(); ++it) { | 612 for (auto it = native_runners_.begin(); it != native_runners_.end(); ++it) { |
| 596 if (it->get() == runner) { | 613 if (it->get() == runner) { |
| 597 native_runners_.erase(it); | 614 native_runners_.erase(it); |
| 598 return; | 615 return; |
| 599 } | 616 } |
| 600 } | 617 } |
| 601 } | 618 } |
| 602 | 619 |
| 603 } // namespace shell | 620 } // namespace shell |
| 604 } // namespace mojo | 621 } // namespace mojo |
| OLD | NEW |