Commit 2a81c205 authored by Zakhar Voit's avatar Zakhar Voit Committed by Commit Bot

Update SessionManagerClient with the new D-Bus methods

Add LoginScreenStorageListKeys() and LoginScreenStorageDelete() methods
to the SessionManagerClient.

Bug: 980171
Change-Id: Ib4492bc9dc9019798895b84f08d3c35c7d516994
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1753924Reviewed-by: default avatarAlexander Hendrich <hendrich@chromium.org>
Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Commit-Queue: Zakhar Voit <voit@google.com>
Cr-Commit-Position: refs/heads/master@{#694323}
parent 0fa5b3fc
...@@ -302,6 +302,17 @@ void FakeSessionManagerClient::LoginScreenStorageRetrieve( ...@@ -302,6 +302,17 @@ void FakeSessionManagerClient::LoginScreenStorageRetrieve(
base::nullopt /* error */)); base::nullopt /* error */));
} }
void FakeSessionManagerClient::LoginScreenStorageListKeys(
LoginScreenStorageListKeysCallback callback) {
base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE,
base::BindOnce(std::move(callback), std::vector<std::string>() /* keys */,
base::nullopt /* error */));
}
void FakeSessionManagerClient::LoginScreenStorageDelete(
const std::string& key) {}
void FakeSessionManagerClient::StartSession( void FakeSessionManagerClient::StartSession(
const cryptohome::AccountIdentifier& cryptohome_id) { const cryptohome::AccountIdentifier& cryptohome_id) {
DCHECK_EQ(0UL, user_sessions_.count(cryptohome_id.account_id())); DCHECK_EQ(0UL, user_sessions_.count(cryptohome_id.account_id()));
......
...@@ -65,10 +65,12 @@ class COMPONENT_EXPORT(SESSION_MANAGER) FakeSessionManagerClient ...@@ -65,10 +65,12 @@ class COMPONENT_EXPORT(SESSION_MANAGER) FakeSessionManagerClient
const login_manager::LoginScreenStorageMetadata& metadata, const login_manager::LoginScreenStorageMetadata& metadata,
const std::string& data, const std::string& data,
LoginScreenStorageStoreCallback callback) override; LoginScreenStorageStoreCallback callback) override;
void LoginScreenStorageRetrieve( void LoginScreenStorageRetrieve(
const std::string& key, const std::string& key,
LoginScreenStorageRetrieveCallback callback) override; LoginScreenStorageRetrieveCallback callback) override;
void LoginScreenStorageListKeys(
LoginScreenStorageListKeysCallback callback) override;
void LoginScreenStorageDelete(const std::string& key) override;
void StartSession( void StartSession(
const cryptohome::AccountIdentifier& cryptohome_id) override; const cryptohome::AccountIdentifier& cryptohome_id) override;
......
...@@ -272,6 +272,28 @@ class SessionManagerClientImpl : public SessionManagerClient { ...@@ -272,6 +272,28 @@ class SessionManagerClientImpl : public SessionManagerClient {
weak_ptr_factory_.GetWeakPtr(), std::move(callback))); weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
} }
void LoginScreenStorageListKeys(
LoginScreenStorageListKeysCallback callback) override {
dbus::MethodCall method_call(
login_manager::kSessionManagerInterface,
login_manager::kSessionManagerLoginScreenStorageListKeys);
session_manager_proxy_->CallMethod(
&method_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::BindOnce(&SessionManagerClientImpl::OnLoginScreenStorageListKeys,
weak_ptr_factory_.GetWeakPtr(), std::move(callback)));
}
void LoginScreenStorageDelete(const std::string& key) override {
dbus::MethodCall method_call(
login_manager::kSessionManagerInterface,
login_manager::kSessionManagerLoginScreenStorageDelete);
dbus::MessageWriter writer(&method_call);
writer.AppendString(key);
session_manager_proxy_->CallMethod(&method_call,
dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::DoNothing());
}
void StartSession( void StartSession(
const cryptohome::AccountIdentifier& cryptohome_id) override { const cryptohome::AccountIdentifier& cryptohome_id) override {
dbus::MethodCall method_call(login_manager::kSessionManagerInterface, dbus::MethodCall method_call(login_manager::kSessionManagerInterface,
...@@ -761,6 +783,26 @@ class SessionManagerClientImpl : public SessionManagerClient { ...@@ -761,6 +783,26 @@ class SessionManagerClientImpl : public SessionManagerClient {
base::nullopt /* error */); base::nullopt /* error */);
} }
void OnLoginScreenStorageListKeys(LoginScreenStorageListKeysCallback callback,
dbus::Response* response) {
if (!response) {
// TODO(voit): Add more granular error handling: key is not found error vs
// general 'something went wrong' error.
std::move(callback).Run({} /* keys */,
"LoginScreenStorageListKeys() D-Bus method "
"returned an empty response");
return;
}
dbus::MessageReader reader(response);
std::vector<std::string> keys;
if (!reader.PopArrayOfStrings(&keys)) {
std::string error = "Invalid response: " + response->ToString();
std::move(callback).Run({} /* keys */, error);
return;
}
std::move(callback).Run(std::move(keys), base::nullopt /* error */);
}
// Reads an array of policy data bytes data as std::string. // Reads an array of policy data bytes data as std::string.
void ExtractPolicyResponseString( void ExtractPolicyResponseString(
login_manager::PolicyAccountType account_type, login_manager::PolicyAccountType account_type,
......
...@@ -173,6 +173,21 @@ class COMPONENT_EXPORT(SESSION_MANAGER) SessionManagerClient { ...@@ -173,6 +173,21 @@ class COMPONENT_EXPORT(SESSION_MANAGER) SessionManagerClient {
const std::string& key, const std::string& key,
LoginScreenStorageRetrieveCallback callback) = 0; LoginScreenStorageRetrieveCallback callback) = 0;
// Used for |LoginScreenStorageListKeys()| method. |keys| argument is the list
// of keys currently stored in the login screen storage. In case of error,
// |keys| is empty and |error| contains the error message.
using LoginScreenStorageListKeysCallback =
base::OnceCallback<void(std::vector<std::string> /* keys */,
base::Optional<std::string> /* error */)>;
// List all keys currently stored in the login screen storage.
virtual void LoginScreenStorageListKeys(
LoginScreenStorageListKeysCallback callback) = 0;
// Delete a key and the value associated with it from the login screen
// storage.
virtual void LoginScreenStorageDelete(const std::string& key) = 0;
// Starts the session for the user. // Starts the session for the user.
virtual void StartSession( virtual void StartSession(
const cryptohome::AccountIdentifier& cryptohome_id) = 0; const cryptohome::AccountIdentifier& cryptohome_id) = 0;
......
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