Index: mash/init/init.cc |
diff --git a/mash/init/init.cc b/mash/init/init.cc |
index ffe16a63f3389f786a6e9c623c83e91ee6eca076..aab8448ef0b486f944dd63a15e2104b3b78446a2 100644 |
--- a/mash/init/init.cc |
+++ b/mash/init/init.cc |
@@ -14,7 +14,8 @@ |
namespace mash { |
namespace init { |
-Init::Init() : connector_(nullptr), login_user_id_(base::GenerateGUID()) {} |
+Init::Init() |
+ : connector_(nullptr) {} |
Init::~Init() {} |
void Init::Initialize(mojo::Connector* connector, |
@@ -22,18 +23,23 @@ void Init::Initialize(mojo::Connector* connector, |
uint32_t id) { |
connector_ = connector; |
connector_->Connect("mojo:mus"); |
+ StartTracing(); |
+ StartResourceProvider(); |
StartLogin(); |
} |
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); |
+ if (user_services_.find(user_id) == user_services_.end()) { |
+ mojo::Connector::ConnectParams params(mojo::Identity(name, user_id)); |
+ scoped_ptr<mojo::Connection> connection = connector_->Connect(¶ms); |
+ connection->SetConnectionLostClosure( |
+ base::Bind(&Init::UserServiceQuit, base::Unretained(this), user_id)); |
+ user_services_[user_id] = std::move(connection); |
+ } |
} |
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); |
@@ -43,10 +49,22 @@ void Init::Create(mojo::Connection* connection, mojom::InitRequest request) { |
init_bindings_.AddBinding(this, std::move(request)); |
} |
+void Init::UserServiceQuit(const std::string& user_id) { |
+ auto it = user_services_.find(user_id); |
+ DCHECK(it != user_services_.end()); |
+ user_services_.erase(it); |
+} |
+ |
+void Init::StartTracing() { |
+ connector_->Connect("mojo:tracing"); |
+} |
+ |
+void Init::StartResourceProvider() { |
+ connector_->Connect("mojo:resource_provider"); |
+} |
+ |
void Init::StartLogin() { |
- mojo::Connector::ConnectParams params( |
- mojo::Identity("mojo:login", login_user_id_)); |
- login_connection_ = connector_->Connect(¶ms); |
+ login_connection_ = connector_->Connect("mojo:login"); |
login_connection_->AddInterface<mojom::Init>(this); |
login_connection_->SetConnectionLostClosure( |
base::Bind(&Init::StartLogin, base::Unretained(this))); |