Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: chrome/browser/prefs/pref_value_store_unittest.cc

Issue 6074003: Handle policy refresh internally in ConfigurationPolicyPrefStore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix nit Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <set> 5 #include <set>
6 #include <string> 6 #include <string>
7 7
8 #include "base/scoped_ptr.h" 8 #include "base/scoped_ptr.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "chrome/browser/browser_thread.h" 10 #include "chrome/browser/browser_thread.h"
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 virtual void SetUp() { 92 virtual void SetUp() {
93 // Create TestingPrefStores. 93 // Create TestingPrefStores.
94 CreateManagedPlatformPrefs(); 94 CreateManagedPlatformPrefs();
95 CreateDeviceManagementPrefs(); 95 CreateDeviceManagementPrefs();
96 CreateExtensionPrefs(); 96 CreateExtensionPrefs();
97 CreateCommandLinePrefs(); 97 CreateCommandLinePrefs();
98 CreateUserPrefs(); 98 CreateUserPrefs();
99 CreateRecommendedPrefs(); 99 CreateRecommendedPrefs();
100 CreateDefaultPrefs(); 100 CreateDefaultPrefs();
101 101
102 // Create a new pref-value-store. 102 // Create a fresh PrefValueStore.
103 pref_value_store_ = new PrefValueStore( 103 pref_value_store_ = new PrefValueStore(
104 managed_platform_pref_store_, 104 managed_platform_pref_store_,
105 device_management_pref_store_, 105 device_management_pref_store_,
106 extension_pref_store_, 106 extension_pref_store_,
107 command_line_pref_store_, 107 command_line_pref_store_,
108 user_pref_store_, 108 user_pref_store_,
109 recommended_pref_store_, 109 recommended_pref_store_,
110 default_pref_store_, 110 default_pref_store_,
111 &pref_notifier_, 111 &pref_notifier_);
112 NULL);
113 112
114 // Register prefs with the PrefValueStore. 113 // Register prefs with the PrefValueStore.
115 pref_value_store_->RegisterPreferenceType(prefs::kApplicationLocale, 114 pref_value_store_->RegisterPreferenceType(prefs::kApplicationLocale,
116 Value::TYPE_STRING); 115 Value::TYPE_STRING);
117 pref_value_store_->RegisterPreferenceType(prefs::kCurrentThemeID, 116 pref_value_store_->RegisterPreferenceType(prefs::kCurrentThemeID,
118 Value::TYPE_STRING); 117 Value::TYPE_STRING);
119 pref_value_store_->RegisterPreferenceType( 118 pref_value_store_->RegisterPreferenceType(
120 prefs::kDefaultSearchProviderName, 119 prefs::kDefaultSearchProviderName,
121 Value::TYPE_STRING); 120 Value::TYPE_STRING);
122 pref_value_store_->RegisterPreferenceType(prefs::kDeleteCache, 121 pref_value_store_->RegisterPreferenceType(prefs::kDeleteCache,
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 // Test a preference from the default pref store. 611 // Test a preference from the default pref store.
613 ASSERT_FALSE(pref_value_store_->HasPrefPath(prefs::kDefaultPref)); 612 ASSERT_FALSE(pref_value_store_->HasPrefPath(prefs::kDefaultPref));
614 EXPECT_TRUE( 613 EXPECT_TRUE(
615 pref_value_store_->PrefValueFromDefaultStore(prefs::kDefaultPref)); 614 pref_value_store_->PrefValueFromDefaultStore(prefs::kDefaultPref));
616 615
617 // Test a preference for which the PrefValueStore does not contain a value. 616 // Test a preference for which the PrefValueStore does not contain a value.
618 ASSERT_FALSE(pref_value_store_->HasPrefPath(prefs::kMissingPref)); 617 ASSERT_FALSE(pref_value_store_->HasPrefPath(prefs::kMissingPref));
619 EXPECT_FALSE( 618 EXPECT_FALSE(
620 pref_value_store_->PrefValueFromDefaultStore(prefs::kMissingPref)); 619 pref_value_store_->PrefValueFromDefaultStore(prefs::kMissingPref));
621 } 620 }
622
623 // TODO(mnissler, danno): Clean this up when refactoring
624 // ConfigurationPolicyPrefStore.
625 class PrefValueStorePolicyRefreshTest : public testing::Test {
626 protected:
627 // Records preference changes.
628 class PrefChangeRecorder {
629 public:
630 void Record(const std::string& pref_name) {
631 changed_prefs_.insert(pref_name);
632 }
633
634 void Clear() {
635 changed_prefs_.clear();
636 }
637
638 const std::set<std::string>& changed_prefs() { return changed_prefs_; }
639
640 private:
641 std::set<std::string> changed_prefs_;
642 };
643
644 virtual void SetUp() {
645 using policy::ConfigurationPolicyPrefStore;
646
647 ui_thread_.reset(new BrowserThread(BrowserThread::UI, &loop_)),
648 file_thread_.reset(new BrowserThread(BrowserThread::FILE, &loop_)),
649 policy_provider_.reset(new policy::DummyConfigurationPolicyProvider(
650 policy::ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList()));
651
652 ConfigurationPolicyPrefStore* managed_store =
653 NewConfigurationPolicyPrefStore();
654 managed_store->prefs()->SetString(prefs::kHomePage,
655 managed_platform_pref::kHomepageValue);
656 expected_differing_paths_.insert(prefs::kHomePage);
657
658 ConfigurationPolicyPrefStore* device_management_store =
659 NewConfigurationPolicyPrefStore();
660 device_management_store->prefs()->SetString(
661 prefs::kDefaultSearchProviderName,
662 device_management_pref::kSearchProviderNameValue);
663 expected_differing_paths_.insert("default_search_provider");
664 expected_differing_paths_.insert(prefs::kDefaultSearchProviderName);
665
666 ConfigurationPolicyPrefStore* recommended_store =
667 NewConfigurationPolicyPrefStore();
668 recommended_store->prefs()->SetInteger(prefs::kStabilityLaunchCount,
669 recommended_pref::kStabilityLaunchCountValue);
670 recommended_store->prefs()->SetBoolean(prefs::kRecommendedPref,
671 recommended_pref::kRecommendedPrefValue);
672
673 expected_differing_paths_.insert("this");
674 expected_differing_paths_.insert("this.pref");
675 expected_differing_paths_.insert(prefs::kRecommendedPref);
676 expected_differing_paths_.insert("user_experience_metrics");
677 expected_differing_paths_.insert("user_experience_metrics.stability");
678 expected_differing_paths_.insert(prefs::kStabilityLaunchCount);
679
680 pref_value_store_ = new PrefValueStore(
681 managed_store,
682 device_management_store,
683 NULL,
684 NULL,
685 new TestingPrefStore(),
686 recommended_store,
687 NULL,
688 &pref_notifier_,
689 NULL);
690 }
691
692 virtual void TearDown() {
693 loop_.RunAllPending();
694 pref_value_store_ = NULL;
695 file_thread_.reset();
696 ui_thread_.reset();
697 }
698
699 // Creates a new ConfigurationPolicyPrefStore for testing.
700 policy::ConfigurationPolicyPrefStore* NewConfigurationPolicyPrefStore() {
701 return new policy::ConfigurationPolicyPrefStore(policy_provider_.get());
702 }
703
704 // A vector of the preferences paths in policy PrefStores that are set at the
705 // beginning of a test. Can be modified by the test to track changes that it
706 // makes to the preferences stored in the managed and recommended PrefStores.
707 std::set<std::string> expected_differing_paths_;
708
709 MessageLoop loop_;
710 MockPrefNotifier pref_notifier_;
711 scoped_refptr<PrefValueStore> pref_value_store_;
712
713 private:
714 scoped_ptr<BrowserThread> ui_thread_;
715 scoped_ptr<BrowserThread> file_thread_;
716
717 scoped_ptr<policy::DummyConfigurationPolicyProvider> policy_provider_;
718 };
719
720 TEST_F(PrefValueStorePolicyRefreshTest, TestPolicyRefresh) {
721 // pref_value_store_ is initialized by PrefValueStoreTest to have values in
722 // the managed platform, device management and recommended stores. By
723 // replacing them with dummy stores, all of the paths of the prefs originally
724 // in the managed platform, device management and recommended stores should
725 // change.
726 pref_value_store_->RefreshPolicyPrefs();
727
728 PrefChangeRecorder recorder;
729 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_))
730 .WillRepeatedly(Invoke(&recorder, &PrefChangeRecorder::Record));
731 loop_.RunAllPending();
732 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
733 }
734
735 TEST_F(PrefValueStorePolicyRefreshTest, TestRefreshPolicyPrefsCompletion) {
736 using policy::ConfigurationPolicyPrefStore;
737 PrefChangeRecorder recorder;
738 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_))
739 .WillRepeatedly(Invoke(&recorder, &PrefChangeRecorder::Record));
740
741 // Test changed preferences in the managed platform store and removed
742 // preferences in the recommended store. In addition to "homepage", the other
743 // prefs that are set by default in the test class are removed by the
744 // DummyStore.
745 scoped_ptr<ConfigurationPolicyPrefStore> new_managed_platform_store(
746 NewConfigurationPolicyPrefStore());
747 new_managed_platform_store->prefs()->SetString("homepage",
748 "some other changed homepage");
749
750 recorder.Clear();
751 pref_value_store_->RefreshPolicyPrefsCompletion(
752 new_managed_platform_store.release(),
753 NewConfigurationPolicyPrefStore(),
754 NewConfigurationPolicyPrefStore());
755 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
756
757 // Test properties that have been removed from the managed platform store.
758 // Homepage is still set in managed prefs.
759 expected_differing_paths_.clear();
760 expected_differing_paths_.insert(prefs::kHomePage);
761
762 recorder.Clear();
763 pref_value_store_->RefreshPolicyPrefsCompletion(
764 NewConfigurationPolicyPrefStore(),
765 NewConfigurationPolicyPrefStore(),
766 NewConfigurationPolicyPrefStore());
767 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
768
769 // Test properties that are added to the device management store.
770 expected_differing_paths_.clear();
771 expected_differing_paths_.insert(prefs::kHomePage);
772 scoped_ptr<ConfigurationPolicyPrefStore> new_device_management_store(
773 NewConfigurationPolicyPrefStore());
774 new_device_management_store->prefs()->SetString(
775 "homepage", "some other changed homepage");
776
777 recorder.Clear();
778 pref_value_store_->RefreshPolicyPrefsCompletion(
779 NewConfigurationPolicyPrefStore(),
780 new_device_management_store.release(),
781 NewConfigurationPolicyPrefStore());
782 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
783
784 // Test properties that are added to the recommended store.
785 scoped_ptr<ConfigurationPolicyPrefStore> new_recommended_store(
786 NewConfigurationPolicyPrefStore());
787 new_recommended_store->prefs()->SetString("homepage",
788 "some other changed homepage 2");
789 expected_differing_paths_.clear();
790 expected_differing_paths_.insert(prefs::kHomePage);
791
792 recorder.Clear();
793 pref_value_store_->RefreshPolicyPrefsCompletion(
794 NewConfigurationPolicyPrefStore(),
795 NewConfigurationPolicyPrefStore(),
796 new_recommended_store.release());
797 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
798
799 // Test adding a multi-key path.
800 new_managed_platform_store.reset(NewConfigurationPolicyPrefStore());
801 new_managed_platform_store->prefs()->SetString("segment1.segment2", "value");
802 expected_differing_paths_.clear();
803 expected_differing_paths_.insert(prefs::kHomePage);
804 expected_differing_paths_.insert("segment1");
805 expected_differing_paths_.insert("segment1.segment2");
806
807 recorder.Clear();
808 pref_value_store_->RefreshPolicyPrefsCompletion(
809 new_managed_platform_store.release(),
810 NewConfigurationPolicyPrefStore(),
811 NewConfigurationPolicyPrefStore());
812 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
813 }
814
815 TEST_F(PrefValueStorePolicyRefreshTest, TestConcurrentPolicyRefresh) {
816 PrefChangeRecorder recorder;
817 EXPECT_CALL(pref_notifier_, OnPreferenceChanged(_))
818 .WillRepeatedly(Invoke(&recorder, &PrefChangeRecorder::Record));
819
820 BrowserThread::PostTask(
821 BrowserThread::UI, FROM_HERE,
822 NewRunnableMethod(
823 pref_value_store_.get(),
824 &PrefValueStore::RefreshPolicyPrefs));
825
826 BrowserThread::PostTask(
827 BrowserThread::UI, FROM_HERE,
828 NewRunnableMethod(
829 pref_value_store_.get(),
830 &PrefValueStore::RefreshPolicyPrefs));
831
832 BrowserThread::PostTask(
833 BrowserThread::UI, FROM_HERE,
834 NewRunnableMethod(
835 pref_value_store_.get(),
836 &PrefValueStore::RefreshPolicyPrefs));
837
838 loop_.RunAllPending();
839 EXPECT_EQ(expected_differing_paths_, recorder.changed_prefs());
840 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698