blob: 478df7c33de2890e1f78d342e31f4c13f3704999 [file] [log] [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/sync/test/integration/encryption_helper.h"
#include <string>
#include <vector>
#include "base/functional/bind.h"
#include "components/sync/base/passphrase_enums.h"
#include "components/sync/driver/sync_client.h"
#include "components/sync/driver/sync_service_impl.h"
#include "testing/gtest/include/gtest/gtest.h"
ServerPassphraseTypeChecker::ServerPassphraseTypeChecker(
syncer::PassphraseType expected_passphrase_type)
: expected_passphrase_type_(expected_passphrase_type) {}
bool ServerPassphraseTypeChecker::IsExitConditionSatisfied(std::ostream* os) {
*os << "Waiting for a Nigori node with the proper passphrase type to become "
"available on the server.";
std::vector<sync_pb::SyncEntity> nigori_entities =
fake_server()->GetPermanentSyncEntitiesByModelType(syncer::NIGORI);
EXPECT_LE(nigori_entities.size(), 1U);
return !nigori_entities.empty() &&
syncer::ProtoPassphraseInt32ToEnum(
nigori_entities[0].specifics().nigori().passphrase_type()) ==
expected_passphrase_type_;
}
ServerNigoriKeyNameChecker::ServerNigoriKeyNameChecker(
const std::string& expected_key_name)
: expected_key_name_(expected_key_name) {}
bool ServerNigoriKeyNameChecker::IsExitConditionSatisfied(std::ostream* os) {
std::vector<sync_pb::SyncEntity> nigori_entities =
fake_server()->GetPermanentSyncEntitiesByModelType(syncer::NIGORI);
DCHECK_EQ(nigori_entities.size(), 1U);
const std::string given_key_name =
nigori_entities[0].specifics().nigori().encryption_keybag().key_name();
*os << "Waiting for a Nigori node with proper key bag encryption key name ("
<< expected_key_name_ << ") to become available on the server."
<< "The server key bag encryption key name is " << given_key_name << ".";
return given_key_name == expected_key_name_;
}
PassphraseRequiredChecker::PassphraseRequiredChecker(
syncer::SyncServiceImpl* service)
: SingleClientStatusChangeChecker(service) {}
bool PassphraseRequiredChecker::IsExitConditionSatisfied(std::ostream* os) {
*os << "Checking whether passhrase is required";
return service()->GetUserSettings()->IsPassphraseRequired();
}
PassphraseAcceptedChecker::PassphraseAcceptedChecker(
syncer::SyncServiceImpl* service)
: SingleClientStatusChangeChecker(service) {}
bool PassphraseAcceptedChecker::IsExitConditionSatisfied(std::ostream* os) {
*os << "Checking whether passhrase is accepted";
switch (service()->GetUserSettings()->GetPassphraseType()) {
case syncer::PassphraseType::kKeystorePassphrase:
case syncer::PassphraseType::kTrustedVaultPassphrase:
return false;
// With kImplicitPassphrase user needs to enter the passphrase even despite
// it's not treat as explicit passphrase.
case syncer::PassphraseType::kImplicitPassphrase:
case syncer::PassphraseType::kFrozenImplicitPassphrase:
case syncer::PassphraseType::kCustomPassphrase:
break;
}
return !service()->GetUserSettings()->IsPassphraseRequired();
}
TrustedVaultKeyRequiredStateChecker::TrustedVaultKeyRequiredStateChecker(
syncer::SyncServiceImpl* service,
bool desired_state)
: SingleClientStatusChangeChecker(service), desired_state_(desired_state) {}
bool TrustedVaultKeyRequiredStateChecker::IsExitConditionSatisfied(
std::ostream* os) {
*os << "Waiting until trusted vault keys are " +
std::string(desired_state_ ? "required" : "not required");
return service()
->GetUserSettings()
->IsTrustedVaultKeyRequiredForPreferredDataTypes() ==
desired_state_;
}
TrustedVaultKeysChangedStateChecker::TrustedVaultKeysChangedStateChecker(
syncer::SyncServiceImpl* service)
: service_(service), keys_changed_(false) {
service->GetSyncClientForTest()->GetTrustedVaultClient()->AddObserver(this);
}
TrustedVaultKeysChangedStateChecker::~TrustedVaultKeysChangedStateChecker() {
service_->GetSyncClientForTest()->GetTrustedVaultClient()->RemoveObserver(
this);
}
bool TrustedVaultKeysChangedStateChecker::IsExitConditionSatisfied(
std::ostream* os) {
*os << "Waiting for trusted vault keys change";
return keys_changed_;
}
void TrustedVaultKeysChangedStateChecker::OnTrustedVaultKeysChanged() {
keys_changed_ = true;
CheckExitCondition();
}
void TrustedVaultKeysChangedStateChecker::
OnTrustedVaultRecoverabilityChanged() {}