| Index: chromeos/dbus/session_manager_client.cc
|
| diff --git a/chromeos/dbus/session_manager_client.cc b/chromeos/dbus/session_manager_client.cc
|
| index df81dccde03e54b2e9cdfc07a55ee106b4d14cdf..234f1e909ade1347d13861cdfdcfd8576f4ba969 100644
|
| --- a/chromeos/dbus/session_manager_client.cc
|
| +++ b/chromeos/dbus/session_manager_client.cc
|
| @@ -36,6 +36,10 @@ namespace chromeos {
|
|
|
| namespace {
|
|
|
| +// TODO(hidehiko): Share the constant between Chrome and ChromeOS.
|
| +constexpr char kArcLowDiskError[] =
|
| + "org.chromium.SessionManagerInterface.LowFreeDisk";
|
| +
|
| // Returns a location for |file| that is specific to the given |cryptohome_id|.
|
| // These paths will be relative to DIR_USER_POLICY_KEYS, and can be used only
|
| // to store stub files.
|
| @@ -310,18 +314,19 @@ class SessionManagerClientImpl : public SessionManagerClient {
|
|
|
| void StartArcInstance(const cryptohome::Identification& cryptohome_id,
|
| bool disable_boot_completed_broadcast,
|
| - const ArcCallback& callback) override {
|
| + const StartArcInstanceCallback& callback) override {
|
| dbus::MethodCall method_call(
|
| login_manager::kSessionManagerInterface,
|
| login_manager::kSessionManagerStartArcInstance);
|
| dbus::MessageWriter writer(&method_call);
|
| writer.AppendString(cryptohome_id.id());
|
| writer.AppendBool(disable_boot_completed_broadcast);
|
| - session_manager_proxy_->CallMethod(
|
| + session_manager_proxy_->CallMethodWithErrorCallback(
|
| &method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
|
| - base::Bind(&SessionManagerClientImpl::OnArcMethod,
|
| - weak_ptr_factory_.GetWeakPtr(),
|
| - login_manager::kSessionManagerStartArcInstance, callback));
|
| + base::Bind(&SessionManagerClientImpl::OnStartArcInstanceSucceeded,
|
| + weak_ptr_factory_.GetWeakPtr(), callback),
|
| + base::Bind(&SessionManagerClientImpl::OnStartArcInstanceFailed,
|
| + weak_ptr_factory_.GetWeakPtr(), callback));
|
| }
|
|
|
| void StopArcInstance(const ArcCallback& callback) override {
|
| @@ -722,6 +727,22 @@ class SessionManagerClientImpl : public SessionManagerClient {
|
| callback.Run(success);
|
| }
|
|
|
| + void OnStartArcInstanceSucceeded(const StartArcInstanceCallback& callback,
|
| + dbus::Response* response) {
|
| + if (!callback.is_null())
|
| + callback.Run(StartArcInstanceResult::SUCCESS);
|
| + }
|
| +
|
| + void OnStartArcInstanceFailed(const StartArcInstanceCallback& callback,
|
| + dbus::ErrorResponse* response) {
|
| + LOG(ERROR) << "Failed to call StartArcInstance: "
|
| + << (response ? response->ToString() : "(null)");
|
| + if (!callback.is_null())
|
| + callback.Run(response && response->GetErrorName() == kArcLowDiskError
|
| + ? StartArcInstanceResult::LOW_FREE_DISK_SPACE
|
| + : StartArcInstanceResult::UNKNOWN_ERROR);
|
| + }
|
| +
|
| dbus::ObjectProxy* session_manager_proxy_;
|
| std::unique_ptr<BlockingMethodCaller> blocking_method_caller_;
|
| base::ObserverList<Observer> observers_;
|
| @@ -898,8 +919,8 @@ class SessionManagerClientStubImpl : public SessionManagerClient {
|
|
|
| void StartArcInstance(const cryptohome::Identification& cryptohome_id,
|
| bool disable_boot_completed_broadcast,
|
| - const ArcCallback& callback) override {
|
| - callback.Run(false);
|
| + const StartArcInstanceCallback& callback) override {
|
| + callback.Run(StartArcInstanceResult::UNKNOWN_ERROR);
|
| }
|
|
|
| void PrioritizeArcInstance(const ArcCallback& callback) override {
|
|
|