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

Unified Diff: chrome/browser/pref_value_store.h

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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/pref_service.cc ('k') | chrome/browser/pref_value_store.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/pref_value_store.h
diff --git a/chrome/browser/pref_value_store.h b/chrome/browser/pref_value_store.h
index d54e2abdce9b54f5ddc33cf7800bcb05ebdbedcf..addb58075f838a0fd7d66ed615cd715c72a080ef 100644
--- a/chrome/browser/pref_value_store.h
+++ b/chrome/browser/pref_value_store.h
@@ -6,11 +6,18 @@
#define CHROME_BROWSER_PREF_VALUE_STORE_H_
#pragma once
+#include <string>
+#include <vector>
+
#include "base/basictypes.h"
+#include "base/callback.h"
#include "base/file_path.h"
+#include "base/gtest_prod_util.h"
+#include "base/ref_counted.h"
#include "base/string16.h"
#include "base/scoped_ptr.h"
#include "base/values.h"
+#include "chrome/browser/chrome_thread.h"
#include "chrome/common/pref_store.h"
class PrefStore;
@@ -27,7 +34,9 @@ class PrefStore;
// Otherwise user-defined values have a higher precedence than recommended
// values. Recommended preference values are set by a third person
// (like an admin).
-class PrefValueStore {
+// Unless otherwise explicitly noted, all of the methods of this class must
+// be called on the UI thread.
+class PrefValueStore : public base::RefCountedThreadSafe<PrefValueStore> {
public:
// In decreasing order of precedence:
// |managed_prefs| contains all managed (policy) preference values.
@@ -101,7 +110,28 @@ class PrefValueStore {
// there is no higher-priority source controlling it.
bool PrefValueUserModifiable(const wchar_t* name);
+ // Signature of callback triggered after policy refresh. Parameter is not
+ // passed as reference to prevent passing along a pointer to a set whose
+ // lifecycle is managed in another thread.
+ typedef Callback1<std::vector<std::string> >::Type* AfterRefreshCallback;
+
+ // Called as a result of a notification of policy change. Triggers a
+ // reload of managed preferences from policy. Caller must pass in
+ // new, uninitialized managed and recommended PrefStores in
+ // |managed_pref_store| and |recommended_pref_store| respectively, since
+ // PrefValueStore doesn't know about policy-specific PrefStores.
+ // |callback| is called with the set of preferences changed by the policy
+ // refresh. |callback| is called the caller's thread as a Task
+ // after RefreshPolicyPrefs has returned.
+ void RefreshPolicyPrefs(PrefStore* managed_pref_store,
+ PrefStore* recommended_pref_store,
+ AfterRefreshCallback callback);
+
private:
+ friend class PrefValueStoreTest;
+ FRIEND_TEST_ALL_PREFIXES(PrefValueStoreTest,
+ TestRefreshPolicyPrefsCompletion);
+
// PrefStores must be listed here in order from highest to lowest priority.
enum PrefStoreType {
// Not associated with an actual PrefStore but used as invalid marker, e.g.
@@ -124,6 +154,20 @@ class PrefValueStore {
// INVALID is returned.
PrefStoreType ControllingPrefStoreForPref(const wchar_t* name);
+ // Called during policy refresh after ReadPrefs completes on the thread
+ // that initiated the policy refresh.
+ void RefreshPolicyPrefsCompletion(
+ PrefStore* new_managed_pref_store,
+ PrefStore* new_recommended_pref_store,
+ AfterRefreshCallback callback);
+
+ // Called during policy refresh to do the ReadPrefs on the FILE thread.
+ void RefreshPolicyPrefsOnFileThread(
+ ChromeThread::ID calling_thread_id,
+ PrefStore* new_managed_pref_store,
+ PrefStore* new_recommended_pref_store,
+ AfterRefreshCallback callback);
+
DISALLOW_COPY_AND_ASSIGN(PrefValueStore);
};
« no previous file with comments | « chrome/browser/pref_service.cc ('k') | chrome/browser/pref_value_store.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698