| Index: services/shell/shell.cc
|
| diff --git a/services/shell/shell.cc b/services/shell/shell.cc
|
| index 79763bfa0b3459a65d2015fd0aeed1c2e865ef2a..aebf5a0f6c5afcd5671ad04c48a45c4534f7a126 100644
|
| --- a/services/shell/shell.cc
|
| +++ b/services/shell/shell.cc
|
| @@ -25,8 +25,8 @@
|
| #include "services/shell/public/cpp/names.h"
|
| #include "services/shell/public/cpp/shell_connection.h"
|
| #include "services/shell/public/interfaces/connector.mojom.h"
|
| +#include "services/shell/public/interfaces/service.mojom.h"
|
| #include "services/shell/public/interfaces/shell.mojom.h"
|
| -#include "services/shell/public/interfaces/shell_client.mojom.h"
|
|
|
| namespace shell {
|
|
|
| @@ -110,7 +110,7 @@ bool HasClass(const CapabilitySpec& spec, const std::string& class_name) {
|
| // shell's Shell.
|
| class Shell::Instance : public mojom::Connector,
|
| public mojom::PIDReceiver,
|
| - public ShellClient,
|
| + public Service,
|
| public InterfaceFactory<mojom::Shell>,
|
| public mojom::Shell {
|
| public:
|
| @@ -140,7 +140,7 @@ class Shell::Instance : public mojom::Connector,
|
| // Shutdown all bindings before we close the runner. This way the process
|
| // should see the pipes closed and exit, as well as waking up any potential
|
| // sync/WaitForIncomingResponse().
|
| - shell_client_.reset();
|
| + service_.reset();
|
| if (pid_receiver_binding_.is_bound())
|
| pid_receiver_binding_.Close();
|
| connectors_.CloseAllBindings();
|
| @@ -166,7 +166,7 @@ class Shell::Instance : public mojom::Connector,
|
| }
|
|
|
| bool ConnectToClient(std::unique_ptr<ConnectParams>* connect_params) {
|
| - if (!shell_client_.is_bound())
|
| + if (!service_.is_bound())
|
| return false;
|
|
|
| std::unique_ptr<ConnectParams> params(std::move(*connect_params));
|
| @@ -191,7 +191,7 @@ class Shell::Instance : public mojom::Connector,
|
| request.interfaces.erase("*");
|
| }
|
|
|
| - shell_client_->AcceptConnection(
|
| + service_->OnConnect(
|
| mojom::Identity::From(params->source()), source_id,
|
| params->TakeRemoteInterfaces(), params->TakeLocalInterfaces(),
|
| mojom::CapabilityRequest::From(request), params->target().name());
|
| @@ -199,32 +199,32 @@ class Shell::Instance : public mojom::Connector,
|
| return true;
|
| }
|
|
|
| - void StartWithClient(mojom::ShellClientPtr client) {
|
| - CHECK(!shell_client_);
|
| - shell_client_ = std::move(client);
|
| - shell_client_.set_connection_error_handler(
|
| - base::Bind(&Instance::OnShellClientLost, base::Unretained(this),
|
| + void StartWithClient(mojom::ServicePtr client) {
|
| + CHECK(!service_);
|
| + service_ = std::move(client);
|
| + service_.set_connection_error_handler(
|
| + base::Bind(&Instance::OnServiceLost, base::Unretained(this),
|
| shell_->GetWeakPtr()));
|
| - shell_client_->Initialize(mojom::Identity::From(identity_), id_,
|
| - base::Bind(&Instance::OnInitializeResponse,
|
| - base::Unretained(this)));
|
| + service_->OnStart(mojom::Identity::From(identity_), id_,
|
| + base::Bind(&Instance::OnInitializeResponse,
|
| + base::Unretained(this)));
|
| }
|
|
|
| void StartWithClientProcessConnection(
|
| mojom::ClientProcessConnectionPtr client_process_connection) {
|
| - mojom::ShellClientPtr client;
|
| - client.Bind(mojom::ShellClientPtrInfo(
|
| - std::move(client_process_connection->shell_client), 0));
|
| + mojom::ServicePtr client;
|
| + client.Bind(mojom::ServicePtrInfo(
|
| + std::move(client_process_connection->service), 0));
|
| pid_receiver_binding_.Bind(
|
| std::move(client_process_connection->pid_receiver_request));
|
| StartWithClient(std::move(client));
|
| }
|
|
|
| void StartWithFilePath(const base::FilePath& path) {
|
| - CHECK(!shell_client_);
|
| + CHECK(!service_);
|
| runner_ = shell_->native_runner_factory_->Create(path);
|
| bool start_sandboxed = false;
|
| - mojom::ShellClientPtr client = runner_->Start(
|
| + mojom::ServicePtr client = runner_->Start(
|
| path, identity_, start_sandboxed,
|
| base::Bind(&Instance::PIDAvailable, weak_factory_.GetWeakPtr()),
|
| base::Bind(&Instance::OnRunnerCompleted, weak_factory_.GetWeakPtr()));
|
| @@ -245,8 +245,8 @@ class Shell::Instance : public mojom::Connector,
|
| const Identity& identity() const { return identity_; }
|
| uint32_t id() const { return id_; }
|
|
|
| - // ShellClient:
|
| - bool AcceptConnection(Connection* connection) override {
|
| + // Service:
|
| + bool OnConnect(Connection* connection) override {
|
| connection->AddInterface<mojom::Shell>(this);
|
| return true;
|
| }
|
| @@ -335,9 +335,9 @@ class Shell::Instance : public mojom::Connector,
|
| return false;
|
| }
|
|
|
| - if (!(*client_process_connection)->shell_client.is_valid() ||
|
| + if (!(*client_process_connection)->service.is_valid() ||
|
| !(*client_process_connection)->pid_receiver_request.is_valid()) {
|
| - LOG(ERROR) << "Must supply both shell_client AND "
|
| + LOG(ERROR) << "Must supply both service AND "
|
| << "pid_receiver_request when sending "
|
| << "client_process_connection.";
|
| callback.Run(mojom::ConnectResult::INVALID_ARGUMENT,
|
| @@ -413,15 +413,15 @@ class Shell::Instance : public mojom::Connector,
|
| shell_->NotifyPIDAvailable(id_, pid_);
|
| }
|
|
|
| - void OnShellClientLost(base::WeakPtr<shell::Shell> shell) {
|
| - shell_client_.reset();
|
| + void OnServiceLost(base::WeakPtr<shell::Shell> shell) {
|
| + service_.reset();
|
| OnConnectionLost(shell);
|
| }
|
|
|
| void OnConnectionLost(base::WeakPtr<shell::Shell> shell) {
|
| - // Any time a Connector is lost or we lose the ShellClient connection, it
|
| + // Any time a Connector is lost or we lose the Service connection, it
|
| // may have been the last pipe using this Instance. If so, clean up.
|
| - if (shell && connectors_.empty() && !shell_client_) {
|
| + if (shell && connectors_.empty() && !service_) {
|
| // Deletes |this|.
|
| shell->OnInstanceError(this);
|
| }
|
| @@ -454,7 +454,7 @@ class Shell::Instance : public mojom::Connector,
|
| const CapabilitySpec capability_spec_;
|
| const bool allow_any_application_;
|
| std::unique_ptr<NativeRunner> runner_;
|
| - mojom::ShellClientPtr shell_client_;
|
| + mojom::ServicePtr service_;
|
| mojo::Binding<mojom::PIDReceiver> pid_receiver_binding_;
|
| mojo::BindingSet<mojom::Connector> connectors_;
|
| mojo::BindingSet<mojom::Shell> shell_bindings_;
|
| @@ -482,11 +482,11 @@ bool Shell::TestAPI::HasRunningInstanceForName(const std::string& name) const {
|
| // Shell, public:
|
|
|
| Shell::Shell(std::unique_ptr<NativeRunnerFactory> native_runner_factory,
|
| - mojom::ShellClientPtr catalog)
|
| + mojom::ServicePtr catalog)
|
| : native_runner_factory_(std::move(native_runner_factory)),
|
| weak_ptr_factory_(this) {
|
| - mojom::ShellClientPtr client;
|
| - mojom::ShellClientRequest request = mojo::GetProxy(&client);
|
| + mojom::ServicePtr client;
|
| + mojom::ServiceRequest request = mojo::GetProxy(&client);
|
| Instance* instance = CreateInstance(Identity(), CreateShellIdentity(),
|
| GetPermissiveCapabilities());
|
| instance->StartWithClient(std::move(client));
|
| @@ -514,7 +514,7 @@ void Shell::Connect(std::unique_ptr<ConnectParams> params) {
|
| Connect(std::move(params), nullptr);
|
| }
|
|
|
| -mojom::ShellClientRequest Shell::InitInstanceForEmbedder(
|
| +mojom::ServiceRequest Shell::InitInstanceForEmbedder(
|
| const std::string& name) {
|
| std::unique_ptr<ConnectParams> params(new ConnectParams);
|
|
|
| @@ -522,17 +522,17 @@ mojom::ShellClientRequest Shell::InitInstanceForEmbedder(
|
| params->set_source(embedder_identity);
|
| params->set_target(embedder_identity);
|
|
|
| - mojom::ShellClientPtr client;
|
| - mojom::ShellClientRequest request = mojo::GetProxy(&client);
|
| + mojom::ServicePtr client;
|
| + mojom::ServiceRequest request = mojo::GetProxy(&client);
|
| Connect(std::move(params), std::move(client));
|
|
|
| return request;
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| -// Shell, ShellClient implementation:
|
| +// Shell, Service implementation:
|
|
|
| -bool Shell::AcceptConnection(Connection* connection) {
|
| +bool Shell::OnConnect(Connection* connection) {
|
| // The only interface we expose is mojom::Shell, and access to this interface
|
| // is brokered by a policy specific to each caller, managed by the caller's
|
| // instance. Here we look to see who's calling, and forward to the caller's
|
| @@ -545,13 +545,13 @@ bool Shell::AcceptConnection(Connection* connection) {
|
| }
|
| }
|
| DCHECK(instance);
|
| - return instance->AcceptConnection(connection);
|
| + return instance->OnConnect(connection);
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // Shell, private:
|
|
|
| -void Shell::InitCatalog(mojom::ShellClientPtr catalog) {
|
| +void Shell::InitCatalog(mojom::ServicePtr catalog) {
|
| // TODO(beng): It'd be great to build this from the manifest, however there's
|
| // a bit of a chicken-and-egg problem.
|
| CapabilitySpec spec;
|
| @@ -599,7 +599,7 @@ void Shell::OnInstanceError(Instance* instance) {
|
| }
|
|
|
| void Shell::Connect(std::unique_ptr<ConnectParams> params,
|
| - mojom::ShellClientPtr client) {
|
| + mojom::ServicePtr client) {
|
| TRACE_EVENT_INSTANT1("mojo_shell", "Shell::Connect",
|
| TRACE_EVENT_SCOPE_THREAD, "original_name",
|
| params->target().name());
|
| @@ -682,41 +682,40 @@ void Shell::AddInstanceListener(mojom::InstanceListenerPtr listener) {
|
| instance_listeners_.AddPtr(std::move(listener));
|
| }
|
|
|
| -void Shell::CreateShellClientWithFactory(const Identity& shell_client_factory,
|
| - const std::string& name,
|
| - mojom::ShellClientRequest request) {
|
| - mojom::ShellClientFactory* factory =
|
| - GetShellClientFactory(shell_client_factory);
|
| - factory->CreateShellClient(std::move(request), name);
|
| +void Shell::CreateServiceWithFactory(const Identity& service_factory,
|
| + const std::string& name,
|
| + mojom::ServiceRequest request) {
|
| + mojom::ServiceFactory* factory = GetServiceFactory(service_factory);
|
| + factory->CreateService(std::move(request), name);
|
| }
|
|
|
| -mojom::ShellClientFactory* Shell::GetShellClientFactory(
|
| - const Identity& shell_client_factory_identity) {
|
| - auto it = shell_client_factories_.find(shell_client_factory_identity);
|
| - if (it != shell_client_factories_.end())
|
| +mojom::ServiceFactory* Shell::GetServiceFactory(
|
| + const Identity& service_factory_identity) {
|
| + auto it = service_factories_.find(service_factory_identity);
|
| + if (it != service_factories_.end())
|
| return it->second.get();
|
|
|
| Identity source_identity(kShellName, mojom::kInheritUserID);
|
| - mojom::ShellClientFactoryPtr factory;
|
| - ConnectToInterface(this, source_identity, shell_client_factory_identity,
|
| + mojom::ServiceFactoryPtr factory;
|
| + ConnectToInterface(this, source_identity, service_factory_identity,
|
| &factory);
|
| - mojom::ShellClientFactory* factory_interface = factory.get();
|
| + mojom::ServiceFactory* factory_interface = factory.get();
|
| factory.set_connection_error_handler(base::Bind(
|
| - &shell::Shell::OnShellClientFactoryLost, weak_ptr_factory_.GetWeakPtr(),
|
| - shell_client_factory_identity));
|
| - shell_client_factories_[shell_client_factory_identity] = std::move(factory);
|
| + &shell::Shell::OnServiceFactoryLost, weak_ptr_factory_.GetWeakPtr(),
|
| + service_factory_identity));
|
| + service_factories_[service_factory_identity] = std::move(factory);
|
| return factory_interface;
|
| }
|
|
|
| -void Shell::OnShellClientFactoryLost(const Identity& which) {
|
| +void Shell::OnServiceFactoryLost(const Identity& which) {
|
| // Remove the mapping.
|
| - auto it = shell_client_factories_.find(which);
|
| - DCHECK(it != shell_client_factories_.end());
|
| - shell_client_factories_.erase(it);
|
| + auto it = service_factories_.find(which);
|
| + DCHECK(it != service_factories_.end());
|
| + service_factories_.erase(it);
|
| }
|
|
|
| void Shell::OnGotResolvedName(std::unique_ptr<ConnectParams> params,
|
| - mojom::ShellClientPtr client,
|
| + mojom::ServicePtr client,
|
| mojom::ResolveResultPtr result) {
|
| std::string instance_name = params->target().instance();
|
| if (instance_name == GetNamePath(params->target().name()) &&
|
| @@ -760,33 +759,33 @@ void Shell::OnGotResolvedName(std::unique_ptr<ConnectParams> params,
|
| target, capabilities);
|
|
|
| // Below are various paths through which a new Instance can be bound to a
|
| - // ShellClient proxy.
|
| + // Service proxy.
|
| if (client.is_bound()) {
|
| - // If a ShellClientPtr was provided, there's no more work to do: someone
|
| - // is already holding a corresponding ShellClientRequest.
|
| + // If a ServicePtr was provided, there's no more work to do: someone
|
| + // is already holding a corresponding ServiceRequest.
|
| instance->StartWithClient(std::move(client));
|
| } else if (!client_process_connection.is_null()) {
|
| // Likewise if a ClientProcessConnection was given via Connect(), it
|
| - // provides the ShellClient proxy to use.
|
| + // provides the Service proxy to use.
|
| instance->StartWithClientProcessConnection(
|
| std::move(client_process_connection));
|
| } else {
|
| - // Otherwise we create a new ShellClient pipe.
|
| - mojom::ShellClientRequest request = GetProxy(&client);
|
| + // Otherwise we create a new Service pipe.
|
| + mojom::ServiceRequest request = GetProxy(&client);
|
| CHECK(!result->package_path.empty() && !result->capabilities.is_null());
|
|
|
| if (target.name() != result->resolved_name) {
|
| instance->StartWithClient(std::move(client));
|
| Identity factory(result->resolved_name, target.user_id(),
|
| instance_name);
|
| - CreateShellClientWithFactory(factory, target.name(),
|
| + CreateServiceWithFactory(factory, target.name(),
|
| std::move(request));
|
| } else {
|
| instance->StartWithFilePath(result->package_path);
|
| }
|
| }
|
|
|
| - // Now that the instance has a ShellClient, we can connect to it.
|
| + // Now that the instance has a Service, we can connect to it.
|
| bool connected = instance->ConnectToClient(¶ms);
|
| DCHECK(connected);
|
| }
|
|
|