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