// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/sync/test/fake_sync_explicit_passphrase_client_ash.h"
#include <utility>
#include "chromeos/crosapi/mojom/account_manager.mojom.h"
#include "chromeos/crosapi/mojom/sync.mojom.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
namespace syncer {
FakeSyncExplicitPassphraseClientAsh::FakeSyncExplicitPassphraseClientAsh() =
default;
FakeSyncExplicitPassphraseClientAsh::~FakeSyncExplicitPassphraseClientAsh() =
default;
void FakeSyncExplicitPassphraseClientAsh::AddObserver(
mojo::PendingRemote<crosapi::mojom::SyncExplicitPassphraseClientObserver>
observer) {
observers_.Add(std::move(observer));
}
void FakeSyncExplicitPassphraseClientAsh::GetDecryptionNigoriKey(
crosapi::mojom::AccountKeyPtr account_key,
GetDecryptionNigoriKeyCallback callback) {
get_decryption_nigori_key_called_ = true;
if (!expected_account_key_ || !expected_account_key_.Equals(account_key)) {
std::move(callback).Run(nullptr);
return;
}
// `stored_nigori_key_` can be null, but this matches the expected behavior of
// this fake.
std::move(callback).Run(stored_nigori_key_.Clone());
}
void FakeSyncExplicitPassphraseClientAsh::SetDecryptionNigoriKey(
crosapi::mojom::AccountKeyPtr account_key,
crosapi::mojom::NigoriKeyPtr nigori_key) {
set_decryption_nigori_key_called_ = true;
if (!expected_account_key_ || !expected_account_key_.Equals(account_key)) {
return;
}
if (!expected_nigori_key_ || !expected_nigori_key_.Equals(nigori_key)) {
return;
}
stored_nigori_key_ = std::move(nigori_key);
expected_nigori_key_ = nullptr;
std::move(passphrase_provided_callback_).Run();
}
void FakeSyncExplicitPassphraseClientAsh::BindReceiver(
mojo::PendingReceiver<crosapi::mojom::SyncExplicitPassphraseClient>
receiver) {
receivers_.Add(this, std::move(receiver));
}
void FakeSyncExplicitPassphraseClientAsh::MimicPassphraseAvailable(
crosapi::mojom::NigoriKeyPtr nigori_key) {
stored_nigori_key_ = std::move(nigori_key);
for (auto& observer : observers_) {
observer->OnPassphraseAvailable();
}
observers_.FlushForTesting();
}
void FakeSyncExplicitPassphraseClientAsh::MimicPassphraseRequired(
crosapi::mojom::NigoriKeyPtr expected_nigori_key,
base::OnceClosure passphrase_provided_callback) {
expected_nigori_key_ = std::move(expected_nigori_key);
passphrase_provided_callback_ = std::move(passphrase_provided_callback);
for (auto& observer : observers_) {
observer->OnPassphraseRequired();
}
observers_.FlushForTesting();
}
void FakeSyncExplicitPassphraseClientAsh::SetExpectedAccountKey(
crosapi::mojom::AccountKeyPtr account_key) {
expected_account_key_ = std::move(account_key);
}
bool FakeSyncExplicitPassphraseClientAsh::IsPassphraseRequired() const {
return !expected_nigori_key_.is_null();
}
bool FakeSyncExplicitPassphraseClientAsh::IsGetDecryptionNigoriKeyCalled()
const {
return get_decryption_nigori_key_called_;
}
bool FakeSyncExplicitPassphraseClientAsh::IsSetDecryptionNigoriKeyCalled()
const {
return set_decryption_nigori_key_called_;
}
} // namespace syncer