diff options
author | ben <ben@chromium.org> | 2016-03-16 11:02:58 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-16 18:04:46 +0000 |
commit | f1e8fe46d99e15abe6f2b3270fe65ade9269997d (patch) | |
tree | 060cf7eb56defc03a0c99881b5a7c9d5be3dff1e /mash/init | |
parent | 8c17f62a8425b4e4547255495073e673312a86b6 (diff) | |
download | chromium_src-f1e8fe46d99e15abe6f2b3270fe65ade9269997d.zip chromium_src-f1e8fe46d99e15abe6f2b3270fe65ade9269997d.tar.gz chromium_src-f1e8fe46d99e15abe6f2b3270fe65ade9269997d.tar.bz2 |
Restructure login
BUG=
Review URL: https://codereview.chromium.org/1801133002
Cr-Commit-Position: refs/heads/master@{#381494}
Diffstat (limited to 'mash/init')
-rw-r--r-- | mash/init/BUILD.gn | 1 | ||||
-rw-r--r-- | mash/init/init.cc | 75 | ||||
-rw-r--r-- | mash/init/init.h | 35 | ||||
-rw-r--r-- | mash/init/public/interfaces/BUILD.gn | 2 | ||||
-rw-r--r-- | mash/init/public/interfaces/init.mojom (renamed from mash/init/public/interfaces/login.mojom) | 9 |
5 files changed, 39 insertions, 83 deletions
diff --git a/mash/init/BUILD.gn b/mash/init/BUILD.gn index 1d79330..900a31e 100644 --- a/mash/init/BUILD.gn +++ b/mash/init/BUILD.gn @@ -21,6 +21,7 @@ mojo_native_application("init") { "//components/mus/public/cpp", "//components/mus/public/interfaces", "//mash/init/public/interfaces", + "//mash/login/public/interfaces", "//mojo/public/cpp/bindings", "//mojo/services/tracing/public/cpp", "//mojo/shell/public/cpp", diff --git a/mash/init/init.cc b/mash/init/init.cc index 20c88be..ffe16a6 100644 --- a/mash/init/init.cc +++ b/mash/init/init.cc @@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/command_line.h" #include "base/guid.h" +#include "mash/login/public/interfaces/login.mojom.h" #include "mojo/shell/public/cpp/connection.h" #include "mojo/shell/public/cpp/connector.h" @@ -20,72 +21,38 @@ void Init::Initialize(mojo::Connector* connector, const mojo::Identity& identity, uint32_t id) { connector_ = connector; - mus_connection_ = connector_->Connect("mojo:mus"); - mus_connection_->GetInterface(&user_access_manager_); - user_access_manager_->SetActiveUser(login_user_id_); - StartWindowManager(); + connector_->Connect("mojo:mus"); StartLogin(); } -bool Init::AcceptConnection(mojo::Connection* connection) { - connection->AddInterface<mojom::Login>(this); - return true; +void Init::StartService(const mojo::String& name, + const mojo::String& user_id) { + DCHECK(user_services_.find(user_id) == user_services_.end()); + mojo::Connector::ConnectParams params(mojo::Identity(name, user_id)); + user_services_[user_id] = connector_->Connect(¶ms); } -void Init::LoginAs(const mojo::String& user_id) { - user_access_manager_->SetActiveUser(user_id); - connections_["mojo:mash_login"].reset(); - connections_["mojo:desktop_wm"].reset(); - mojo::Connector::ConnectParams params( - mojo::Identity("mojo:mash_shell", user_id)); - connector_->Connect(¶ms); -} - -void Init::Logout() { - // TODO(beng): need to kill the user session. - user_access_manager_->SetActiveUser(login_user_id_); - StartWindowManager(); - StartLogin(); -} - -void Init::SwitchUser() { - // This doesn't kill the user session, merely starts the login UI. - user_access_manager_->SetActiveUser(login_user_id_); - StartWindowManager(); - StartLogin(); -} - -void Init::Create(mojo::Connection* connection, mojom::LoginRequest request) { - login_bindings_.AddBinding(this, std::move(request)); +void Init::StopServicesForUser(const mojo::String& user_id) { + // TODO(beng): Make shell cascade shutdown of services. + auto it = user_services_.find(user_id); + if (it != user_services_.end()) + user_services_.erase(it); } -void Init::StartWindowManager() { - mojo::Connector::ConnectParams params( - mojo::Identity("mojo:desktop_wm", login_user_id_)); - StartRestartableService( - ¶ms, - base::Bind(&Init::StartWindowManager, base::Unretained(this))); +void Init::Create(mojo::Connection* connection, mojom::InitRequest request) { + init_bindings_.AddBinding(this, std::move(request)); } void Init::StartLogin() { mojo::Connector::ConnectParams params( - mojo::Identity("mojo:mash_login", login_user_id_)); - StartRestartableService( - ¶ms, + mojo::Identity("mojo:login", login_user_id_)); + login_connection_ = connector_->Connect(¶ms); + login_connection_->AddInterface<mojom::Init>(this); + login_connection_->SetConnectionLostClosure( base::Bind(&Init::StartLogin, base::Unretained(this))); -} - -void Init::StartRestartableService(mojo::Connector::ConnectParams* params, - const base::Closure& restart_callback) { - // TODO(beng): This would be the place to insert logic that counted restarts - // to avoid infinite crash-restart loops. - scoped_ptr<mojo::Connection> connection = connector_->Connect(params); - // Note: |connection| may be null if we've lost our connection to the shell. - if (connection) { - connection->SetConnectionLostClosure(restart_callback); - connection->AddInterface<mojom::Login>(this); - connections_[params->target().name()] = std::move(connection); - } + mash::login::mojom::LoginPtr login; + login_connection_->GetInterface(&login); + login->ShowLoginUI(); } } // namespace init diff --git a/mash/init/init.h b/mash/init/init.h index 7ca8f81..b650f50 100644 --- a/mash/init/init.h +++ b/mash/init/init.h @@ -10,8 +10,7 @@ #include "base/callback.h" #include "base/macros.h" #include "base/memory/scoped_ptr.h" -#include "components/mus/public/interfaces/user_access_manager.mojom.h" -#include "mash/init/public/interfaces/login.mojom.h" +#include "mash/init/public/interfaces/init.mojom.h" #include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/shell/public/cpp/connector.h" #include "mojo/shell/public/cpp/shell_client.h" @@ -21,11 +20,11 @@ class Connection; } namespace mash { -namespace init{ +namespace init { class Init : public mojo::ShellClient, - public mojom::Login, - public mojo::InterfaceFactory<mojom::Login> { + public mojo::InterfaceFactory<mojom::Init>, + public mojom::Init { public: Init(); ~Init() override; @@ -34,30 +33,22 @@ class Init : public mojo::ShellClient, // mojo::ShellClient: void Initialize(mojo::Connector* connector, const mojo::Identity& identity, uint32_t id) override; - bool AcceptConnection(mojo::Connection* connection) override; - - // mojom::Login: - void LoginAs(const mojo::String& user_id) override; - void Logout() override; - void SwitchUser() override; // mojo::InterfaceFactory<mojom::Login>: void Create(mojo::Connection* connection, - mojom::LoginRequest request) override; + mojom::InitRequest request) override; - void StartWindowManager(); - void StartLogin(); + // mojom::Init: + void StartService(const mojo::String& name, + const mojo::String& user_id) override; + void StopServicesForUser(const mojo::String& user_id) override; - // Starts the application at |url|, running |restart_callback| if the - // connection to the application is closed. - void StartRestartableService(mojo::Connector::ConnectParams* params, - const base::Closure& restart_callback); + void StartLogin(); mojo::Connector* connector_; - std::map<std::string, scoped_ptr<mojo::Connection>> connections_; - mojo::BindingSet<mojom::Login> login_bindings_; - scoped_ptr<mojo::Connection> mus_connection_; - mus::mojom::UserAccessManagerPtr user_access_manager_; + scoped_ptr<mojo::Connection> login_connection_; + mojo::BindingSet<mojom::Init> init_bindings_; + std::map<std::string, scoped_ptr<mojo::Connection>> user_services_; const std::string login_user_id_; DISALLOW_COPY_AND_ASSIGN(Init); diff --git a/mash/init/public/interfaces/BUILD.gn b/mash/init/public/interfaces/BUILD.gn index 0ea747b..0fde619 100644 --- a/mash/init/public/interfaces/BUILD.gn +++ b/mash/init/public/interfaces/BUILD.gn @@ -6,6 +6,6 @@ import("//mojo/public/tools/bindings/mojom.gni") mojom("interfaces") { sources = [ - "login.mojom", + "init.mojom", ] } diff --git a/mash/init/public/interfaces/login.mojom b/mash/init/public/interfaces/init.mojom index 43661b4..120d4b8 100644 --- a/mash/init/public/interfaces/login.mojom +++ b/mash/init/public/interfaces/init.mojom @@ -4,10 +4,7 @@ module mash.init.mojom; -interface Login { - // TODO(beng): this should be guarded by a capability class. - LoginAs(string user_id); - - Logout(); - SwitchUser(); +interface Init { + StartService(string name, string user_id); + StopServicesForUser(string user_id); }; |