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