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

Side by Side Diff: chrome/browser/pref_service.cc

Issue 2858060: Changing policy while Chrome is running should refresh preferences without relaunching (Closed)
Patch Set: changed name of mock Created 10 years, 4 months 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
« no previous file with comments | « chrome/browser/pref_service.h ('k') | chrome/browser/pref_value_store.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "chrome/browser/pref_service.h" 5 #include "chrome/browser/pref_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "app/l10n_util.h" 10 #include "app/l10n_util.h"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 pref_filename, 112 pref_filename,
113 ChromeThread::GetMessageLoopProxyForThread(ChromeThread::FILE)), 113 ChromeThread::GetMessageLoopProxyForThread(ChromeThread::FILE)),
114 /* user prefs */ 114 /* user prefs */
115 NULL /* no advised prefs */); 115 NULL /* no advised prefs */);
116 return new PrefService(value_store); 116 return new PrefService(value_store);
117 } 117 }
118 118
119 PrefService::PrefService(PrefValueStore* pref_value_store) 119 PrefService::PrefService(PrefValueStore* pref_value_store)
120 : pref_value_store_(pref_value_store) { 120 : pref_value_store_(pref_value_store) {
121 InitFromStorage(); 121 InitFromStorage();
122 registrar_.Add(this,
123 NotificationType(NotificationType::POLICY_CHANGED),
124 NotificationService::AllSources());
122 } 125 }
123 126
124 PrefService::~PrefService() { 127 PrefService::~PrefService() {
125 DCHECK(CalledOnValidThread()); 128 DCHECK(CalledOnValidThread());
126 129
127 // Verify that there are no pref observers when we shut down. 130 // Verify that there are no pref observers when we shut down.
128 for (PrefObserverMap::iterator it = pref_observers_.begin(); 131 for (PrefObserverMap::iterator it = pref_observers_.begin();
129 it != pref_observers_.end(); ++it) { 132 it != pref_observers_.end(); ++it) {
130 NotificationObserverList::Iterator obs_iterator(*(it->second)); 133 NotificationObserverList::Iterator obs_iterator(*(it->second));
131 if (obs_iterator.GetNext()) { 134 if (obs_iterator.GetNext()) {
(...skipping 687 matching lines...) Expand 10 before | Expand all | Expand 10 after
819 } 822 }
820 823
821 bool PrefService::Preference::IsExtensionControlled() const { 824 bool PrefService::Preference::IsExtensionControlled() const {
822 return pref_value_store_->PrefValueFromExtensionStore(name_.c_str()); 825 return pref_value_store_->PrefValueFromExtensionStore(name_.c_str());
823 } 826 }
824 827
825 bool PrefService::Preference::IsUserControlled() const { 828 bool PrefService::Preference::IsUserControlled() const {
826 return pref_value_store_->PrefValueFromUserStore(name_.c_str()); 829 return pref_value_store_->PrefValueFromUserStore(name_.c_str());
827 } 830 }
828 831
832 void PrefService::FireObserversForRefreshedManagedPrefs(
833 std::vector<std::string> changed_prefs_paths) {
834 DCHECK(CalledOnValidThread());
835 std::vector<std::string>::const_iterator current;
836 for (current = changed_prefs_paths.begin();
837 current != changed_prefs_paths.end();
838 ++current) {
839 FireObservers(UTF8ToWide(current->data()).data());
840 }
841 }
842
829 bool PrefService::Preference::IsUserModifiable() const { 843 bool PrefService::Preference::IsUserModifiable() const {
830 return pref_value_store_->PrefValueUserModifiable(name_.c_str()); 844 return pref_value_store_->PrefValueUserModifiable(name_.c_str());
831 } 845 }
846
847 void PrefService::Observe(NotificationType type,
848 const NotificationSource& source,
849 const NotificationDetails& details) {
850 if (type == NotificationType::POLICY_CHANGED) {
851 PrefValueStore::AfterRefreshCallback callback =
852 NewCallback(this,
853 &PrefService::FireObserversForRefreshedManagedPrefs);
854 // The notification of the policy refresh can come from any thread,
855 // but the manipulation of the PrefValueStore must happen on the UI
856 // thread, thus the policy refresh must be explicitly started on it.
857 ChromeThread::PostTask(
858 ChromeThread::UI, FROM_HERE,
859 NewRunnableMethod(
860 pref_value_store_.get(),
861 &PrefValueStore::RefreshPolicyPrefs,
862 ConfigurationPolicyPrefStore::CreateManagedPolicyPrefStore(),
863 ConfigurationPolicyPrefStore::CreateRecommendedPolicyPrefStore(),
864 callback));
865 }
866 }
OLDNEW
« no previous file with comments | « chrome/browser/pref_service.h ('k') | chrome/browser/pref_value_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698