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(
void DeviceSettingsTestHelper::CheckArcAvailability(
const ArcCallback& callback) {}
void DeviceSettingsTestHelper::StartArcInstance(const std::string& socket_path,
const ArcCallback& callback) {}
void DeviceSettingsTestHelper::StartArcInstance(
const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) {}
void DeviceSettingsTestHelper::StopArcInstance(const ArcCallback& callback) {}
......
......@@ -120,7 +120,7 @@ class DeviceSettingsTestHelper : public SessionManagerClient {
void GetServerBackedStateKeys(const StateKeysCallback& 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;
void StopArcInstance(const ArcCallback& callback) override;
void GetArcStartTime(const GetArcStartTimeCallback& callback) override;
......
......@@ -157,8 +157,9 @@ void FakeSessionManagerClient::CheckArcAvailability(
FROM_HERE, base::Bind(callback, arc_available_));
}
void FakeSessionManagerClient::StartArcInstance(const std::string& socket_path,
const ArcCallback& callback) {
void FakeSessionManagerClient::StartArcInstance(
const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) {
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::Bind(callback, arc_available_));
}
......
......@@ -64,7 +64,7 @@ class FakeSessionManagerClient : public SessionManagerClient {
void GetServerBackedStateKeys(const StateKeysCallback& 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;
void StopArcInstance(const ArcCallback& callback) override;
void GetArcStartTime(const GetArcStartTimeCallback& callback) override;
......
......@@ -60,7 +60,8 @@ class MockSessionManagerClient : public SessionManagerClient {
const std::vector<std::string>&));
MOCK_METHOD1(GetServerBackedStateKeys, void(const StateKeysCallback&));
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(GetArcStartTime, void(const GetArcStartTimeCallback&));
};
......
......@@ -345,13 +345,13 @@ class SessionManagerClientImpl : public SessionManagerClient {
weak_ptr_factory_.GetWeakPtr(), callback));
}
void StartArcInstance(const std::string& socket_path,
void StartArcInstance(const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) override {
dbus::MethodCall method_call(
login_manager::kSessionManagerInterface,
login_manager::kSessionManagerStartArcInstance);
dbus::MessageWriter writer(&method_call);
writer.AppendString(socket_path);
writer.AppendString(cryptohome_id.id());
session_manager_proxy_->CallMethod(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::Bind(&SessionManagerClientImpl::OnArcMethod,
......@@ -905,7 +905,7 @@ class SessionManagerClientStubImpl : public SessionManagerClient {
callback.Run(false);
}
void StartArcInstance(const std::string& socket_path,
void StartArcInstance(const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) override {
callback.Run(false);
}
......
......@@ -213,10 +213,10 @@ class CHROMEOS_EXPORT SessionManagerClient : public DBusClient {
// The result of the operation is reported through |callback|.
virtual void CheckArcAvailability(const ArcCallback& callback) = 0;
// Asynchronously starts the ARC instance using |socket_path| as the IPC
// socket for communication with the instance. Upon completion, invokes
// |callback| with the result.
virtual void StartArcInstance(const std::string& socket_path,
// Asynchronously starts the ARC instance for the user whose cryptohome is
// located by |cryptohome_id|. Upon completion, invokes |callback| with
// the result.
virtual void StartArcInstance(const cryptohome::Identification& cryptohome_id,
const ArcCallback& callback) = 0;
// Asynchronously stops the ARC instance. Upon completion, invokes
......
......@@ -69,6 +69,7 @@ static_library("arc") {
"//components/onc",
"//components/prefs",
"//components/signin/core/account_id",
"//components/user_manager",
"//device/bluetooth",
"//google_apis",
"//ipc:ipc",
......
include_rules = [
"+chromeos/arc",
"+chromeos/chromeos_switches.h",
"+chromeos/cryptohome",
"+chromeos/dbus",
"+components/exo",
"+components/prefs",
"+components/signin/core/account_id",
"+components/user_manager",
"+ipc",
"+mojo",
"+third_party/re2",
......
......@@ -20,9 +20,11 @@
#include "base/threading/thread_checker.h"
#include "base/threading/thread_task_runner_handle.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_thread_manager.h"
#include "chromeos/dbus/session_manager_client.h"
#include "components/user_manager/user_manager.h"
#include "ipc/unix_domain_socket_util.h"
#include "mojo/edk/embedder/embedder.h"
#include "mojo/edk/embedder/platform_channel_pair.h"
......@@ -209,10 +211,16 @@ void ArcBridgeBootstrapImpl::OnSocketCreated(base::ScopedFD socket_fd) {
Stop();
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::DBusThreadManager::Get()->GetSessionManagerClient();
session_manager_client->StartArcInstance(
kArcBridgeSocketPath,
cryptohome_id,
base::Bind(&ArcBridgeBootstrapImpl::OnInstanceStarted,
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