Commit 73ba2139 authored by nya's avatar nya Committed by Commit bot

arc: Send cryptohome ID on starting ARC instance.

We are soon moving android-data directory from the current
fixed path (/home/chronos/user/android-data) to a path inside
mounted cryptohome (/home/root/<CryptohomeID>/android-data).
To prepare for that change, we start sending cryptohome ID in
StartArcInstance() D-Bus method.

Since we do not use |socket_path| parameter at all in
session_manager today, we will reuse it to pass the cryptohome ID.

BUG=b:26700652
TEST=trybot
TEST=ARC boots

Review-Url: https://codereview.chromium.org/2023803003
Cr-Commit-Position: refs/heads/master@{#398232}
parent a9fc453f
...@@ -183,8 +183,9 @@ void DeviceSettingsTestHelper::GetServerBackedStateKeys( ...@@ -183,8 +183,9 @@ void DeviceSettingsTestHelper::GetServerBackedStateKeys(
void DeviceSettingsTestHelper::CheckArcAvailability( void DeviceSettingsTestHelper::CheckArcAvailability(
const ArcCallback& callback) {} const ArcCallback& callback) {}
void DeviceSettingsTestHelper::StartArcInstance(const std::string& socket_path, void DeviceSettingsTestHelper::StartArcInstance(
const ArcCallback& callback) {} const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) {}
void DeviceSettingsTestHelper::StopArcInstance(const ArcCallback& callback) {} void DeviceSettingsTestHelper::StopArcInstance(const ArcCallback& callback) {}
......
...@@ -120,7 +120,7 @@ class DeviceSettingsTestHelper : public SessionManagerClient { ...@@ -120,7 +120,7 @@ class DeviceSettingsTestHelper : public SessionManagerClient {
void GetServerBackedStateKeys(const StateKeysCallback& callback) override; void GetServerBackedStateKeys(const StateKeysCallback& callback) override;
void CheckArcAvailability(const ArcCallback& callback) override; void CheckArcAvailability(const ArcCallback& callback) override;
void StartArcInstance(const std::string& socket_path, void StartArcInstance(const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) override; const ArcCallback& callback) override;
void StopArcInstance(const ArcCallback& callback) override; void StopArcInstance(const ArcCallback& callback) override;
void GetArcStartTime(const GetArcStartTimeCallback& callback) override; void GetArcStartTime(const GetArcStartTimeCallback& callback) override;
......
...@@ -157,8 +157,9 @@ void FakeSessionManagerClient::CheckArcAvailability( ...@@ -157,8 +157,9 @@ void FakeSessionManagerClient::CheckArcAvailability(
FROM_HERE, base::Bind(callback, arc_available_)); FROM_HERE, base::Bind(callback, arc_available_));
} }
void FakeSessionManagerClient::StartArcInstance(const std::string& socket_path, void FakeSessionManagerClient::StartArcInstance(
const ArcCallback& callback) { const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) {
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::Bind(callback, arc_available_)); FROM_HERE, base::Bind(callback, arc_available_));
} }
......
...@@ -64,7 +64,7 @@ class FakeSessionManagerClient : public SessionManagerClient { ...@@ -64,7 +64,7 @@ class FakeSessionManagerClient : public SessionManagerClient {
void GetServerBackedStateKeys(const StateKeysCallback& callback) override; void GetServerBackedStateKeys(const StateKeysCallback& callback) override;
void CheckArcAvailability(const ArcCallback& callback) override; void CheckArcAvailability(const ArcCallback& callback) override;
void StartArcInstance(const std::string& socket_path, void StartArcInstance(const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) override; const ArcCallback& callback) override;
void StopArcInstance(const ArcCallback& callback) override; void StopArcInstance(const ArcCallback& callback) override;
void GetArcStartTime(const GetArcStartTimeCallback& callback) override; void GetArcStartTime(const GetArcStartTimeCallback& callback) override;
......
...@@ -60,7 +60,8 @@ class MockSessionManagerClient : public SessionManagerClient { ...@@ -60,7 +60,8 @@ class MockSessionManagerClient : public SessionManagerClient {
const std::vector<std::string>&)); const std::vector<std::string>&));
MOCK_METHOD1(GetServerBackedStateKeys, void(const StateKeysCallback&)); MOCK_METHOD1(GetServerBackedStateKeys, void(const StateKeysCallback&));
MOCK_METHOD1(CheckArcAvailability, void(const ArcCallback&)); MOCK_METHOD1(CheckArcAvailability, void(const ArcCallback&));
MOCK_METHOD2(StartArcInstance, void(const std::string&, const ArcCallback&)); MOCK_METHOD2(StartArcInstance,
void(const cryptohome::Identification&, const ArcCallback&));
MOCK_METHOD1(StopArcInstance, void(const ArcCallback&)); MOCK_METHOD1(StopArcInstance, void(const ArcCallback&));
MOCK_METHOD1(GetArcStartTime, void(const GetArcStartTimeCallback&)); MOCK_METHOD1(GetArcStartTime, void(const GetArcStartTimeCallback&));
}; };
......
...@@ -345,13 +345,13 @@ class SessionManagerClientImpl : public SessionManagerClient { ...@@ -345,13 +345,13 @@ class SessionManagerClientImpl : public SessionManagerClient {
weak_ptr_factory_.GetWeakPtr(), callback)); weak_ptr_factory_.GetWeakPtr(), callback));
} }
void StartArcInstance(const std::string& socket_path, void StartArcInstance(const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) override { const ArcCallback& callback) override {
dbus::MethodCall method_call( dbus::MethodCall method_call(
login_manager::kSessionManagerInterface, login_manager::kSessionManagerInterface,
login_manager::kSessionManagerStartArcInstance); login_manager::kSessionManagerStartArcInstance);
dbus::MessageWriter writer(&method_call); dbus::MessageWriter writer(&method_call);
writer.AppendString(socket_path); writer.AppendString(cryptohome_id.id());
session_manager_proxy_->CallMethod( session_manager_proxy_->CallMethod(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::Bind(&SessionManagerClientImpl::OnArcMethod, base::Bind(&SessionManagerClientImpl::OnArcMethod,
...@@ -905,7 +905,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient { ...@@ -905,7 +905,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient {
callback.Run(false); callback.Run(false);
} }
void StartArcInstance(const std::string& socket_path, void StartArcInstance(const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) override { const ArcCallback& callback) override {
callback.Run(false); callback.Run(false);
} }
......
...@@ -213,10 +213,10 @@ class CHROMEOS_EXPORT SessionManagerClient : public DBusClient { ...@@ -213,10 +213,10 @@ class CHROMEOS_EXPORT SessionManagerClient : public DBusClient {
// The result of the operation is reported through |callback|. // The result of the operation is reported through |callback|.
virtual void CheckArcAvailability(const ArcCallback& callback) = 0; virtual void CheckArcAvailability(const ArcCallback& callback) = 0;
// Asynchronously starts the ARC instance using |socket_path| as the IPC // Asynchronously starts the ARC instance for the user whose cryptohome is
// socket for communication with the instance. Upon completion, invokes // located by |cryptohome_id|. Upon completion, invokes |callback| with
// |callback| with the result. // the result.
virtual void StartArcInstance(const std::string& socket_path, virtual void StartArcInstance(const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) = 0; const ArcCallback& callback) = 0;
// Asynchronously stops the ARC instance. Upon completion, invokes // Asynchronously stops the ARC instance. Upon completion, invokes
......
...@@ -69,6 +69,7 @@ static_library("arc") { ...@@ -69,6 +69,7 @@ static_library("arc") {
"//components/onc", "//components/onc",
"//components/prefs", "//components/prefs",
"//components/signin/core/account_id", "//components/signin/core/account_id",
"//components/user_manager",
"//device/bluetooth", "//device/bluetooth",
"//google_apis", "//google_apis",
"//ipc:ipc", "//ipc:ipc",
......
include_rules = [ include_rules = [
"+chromeos/arc", "+chromeos/arc",
"+chromeos/chromeos_switches.h", "+chromeos/chromeos_switches.h",
"+chromeos/cryptohome",
"+chromeos/dbus", "+chromeos/dbus",
"+components/exo", "+components/exo",
"+components/prefs", "+components/prefs",
"+components/signin/core/account_id", "+components/signin/core/account_id",
"+components/user_manager",
"+ipc", "+ipc",
"+mojo", "+mojo",
"+third_party/re2", "+third_party/re2",
......
...@@ -20,9 +20,11 @@ ...@@ -20,9 +20,11 @@
#include "base/threading/thread_checker.h" #include "base/threading/thread_checker.h"
#include "base/threading/thread_task_runner_handle.h" #include "base/threading/thread_task_runner_handle.h"
#include "base/threading/worker_pool.h" #include "base/threading/worker_pool.h"
#include "chromeos/cryptohome/cryptohome_parameters.h"
#include "chromeos/dbus/dbus_method_call_status.h" #include "chromeos/dbus/dbus_method_call_status.h"
#include "chromeos/dbus/dbus_thread_manager.h" #include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/session_manager_client.h" #include "chromeos/dbus/session_manager_client.h"
#include "components/user_manager/user_manager.h"
#include "ipc/unix_domain_socket_util.h" #include "ipc/unix_domain_socket_util.h"
#include "mojo/edk/embedder/embedder.h" #include "mojo/edk/embedder/embedder.h"
#include "mojo/edk/embedder/platform_channel_pair.h" #include "mojo/edk/embedder/platform_channel_pair.h"
...@@ -209,10 +211,16 @@ void ArcBridgeBootstrapImpl::OnSocketCreated(base::ScopedFD socket_fd) { ...@@ -209,10 +211,16 @@ void ArcBridgeBootstrapImpl::OnSocketCreated(base::ScopedFD socket_fd) {
Stop(); Stop();
return; return;
} }
user_manager::UserManager* user_manager = user_manager::UserManager::Get();
DCHECK(user_manager->GetPrimaryUser());
const cryptohome::Identification cryptohome_id(
user_manager->GetPrimaryUser()->GetAccountId());
chromeos::SessionManagerClient* session_manager_client = chromeos::SessionManagerClient* session_manager_client =
chromeos::DBusThreadManager::Get()->GetSessionManagerClient(); chromeos::DBusThreadManager::Get()->GetSessionManagerClient();
session_manager_client->StartArcInstance( session_manager_client->StartArcInstance(
kArcBridgeSocketPath, cryptohome_id,
base::Bind(&ArcBridgeBootstrapImpl::OnInstanceStarted, base::Bind(&ArcBridgeBootstrapImpl::OnInstanceStarted,
weak_factory_.GetWeakPtr(), base::Passed(&socket_fd))); weak_factory_.GetWeakPtr(), base::Passed(&socket_fd)));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment