pref_value_store_unittest.cc 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/prefs/pref_value_store.h"
  5. #include <memory>
  6. #include <string>
  7. #include "base/bind.h"
  8. #include "base/memory/ref_counted.h"
  9. #include "base/values.h"
  10. #include "components/prefs/pref_notifier.h"
  11. #include "components/prefs/testing_pref_store.h"
  12. #include "testing/gmock/include/gmock/gmock.h"
  13. #include "testing/gtest/include/gtest/gtest.h"
  14. using testing::Mock;
  15. using testing::_;
  16. namespace {
  17. // Allows to capture pref notifications through gmock.
  18. class MockPrefNotifier : public PrefNotifier {
  19. public:
  20. MOCK_METHOD1(OnPreferenceChanged, void(const std::string&));
  21. MOCK_METHOD1(OnInitializationCompleted, void(bool));
  22. };
  23. // Allows to capture sync model associator interaction.
  24. class MockPrefModelAssociator {
  25. public:
  26. MOCK_METHOD1(ProcessPrefChange, void(const std::string&));
  27. };
  28. } // namespace
  29. // Names of the preferences used in this test.
  30. namespace prefs {
  31. const char kManagedPref[] = "this.pref.managed";
  32. const char kSupervisedUserPref[] = "this.pref.supervised_user";
  33. const char kCommandLinePref[] = "this.pref.command_line";
  34. const char kExtensionPref[] = "this.pref.extension";
  35. const char kStandaloneBrowserPref[] = "this.pref.standalone_browser";
  36. const char kUserPref[] = "this.pref.user";
  37. const char kRecommendedPref[] = "this.pref.recommended";
  38. const char kDefaultPref[] = "this.pref.default";
  39. const char kMissingPref[] = "this.pref.does_not_exist";
  40. }
  41. // Potentially expected values of all preferences used in this test program.
  42. namespace managed_pref {
  43. const char kManagedValue[] = "managed:managed";
  44. }
  45. namespace supervised_user_pref {
  46. const char kManagedValue[] = "supervised_user:managed";
  47. const char kSupervisedUserValue[] = "supervised_user:supervised_user";
  48. }
  49. namespace extension_pref {
  50. const char kManagedValue[] = "extension:managed";
  51. const char kSupervisedUserValue[] = "extension:supervised_user";
  52. const char kExtensionValue[] = "extension:extension";
  53. }
  54. namespace standalone_browser_pref {
  55. const char kManagedValue[] = "standalone_browser:managed";
  56. const char kSupervisedUserValue[] = "standalone_browser:supervised_user";
  57. const char kExtensionValue[] = "standalone_browser:extension";
  58. const char kStandaloneBrowserValue[] = "standalone_browser:standalone_browser";
  59. } // namespace standalone_browser_pref
  60. namespace command_line_pref {
  61. const char kManagedValue[] = "command_line:managed";
  62. const char kSupervisedUserValue[] = "command_line:supervised_user";
  63. const char kExtensionValue[] = "command_line:extension";
  64. const char kStandaloneBrowserValue[] = "command_line:standalone_browser";
  65. const char kCommandLineValue[] = "command_line:command_line";
  66. }
  67. namespace user_pref {
  68. const char kManagedValue[] = "user:managed";
  69. const char kSupervisedUserValue[] = "supervised_user:supervised_user";
  70. const char kExtensionValue[] = "user:extension";
  71. const char kStandaloneBrowserValue[] = "user:standalone_browser";
  72. const char kCommandLineValue[] = "user:command_line";
  73. const char kUserValue[] = "user:user";
  74. }
  75. namespace recommended_pref {
  76. const char kManagedValue[] = "recommended:managed";
  77. const char kSupervisedUserValue[] = "recommended:supervised_user";
  78. const char kExtensionValue[] = "recommended:extension";
  79. const char kStandaloneBrowserValue[] = "recommended:standalone_browser";
  80. const char kCommandLineValue[] = "recommended:command_line";
  81. const char kUserValue[] = "recommended:user";
  82. const char kRecommendedValue[] = "recommended:recommended";
  83. }
  84. namespace default_pref {
  85. const char kManagedValue[] = "default:managed";
  86. const char kSupervisedUserValue[] = "default:supervised_user";
  87. const char kExtensionValue[] = "default:extension";
  88. const char kStandaloneBrowserValue[] = "default:standalone_browser";
  89. const char kCommandLineValue[] = "default:command_line";
  90. const char kUserValue[] = "default:user";
  91. const char kRecommendedValue[] = "default:recommended";
  92. const char kDefaultValue[] = "default:default";
  93. }
  94. class PrefValueStoreTest : public testing::Test {
  95. protected:
  96. void SetUp() override {
  97. // Create TestingPrefStores.
  98. CreateManagedPrefs();
  99. CreateSupervisedUserPrefs();
  100. CreateExtensionPrefs();
  101. CreateStandaloneBrowserPrefs();
  102. CreateCommandLinePrefs();
  103. CreateUserPrefs();
  104. CreateRecommendedPrefs();
  105. CreateDefaultPrefs();
  106. sync_associator_ = std::make_unique<MockPrefModelAssociator>();
  107. // Create a fresh PrefValueStore.
  108. pref_value_store_ = std::make_unique<PrefValueStore>(
  109. managed_pref_store_.get(), supervised_user_pref_store_.get(),
  110. extension_pref_store_.get(), standalone_browser_pref_store_.get(),
  111. command_line_pref_store_.get(), user_pref_store_.get(),
  112. recommended_pref_store_.get(), default_pref_store_.get(),
  113. &pref_notifier_);
  114. pref_value_store_->set_callback(
  115. base::BindRepeating(&MockPrefModelAssociator::ProcessPrefChange,
  116. base::Unretained(sync_associator_.get())));
  117. }
  118. void CreateManagedPrefs() {
  119. managed_pref_store_ = new TestingPrefStore;
  120. managed_pref_store_->SetString(
  121. prefs::kManagedPref,
  122. managed_pref::kManagedValue);
  123. }
  124. void CreateSupervisedUserPrefs() {
  125. supervised_user_pref_store_ = new TestingPrefStore;
  126. supervised_user_pref_store_->SetString(
  127. prefs::kManagedPref,
  128. supervised_user_pref::kManagedValue);
  129. supervised_user_pref_store_->SetString(
  130. prefs::kSupervisedUserPref,
  131. supervised_user_pref::kSupervisedUserValue);
  132. }
  133. void CreateExtensionPrefs() {
  134. extension_pref_store_ = new TestingPrefStore;
  135. extension_pref_store_->SetString(
  136. prefs::kManagedPref,
  137. extension_pref::kManagedValue);
  138. extension_pref_store_->SetString(
  139. prefs::kSupervisedUserPref,
  140. extension_pref::kSupervisedUserValue);
  141. extension_pref_store_->SetString(
  142. prefs::kExtensionPref,
  143. extension_pref::kExtensionValue);
  144. }
  145. void CreateStandaloneBrowserPrefs() {
  146. standalone_browser_pref_store_ = new TestingPrefStore;
  147. standalone_browser_pref_store_->SetString(
  148. prefs::kManagedPref, standalone_browser_pref::kManagedValue);
  149. standalone_browser_pref_store_->SetString(
  150. prefs::kSupervisedUserPref,
  151. standalone_browser_pref::kSupervisedUserValue);
  152. standalone_browser_pref_store_->SetString(
  153. prefs::kExtensionPref, standalone_browser_pref::kExtensionValue);
  154. standalone_browser_pref_store_->SetString(
  155. prefs::kStandaloneBrowserPref,
  156. standalone_browser_pref::kStandaloneBrowserValue);
  157. }
  158. void CreateCommandLinePrefs() {
  159. command_line_pref_store_ = new TestingPrefStore;
  160. command_line_pref_store_->SetString(
  161. prefs::kManagedPref,
  162. command_line_pref::kManagedValue);
  163. command_line_pref_store_->SetString(
  164. prefs::kSupervisedUserPref,
  165. command_line_pref::kSupervisedUserValue);
  166. command_line_pref_store_->SetString(
  167. prefs::kExtensionPref,
  168. command_line_pref::kExtensionValue);
  169. command_line_pref_store_->SetString(
  170. prefs::kStandaloneBrowserPref,
  171. command_line_pref::kStandaloneBrowserValue);
  172. command_line_pref_store_->SetString(
  173. prefs::kCommandLinePref,
  174. command_line_pref::kCommandLineValue);
  175. }
  176. void CreateUserPrefs() {
  177. user_pref_store_ = new TestingPrefStore;
  178. user_pref_store_->SetString(
  179. prefs::kManagedPref,
  180. user_pref::kManagedValue);
  181. user_pref_store_->SetString(
  182. prefs::kSupervisedUserPref,
  183. user_pref::kSupervisedUserValue);
  184. user_pref_store_->SetString(
  185. prefs::kCommandLinePref,
  186. user_pref::kCommandLineValue);
  187. user_pref_store_->SetString(
  188. prefs::kExtensionPref,
  189. user_pref::kExtensionValue);
  190. user_pref_store_->SetString(prefs::kStandaloneBrowserPref,
  191. user_pref::kStandaloneBrowserValue);
  192. user_pref_store_->SetString(
  193. prefs::kUserPref,
  194. user_pref::kUserValue);
  195. }
  196. void CreateRecommendedPrefs() {
  197. recommended_pref_store_ = new TestingPrefStore;
  198. recommended_pref_store_->SetString(
  199. prefs::kManagedPref,
  200. recommended_pref::kManagedValue);
  201. recommended_pref_store_->SetString(
  202. prefs::kSupervisedUserPref,
  203. recommended_pref::kSupervisedUserValue);
  204. recommended_pref_store_->SetString(
  205. prefs::kCommandLinePref,
  206. recommended_pref::kCommandLineValue);
  207. recommended_pref_store_->SetString(
  208. prefs::kExtensionPref,
  209. recommended_pref::kExtensionValue);
  210. recommended_pref_store_->SetString(
  211. prefs::kStandaloneBrowserPref,
  212. recommended_pref::kStandaloneBrowserValue);
  213. recommended_pref_store_->SetString(
  214. prefs::kUserPref,
  215. recommended_pref::kUserValue);
  216. recommended_pref_store_->SetString(
  217. prefs::kRecommendedPref,
  218. recommended_pref::kRecommendedValue);
  219. }
  220. void CreateDefaultPrefs() {
  221. default_pref_store_ = new TestingPrefStore;
  222. default_pref_store_->SetString(
  223. prefs::kSupervisedUserPref,
  224. default_pref::kSupervisedUserValue);
  225. default_pref_store_->SetString(
  226. prefs::kManagedPref,
  227. default_pref::kManagedValue);
  228. default_pref_store_->SetString(
  229. prefs::kCommandLinePref,
  230. default_pref::kCommandLineValue);
  231. default_pref_store_->SetString(
  232. prefs::kExtensionPref,
  233. default_pref::kExtensionValue);
  234. default_pref_store_->SetString(prefs::kStandaloneBrowserPref,
  235. default_pref::kStandaloneBrowserValue);
  236. default_pref_store_->SetString(
  237. prefs::kUserPref,
  238. default_pref::kUserValue);
  239. default_pref_store_->SetString(
  240. prefs::kRecommendedPref,
  241. default_pref::kRecommendedValue);
  242. default_pref_store_->SetString(
  243. prefs::kDefaultPref,
  244. default_pref::kDefaultValue);
  245. }
  246. void ExpectValueChangeNotifications(const std::string& name) {
  247. EXPECT_CALL(pref_notifier_, OnPreferenceChanged(name));
  248. EXPECT_CALL(*sync_associator_, ProcessPrefChange(name));
  249. }
  250. void CheckAndClearValueChangeNotifications() {
  251. Mock::VerifyAndClearExpectations(&pref_notifier_);
  252. Mock::VerifyAndClearExpectations(sync_associator_.get());
  253. }
  254. MockPrefNotifier pref_notifier_;
  255. std::unique_ptr<MockPrefModelAssociator> sync_associator_;
  256. std::unique_ptr<PrefValueStore> pref_value_store_;
  257. scoped_refptr<TestingPrefStore> managed_pref_store_;
  258. scoped_refptr<TestingPrefStore> supervised_user_pref_store_;
  259. scoped_refptr<TestingPrefStore> extension_pref_store_;
  260. scoped_refptr<TestingPrefStore> standalone_browser_pref_store_;
  261. scoped_refptr<TestingPrefStore> command_line_pref_store_;
  262. scoped_refptr<TestingPrefStore> user_pref_store_;
  263. scoped_refptr<TestingPrefStore> recommended_pref_store_;
  264. scoped_refptr<TestingPrefStore> default_pref_store_;
  265. };
  266. TEST_F(PrefValueStoreTest, GetValue) {
  267. const base::Value* value;
  268. // The following tests read a value from the PrefService. The preferences are
  269. // set in a way such that all lower-priority stores have a value and we can
  270. // test whether overrides work correctly.
  271. // Test getting a managed value.
  272. value = nullptr;
  273. ASSERT_TRUE(pref_value_store_->GetValue(prefs::kManagedPref,
  274. base::Value::Type::STRING, &value));
  275. ASSERT_TRUE(value->is_string());
  276. EXPECT_EQ(managed_pref::kManagedValue, value->GetString());
  277. // Test getting a supervised user value.
  278. value = nullptr;
  279. ASSERT_TRUE(pref_value_store_->GetValue(prefs::kSupervisedUserPref,
  280. base::Value::Type::STRING, &value));
  281. ASSERT_TRUE(value->is_string());
  282. EXPECT_EQ(supervised_user_pref::kSupervisedUserValue, value->GetString());
  283. // Test getting an extension value.
  284. value = nullptr;
  285. ASSERT_TRUE(pref_value_store_->GetValue(prefs::kExtensionPref,
  286. base::Value::Type::STRING, &value));
  287. ASSERT_TRUE(value->is_string());
  288. EXPECT_EQ(extension_pref::kExtensionValue, value->GetString());
  289. // Test getting a command-line value.
  290. value = nullptr;
  291. ASSERT_TRUE(pref_value_store_->GetValue(prefs::kCommandLinePref,
  292. base::Value::Type::STRING, &value));
  293. ASSERT_TRUE(value->is_string());
  294. EXPECT_EQ(command_line_pref::kCommandLineValue, value->GetString());
  295. // Test getting a user-set value.
  296. value = nullptr;
  297. ASSERT_TRUE(pref_value_store_->GetValue(prefs::kUserPref,
  298. base::Value::Type::STRING, &value));
  299. ASSERT_TRUE(value->is_string());
  300. EXPECT_EQ(user_pref::kUserValue, value->GetString());
  301. // Test getting a user set value overwriting a recommended value.
  302. value = nullptr;
  303. ASSERT_TRUE(pref_value_store_->GetValue(prefs::kRecommendedPref,
  304. base::Value::Type::STRING, &value));
  305. ASSERT_TRUE(value->is_string());
  306. EXPECT_EQ(recommended_pref::kRecommendedValue, value->GetString());
  307. // Test getting a default value.
  308. value = nullptr;
  309. ASSERT_TRUE(pref_value_store_->GetValue(prefs::kDefaultPref,
  310. base::Value::Type::STRING, &value));
  311. ASSERT_TRUE(value->is_string());
  312. EXPECT_EQ(default_pref::kDefaultValue, value->GetString());
  313. // Test getting a preference value that the |PrefValueStore|
  314. // does not contain.
  315. base::Value tmp_dummy_value(true);
  316. value = &tmp_dummy_value;
  317. ASSERT_FALSE(pref_value_store_->GetValue(prefs::kMissingPref,
  318. base::Value::Type::STRING, &value));
  319. ASSERT_FALSE(value);
  320. }
  321. TEST_F(PrefValueStoreTest, GetRecommendedValue) {
  322. const base::Value* value;
  323. // The following tests read a value from the PrefService. The preferences are
  324. // set in a way such that all lower-priority stores have a value and we can
  325. // test whether overrides do not clutter the recommended value.
  326. // Test getting recommended value when a managed value is present.
  327. value = nullptr;
  328. ASSERT_TRUE(pref_value_store_->GetRecommendedValue(
  329. prefs::kManagedPref,
  330. base::Value::Type::STRING, &value));
  331. ASSERT_TRUE(value->is_string());
  332. EXPECT_EQ(recommended_pref::kManagedValue, value->GetString());
  333. // Test getting recommended value when a supervised user value is present.
  334. value = nullptr;
  335. ASSERT_TRUE(pref_value_store_->GetRecommendedValue(
  336. prefs::kSupervisedUserPref,
  337. base::Value::Type::STRING, &value));
  338. ASSERT_TRUE(value->is_string());
  339. EXPECT_EQ(recommended_pref::kSupervisedUserValue, value->GetString());
  340. // Test getting recommended value when an extension value is present.
  341. value = nullptr;
  342. ASSERT_TRUE(pref_value_store_->GetRecommendedValue(
  343. prefs::kExtensionPref,
  344. base::Value::Type::STRING, &value));
  345. ASSERT_TRUE(value->is_string());
  346. EXPECT_EQ(recommended_pref::kExtensionValue, value->GetString());
  347. // Test getting recommended value when a command-line value is present.
  348. value = nullptr;
  349. ASSERT_TRUE(pref_value_store_->GetRecommendedValue(
  350. prefs::kCommandLinePref,
  351. base::Value::Type::STRING, &value));
  352. ASSERT_TRUE(value->is_string());
  353. EXPECT_EQ(recommended_pref::kCommandLineValue, value->GetString());
  354. // Test getting recommended value when a user-set value is present.
  355. value = nullptr;
  356. ASSERT_TRUE(pref_value_store_->GetRecommendedValue(
  357. prefs::kUserPref,
  358. base::Value::Type::STRING, &value));
  359. ASSERT_TRUE(value->is_string());
  360. EXPECT_EQ(recommended_pref::kUserValue, value->GetString());
  361. // Test getting recommended value when no higher-priority value is present.
  362. value = nullptr;
  363. ASSERT_TRUE(pref_value_store_->GetRecommendedValue(
  364. prefs::kRecommendedPref,
  365. base::Value::Type::STRING, &value));
  366. ASSERT_TRUE(value->is_string());
  367. EXPECT_EQ(recommended_pref::kRecommendedValue, value->GetString());
  368. // Test getting recommended value when no recommended value is present.
  369. base::Value tmp_dummy_value(true);
  370. value = &tmp_dummy_value;
  371. ASSERT_FALSE(pref_value_store_->GetRecommendedValue(
  372. prefs::kDefaultPref,
  373. base::Value::Type::STRING, &value));
  374. ASSERT_FALSE(value);
  375. // Test getting a preference value that the |PrefValueStore|
  376. // does not contain.
  377. value = &tmp_dummy_value;
  378. ASSERT_FALSE(pref_value_store_->GetRecommendedValue(
  379. prefs::kMissingPref,
  380. base::Value::Type::STRING, &value));
  381. ASSERT_FALSE(value);
  382. }
  383. TEST_F(PrefValueStoreTest, PrefChanges) {
  384. // Check pref controlled by highest-priority store.
  385. ExpectValueChangeNotifications(prefs::kManagedPref);
  386. managed_pref_store_->NotifyPrefValueChanged(prefs::kManagedPref);
  387. CheckAndClearValueChangeNotifications();
  388. ExpectValueChangeNotifications(prefs::kManagedPref);
  389. supervised_user_pref_store_->NotifyPrefValueChanged(prefs::kManagedPref);
  390. CheckAndClearValueChangeNotifications();
  391. ExpectValueChangeNotifications(prefs::kManagedPref);
  392. extension_pref_store_->NotifyPrefValueChanged(prefs::kManagedPref);
  393. CheckAndClearValueChangeNotifications();
  394. ExpectValueChangeNotifications(prefs::kManagedPref);
  395. command_line_pref_store_->NotifyPrefValueChanged(prefs::kManagedPref);
  396. CheckAndClearValueChangeNotifications();
  397. ExpectValueChangeNotifications(prefs::kManagedPref);
  398. user_pref_store_->NotifyPrefValueChanged(prefs::kManagedPref);
  399. CheckAndClearValueChangeNotifications();
  400. ExpectValueChangeNotifications(prefs::kManagedPref);
  401. recommended_pref_store_->NotifyPrefValueChanged(prefs::kManagedPref);
  402. CheckAndClearValueChangeNotifications();
  403. ExpectValueChangeNotifications(prefs::kManagedPref);
  404. default_pref_store_->NotifyPrefValueChanged(prefs::kManagedPref);
  405. CheckAndClearValueChangeNotifications();
  406. // Check pref controlled by user store.
  407. ExpectValueChangeNotifications(prefs::kUserPref);
  408. managed_pref_store_->NotifyPrefValueChanged(prefs::kUserPref);
  409. CheckAndClearValueChangeNotifications();
  410. ExpectValueChangeNotifications(prefs::kUserPref);
  411. extension_pref_store_->NotifyPrefValueChanged(prefs::kUserPref);
  412. CheckAndClearValueChangeNotifications();
  413. ExpectValueChangeNotifications(prefs::kUserPref);
  414. command_line_pref_store_->NotifyPrefValueChanged(prefs::kUserPref);
  415. CheckAndClearValueChangeNotifications();
  416. ExpectValueChangeNotifications(prefs::kUserPref);
  417. user_pref_store_->NotifyPrefValueChanged(prefs::kUserPref);
  418. CheckAndClearValueChangeNotifications();
  419. ExpectValueChangeNotifications(prefs::kUserPref);
  420. recommended_pref_store_->NotifyPrefValueChanged(prefs::kUserPref);
  421. CheckAndClearValueChangeNotifications();
  422. ExpectValueChangeNotifications(prefs::kUserPref);
  423. default_pref_store_->NotifyPrefValueChanged(prefs::kUserPref);
  424. CheckAndClearValueChangeNotifications();
  425. // Check pref controlled by default-pref store.
  426. ExpectValueChangeNotifications(prefs::kDefaultPref);
  427. managed_pref_store_->NotifyPrefValueChanged(prefs::kDefaultPref);
  428. CheckAndClearValueChangeNotifications();
  429. ExpectValueChangeNotifications(prefs::kDefaultPref);
  430. extension_pref_store_->NotifyPrefValueChanged(prefs::kDefaultPref);
  431. CheckAndClearValueChangeNotifications();
  432. ExpectValueChangeNotifications(prefs::kDefaultPref);
  433. command_line_pref_store_->NotifyPrefValueChanged(prefs::kDefaultPref);
  434. CheckAndClearValueChangeNotifications();
  435. ExpectValueChangeNotifications(prefs::kDefaultPref);
  436. user_pref_store_->NotifyPrefValueChanged(prefs::kDefaultPref);
  437. CheckAndClearValueChangeNotifications();
  438. ExpectValueChangeNotifications(prefs::kDefaultPref);
  439. recommended_pref_store_->NotifyPrefValueChanged(prefs::kDefaultPref);
  440. CheckAndClearValueChangeNotifications();
  441. ExpectValueChangeNotifications(prefs::kDefaultPref);
  442. default_pref_store_->NotifyPrefValueChanged(prefs::kDefaultPref);
  443. CheckAndClearValueChangeNotifications();
  444. }
  445. TEST_F(PrefValueStoreTest, OnInitializationCompleted) {
  446. EXPECT_CALL(pref_notifier_, OnInitializationCompleted(true)).Times(0);
  447. managed_pref_store_->SetInitializationCompleted();
  448. supervised_user_pref_store_->SetInitializationCompleted();
  449. extension_pref_store_->SetInitializationCompleted();
  450. standalone_browser_pref_store_->SetInitializationCompleted();
  451. command_line_pref_store_->SetInitializationCompleted();
  452. recommended_pref_store_->SetInitializationCompleted();
  453. default_pref_store_->SetInitializationCompleted();
  454. Mock::VerifyAndClearExpectations(&pref_notifier_);
  455. // The notification should only be triggered after the last store is done.
  456. EXPECT_CALL(pref_notifier_, OnInitializationCompleted(true)).Times(1);
  457. user_pref_store_->SetInitializationCompleted();
  458. Mock::VerifyAndClearExpectations(&pref_notifier_);
  459. }
  460. TEST_F(PrefValueStoreTest, PrefValueInManagedStore) {
  461. EXPECT_TRUE(pref_value_store_->PrefValueInManagedStore(
  462. prefs::kManagedPref));
  463. EXPECT_FALSE(pref_value_store_->PrefValueInManagedStore(
  464. prefs::kSupervisedUserPref));
  465. EXPECT_FALSE(pref_value_store_->PrefValueInManagedStore(
  466. prefs::kExtensionPref));
  467. EXPECT_FALSE(pref_value_store_->PrefValueInManagedStore(
  468. prefs::kStandaloneBrowserPref));
  469. EXPECT_FALSE(pref_value_store_->PrefValueInManagedStore(
  470. prefs::kCommandLinePref));
  471. EXPECT_FALSE(pref_value_store_->PrefValueInManagedStore(
  472. prefs::kUserPref));
  473. EXPECT_FALSE(pref_value_store_->PrefValueInManagedStore(
  474. prefs::kRecommendedPref));
  475. EXPECT_FALSE(pref_value_store_->PrefValueInManagedStore(
  476. prefs::kDefaultPref));
  477. EXPECT_FALSE(pref_value_store_->PrefValueInManagedStore(
  478. prefs::kMissingPref));
  479. }
  480. TEST_F(PrefValueStoreTest, PrefValueInExtensionStore) {
  481. EXPECT_TRUE(pref_value_store_->PrefValueInExtensionStore(
  482. prefs::kManagedPref));
  483. EXPECT_TRUE(pref_value_store_->PrefValueInExtensionStore(
  484. prefs::kSupervisedUserPref));
  485. EXPECT_TRUE(pref_value_store_->PrefValueInExtensionStore(
  486. prefs::kExtensionPref));
  487. EXPECT_FALSE(pref_value_store_->PrefValueInExtensionStore(
  488. prefs::kStandaloneBrowserPref));
  489. EXPECT_FALSE(pref_value_store_->PrefValueInExtensionStore(
  490. prefs::kCommandLinePref));
  491. EXPECT_FALSE(pref_value_store_->PrefValueInExtensionStore(
  492. prefs::kUserPref));
  493. EXPECT_FALSE(pref_value_store_->PrefValueInExtensionStore(
  494. prefs::kRecommendedPref));
  495. EXPECT_FALSE(pref_value_store_->PrefValueInExtensionStore(
  496. prefs::kDefaultPref));
  497. EXPECT_FALSE(pref_value_store_->PrefValueInExtensionStore(
  498. prefs::kMissingPref));
  499. }
  500. TEST_F(PrefValueStoreTest, PrefValueInUserStore) {
  501. EXPECT_TRUE(pref_value_store_->PrefValueInUserStore(
  502. prefs::kManagedPref));
  503. EXPECT_TRUE(pref_value_store_->PrefValueInUserStore(
  504. prefs::kSupervisedUserPref));
  505. EXPECT_TRUE(pref_value_store_->PrefValueInUserStore(
  506. prefs::kExtensionPref));
  507. EXPECT_TRUE(
  508. pref_value_store_->PrefValueInUserStore(prefs::kStandaloneBrowserPref));
  509. EXPECT_TRUE(pref_value_store_->PrefValueInUserStore(
  510. prefs::kCommandLinePref));
  511. EXPECT_TRUE(pref_value_store_->PrefValueInUserStore(
  512. prefs::kUserPref));
  513. EXPECT_FALSE(pref_value_store_->PrefValueInUserStore(
  514. prefs::kRecommendedPref));
  515. EXPECT_FALSE(pref_value_store_->PrefValueInUserStore(
  516. prefs::kDefaultPref));
  517. EXPECT_FALSE(pref_value_store_->PrefValueInUserStore(
  518. prefs::kMissingPref));
  519. }
  520. TEST_F(PrefValueStoreTest, PrefValueFromExtensionStore) {
  521. EXPECT_FALSE(pref_value_store_->PrefValueFromExtensionStore(
  522. prefs::kManagedPref));
  523. EXPECT_FALSE(pref_value_store_->PrefValueFromExtensionStore(
  524. prefs::kSupervisedUserPref));
  525. EXPECT_TRUE(pref_value_store_->PrefValueFromExtensionStore(
  526. prefs::kExtensionPref));
  527. EXPECT_FALSE(pref_value_store_->PrefValueFromExtensionStore(
  528. prefs::kStandaloneBrowserPref));
  529. EXPECT_FALSE(pref_value_store_->PrefValueFromExtensionStore(
  530. prefs::kCommandLinePref));
  531. EXPECT_FALSE(pref_value_store_->PrefValueFromExtensionStore(
  532. prefs::kUserPref));
  533. EXPECT_FALSE(pref_value_store_->PrefValueFromExtensionStore(
  534. prefs::kRecommendedPref));
  535. EXPECT_FALSE(pref_value_store_->PrefValueFromExtensionStore(
  536. prefs::kDefaultPref));
  537. EXPECT_FALSE(pref_value_store_->PrefValueFromExtensionStore(
  538. prefs::kMissingPref));
  539. }
  540. TEST_F(PrefValueStoreTest, PrefValueFromUserStore) {
  541. EXPECT_FALSE(pref_value_store_->PrefValueFromUserStore(
  542. prefs::kManagedPref));
  543. EXPECT_FALSE(pref_value_store_->PrefValueFromUserStore(
  544. prefs::kSupervisedUserPref));
  545. EXPECT_FALSE(pref_value_store_->PrefValueFromUserStore(
  546. prefs::kExtensionPref));
  547. EXPECT_FALSE(
  548. pref_value_store_->PrefValueFromUserStore(prefs::kStandaloneBrowserPref));
  549. EXPECT_FALSE(pref_value_store_->PrefValueFromUserStore(
  550. prefs::kCommandLinePref));
  551. EXPECT_TRUE(pref_value_store_->PrefValueFromUserStore(
  552. prefs::kUserPref));
  553. EXPECT_FALSE(pref_value_store_->PrefValueFromUserStore(
  554. prefs::kRecommendedPref));
  555. EXPECT_FALSE(pref_value_store_->PrefValueFromUserStore(
  556. prefs::kDefaultPref));
  557. EXPECT_FALSE(pref_value_store_->PrefValueFromUserStore(
  558. prefs::kMissingPref));
  559. }
  560. TEST_F(PrefValueStoreTest, PrefValueFromRecommendedStore) {
  561. EXPECT_FALSE(pref_value_store_->PrefValueFromRecommendedStore(
  562. prefs::kManagedPref));
  563. EXPECT_FALSE(pref_value_store_->PrefValueFromRecommendedStore(
  564. prefs::kSupervisedUserPref));
  565. EXPECT_FALSE(pref_value_store_->PrefValueFromRecommendedStore(
  566. prefs::kExtensionPref));
  567. EXPECT_FALSE(pref_value_store_->PrefValueFromRecommendedStore(
  568. prefs::kStandaloneBrowserPref));
  569. EXPECT_FALSE(pref_value_store_->PrefValueFromRecommendedStore(
  570. prefs::kCommandLinePref));
  571. EXPECT_FALSE(pref_value_store_->PrefValueFromRecommendedStore(
  572. prefs::kUserPref));
  573. EXPECT_TRUE(pref_value_store_->PrefValueFromRecommendedStore(
  574. prefs::kRecommendedPref));
  575. EXPECT_FALSE(pref_value_store_->PrefValueFromRecommendedStore(
  576. prefs::kDefaultPref));
  577. EXPECT_FALSE(pref_value_store_->PrefValueFromRecommendedStore(
  578. prefs::kMissingPref));
  579. }
  580. TEST_F(PrefValueStoreTest, PrefValueFromDefaultStore) {
  581. EXPECT_FALSE(pref_value_store_->PrefValueFromDefaultStore(
  582. prefs::kManagedPref));
  583. EXPECT_FALSE(pref_value_store_->PrefValueFromDefaultStore(
  584. prefs::kSupervisedUserPref));
  585. EXPECT_FALSE(pref_value_store_->PrefValueFromDefaultStore(
  586. prefs::kExtensionPref));
  587. EXPECT_FALSE(pref_value_store_->PrefValueFromDefaultStore(
  588. prefs::kStandaloneBrowserPref));
  589. EXPECT_FALSE(pref_value_store_->PrefValueFromDefaultStore(
  590. prefs::kCommandLinePref));
  591. EXPECT_FALSE(pref_value_store_->PrefValueFromDefaultStore(
  592. prefs::kUserPref));
  593. EXPECT_FALSE(pref_value_store_->PrefValueFromDefaultStore(
  594. prefs::kRecommendedPref));
  595. EXPECT_TRUE(pref_value_store_->PrefValueFromDefaultStore(
  596. prefs::kDefaultPref));
  597. EXPECT_FALSE(pref_value_store_->PrefValueFromDefaultStore(
  598. prefs::kMissingPref));
  599. }
  600. TEST_F(PrefValueStoreTest, PrefValueUserModifiable) {
  601. EXPECT_FALSE(pref_value_store_->PrefValueUserModifiable(
  602. prefs::kManagedPref));
  603. EXPECT_FALSE(pref_value_store_->PrefValueUserModifiable(
  604. prefs::kSupervisedUserPref));
  605. EXPECT_FALSE(pref_value_store_->PrefValueUserModifiable(
  606. prefs::kExtensionPref));
  607. EXPECT_FALSE(pref_value_store_->PrefValueUserModifiable(
  608. prefs::kStandaloneBrowserPref));
  609. EXPECT_FALSE(pref_value_store_->PrefValueUserModifiable(
  610. prefs::kCommandLinePref));
  611. EXPECT_TRUE(pref_value_store_->PrefValueUserModifiable(
  612. prefs::kUserPref));
  613. EXPECT_TRUE(pref_value_store_->PrefValueUserModifiable(
  614. prefs::kRecommendedPref));
  615. EXPECT_TRUE(pref_value_store_->PrefValueUserModifiable(
  616. prefs::kDefaultPref));
  617. EXPECT_TRUE(pref_value_store_->PrefValueUserModifiable(
  618. prefs::kMissingPref));
  619. }
  620. TEST_F(PrefValueStoreTest, PrefValueExtensionModifiable) {
  621. EXPECT_FALSE(pref_value_store_->PrefValueExtensionModifiable(
  622. prefs::kManagedPref));
  623. EXPECT_FALSE(pref_value_store_->PrefValueExtensionModifiable(
  624. prefs::kSupervisedUserPref));
  625. EXPECT_TRUE(pref_value_store_->PrefValueExtensionModifiable(
  626. prefs::kExtensionPref));
  627. EXPECT_TRUE(pref_value_store_->PrefValueExtensionModifiable(
  628. prefs::kStandaloneBrowserPref));
  629. EXPECT_TRUE(pref_value_store_->PrefValueExtensionModifiable(
  630. prefs::kCommandLinePref));
  631. EXPECT_TRUE(pref_value_store_->PrefValueExtensionModifiable(
  632. prefs::kUserPref));
  633. EXPECT_TRUE(pref_value_store_->PrefValueExtensionModifiable(
  634. prefs::kRecommendedPref));
  635. EXPECT_TRUE(pref_value_store_->PrefValueExtensionModifiable(
  636. prefs::kDefaultPref));
  637. EXPECT_TRUE(pref_value_store_->PrefValueExtensionModifiable(
  638. prefs::kMissingPref));
  639. }