blob: e5380e95a19f2faa42e925f2a838b7201e763330 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/app_restore/full_restore_info.h"
#include <map>
#include <set>
#include "components/account_id/account_id.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace full_restore {
class FakeFullRestoreInfoObserver : public FullRestoreInfo::Observer {
public:
void OnRestoreFlagChanged(const AccountId& account_id,
bool should_restore) override {
if (should_restore)
restore_flags_.insert(account_id);
else
restore_flags_.erase(account_id);
restore_flag_changed_count_[account_id]++;
}
void OnRestorePrefChanged(const AccountId& account_id,
bool could_restore) override {
if (could_restore)
restore_prefs_.insert(account_id);
else
restore_prefs_.erase(account_id);
restore_pref_changed_count_[account_id]++;
}
bool ShouldRestore(const AccountId& account_id) const {
return restore_flags_.find(account_id) != restore_flags_.end();
}
int RestoreFlagChangedCount(const AccountId& account_id) const {
auto it = restore_flag_changed_count_.find(account_id);
return it != restore_flag_changed_count_.end() ? it->second : 0;
}
bool CanPerformRestore(const AccountId& account_id) const {
return restore_prefs_.find(account_id) != restore_prefs_.end();
}
int RestorePrefChangedCount(const AccountId& account_id) const {
auto it = restore_pref_changed_count_.find(account_id);
return it != restore_pref_changed_count_.end() ? it->second : 0;
}
private:
std::set<AccountId> restore_flags_;
std::set<AccountId> restore_prefs_;
std::map<AccountId, int> restore_flag_changed_count_;
std::map<AccountId, int> restore_pref_changed_count_;
};
using FullRestoreInfoTest = testing::Test;
// Test the RestoreFlagChanged callback when the restore flag is reset.
TEST_F(FullRestoreInfoTest, RestoreFlag) {
AccountId account_id1 = AccountId::FromUserEmail("aaa@gmail.com");
AccountId account_id2 = AccountId::FromUserEmail("bbb@gmail.com");
FullRestoreInfo::GetInstance()->SetRestoreFlag(account_id1, true);
FakeFullRestoreInfoObserver observer;
FullRestoreInfo::GetInstance()->AddObserver(&observer);
// Not change the restore flag.
FullRestoreInfo::GetInstance()->SetRestoreFlag(account_id1, true);
FullRestoreInfo::GetInstance()->SetRestoreFlag(account_id2, false);
EXPECT_EQ(0, observer.RestoreFlagChangedCount(account_id1));
EXPECT_EQ(0, observer.RestoreFlagChangedCount(account_id2));
EXPECT_TRUE(FullRestoreInfo::GetInstance()->ShouldRestore(account_id1));
EXPECT_FALSE(FullRestoreInfo::GetInstance()->ShouldRestore(account_id2));
// Change the restore flag.
FullRestoreInfo::GetInstance()->SetRestoreFlag(account_id1, false);
FullRestoreInfo::GetInstance()->SetRestoreFlag(account_id2, true);
EXPECT_EQ(1, observer.RestoreFlagChangedCount(account_id1));
EXPECT_EQ(1, observer.RestoreFlagChangedCount(account_id2));
EXPECT_FALSE(observer.ShouldRestore(account_id1));
EXPECT_TRUE(observer.ShouldRestore(account_id2));
EXPECT_FALSE(FullRestoreInfo::GetInstance()->ShouldRestore(account_id1));
EXPECT_TRUE(FullRestoreInfo::GetInstance()->ShouldRestore(account_id2));
FullRestoreInfo::GetInstance()->RemoveObserver(&observer);
}
// Test the OnRestorePrefChanged callback when the restore pref is reset.
TEST_F(FullRestoreInfoTest, RestorePref) {
AccountId account_id1 = AccountId::FromUserEmail("aaa@gmail.com");
AccountId account_id2 = AccountId::FromUserEmail("bbb@gmail.com");
FullRestoreInfo::GetInstance()->SetRestorePref(account_id1, true);
FakeFullRestoreInfoObserver observer;
FullRestoreInfo::GetInstance()->AddObserver(&observer);
// Not change the restore flag.
FullRestoreInfo::GetInstance()->SetRestorePref(account_id1, true);
FullRestoreInfo::GetInstance()->SetRestorePref(account_id2, false);
EXPECT_EQ(0, observer.RestorePrefChangedCount(account_id1));
EXPECT_EQ(0, observer.RestorePrefChangedCount(account_id2));
EXPECT_TRUE(FullRestoreInfo::GetInstance()->CanPerformRestore(account_id1));
EXPECT_FALSE(FullRestoreInfo::GetInstance()->CanPerformRestore(account_id2));
// Change the restore flag.
FullRestoreInfo::GetInstance()->SetRestorePref(account_id1, false);
FullRestoreInfo::GetInstance()->SetRestorePref(account_id2, true);
EXPECT_EQ(1, observer.RestorePrefChangedCount(account_id1));
EXPECT_EQ(1, observer.RestorePrefChangedCount(account_id2));
EXPECT_FALSE(observer.CanPerformRestore(account_id1));
EXPECT_TRUE(observer.CanPerformRestore(account_id2));
EXPECT_FALSE(FullRestoreInfo::GetInstance()->CanPerformRestore(account_id1));
EXPECT_TRUE(FullRestoreInfo::GetInstance()->CanPerformRestore(account_id2));
FullRestoreInfo::GetInstance()->RemoveObserver(&observer);
}
} // namespace full_restore