[M120][Tizen][Onscreen] Fix build errors for TV profile
[platform/framework/web/chromium-efl.git] / chrome / browser / font_pref_change_notifier_unittest.cc
1 // Copyright 2017 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/font_pref_change_notifier.h"
6 #include "base/functional/bind.h"
7 #include "chrome/common/pref_names_util.h"
8 #include "components/prefs/pref_registry_simple.h"
9 #include "components/prefs/testing_pref_service.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace {
13
14 void AppendString(std::vector<std::string>* vect, const std::string& str) {
15   vect->push_back(str);
16 }
17
18 }  // namespace
19
20 TEST(FontPrefChangeNotifier, Registrars) {
21   std::string prefix((pref_names_util::kWebKitFontPrefPrefix));
22
23   // Registrar 0 will outlive the notifier.
24   std::vector<std::string> fonts0;
25   FontPrefChangeNotifier::Registrar reg0;
26
27   std::unique_ptr<TestingPrefServiceSimple> service =
28       std::make_unique<TestingPrefServiceSimple>();
29   PrefRegistrySimple* pref_registry = service->registry();
30
31   std::string font1 = prefix + "font1";
32   pref_registry->RegisterStringPref(font1, std::string());
33   std::string font2 = prefix + "font2";
34   pref_registry->RegisterStringPref(font2, std::string());
35   std::string font3 = prefix + "font3";
36   pref_registry->RegisterStringPref(font3, std::string());
37
38   std::unique_ptr<FontPrefChangeNotifier> notifier =
39       std::make_unique<FontPrefChangeNotifier>(service.get());
40   reg0.Register(notifier.get(),
41                 base::BindRepeating(&AppendString, base::Unretained(&fonts0)));
42
43   // Registrar 1 will be manually unregistered.
44   std::vector<std::string> fonts1;
45   FontPrefChangeNotifier::Registrar reg1;
46   reg1.Register(notifier.get(),
47                 base::BindRepeating(&AppendString, base::Unretained(&fonts1)));
48
49   // Registrar 2 will automatically unregister itself when it goes out of scope.
50   std::vector<std::string> fonts2;
51   {
52     FontPrefChangeNotifier::Registrar reg2;
53     reg2.Register(
54         notifier.get(),
55         base::BindRepeating(&AppendString, base::Unretained(&fonts2)));
56
57     // All lists should get the font.
58     service->SetString(font1, "1");
59     EXPECT_EQ(1u, fonts0.size());
60     EXPECT_EQ(font1, fonts0.back());
61     EXPECT_EQ(1u, fonts1.size());
62     EXPECT_EQ(font1, fonts1.back());
63     EXPECT_EQ(1u, fonts2.size());
64     EXPECT_EQ(font1, fonts2.back());
65   }
66
67   // Now that Regsitrar 2 is gone, only 0 and 1 should get changes.
68   service->SetString(font2, "2");
69   EXPECT_EQ(2u, fonts0.size());
70   EXPECT_EQ(font2, fonts0.back());
71   EXPECT_EQ(2u, fonts1.size());
72   EXPECT_EQ(font2, fonts1.back());
73   EXPECT_EQ(1u, fonts2.size());
74
75   // Manually unregister Registrar 1.
76   reg1.Unregister();
77   EXPECT_FALSE(reg1.is_registered());
78
79   // Only Registrar 0 should see changes now.
80   service->SetString(font3, "3");
81   EXPECT_EQ(3u, fonts0.size());
82   EXPECT_EQ(font3, fonts0.back());
83   EXPECT_EQ(2u, fonts1.size());
84   EXPECT_EQ(1u, fonts2.size());
85   EXPECT_EQ(font3, fonts0.back());
86
87   notifier.reset();
88
89   // Registrar 0 should have been automatically unregistered.
90   EXPECT_FALSE(reg0.is_registered());
91 }