Index: chrome/browser/prefs/pref_member.h |
diff --git a/chrome/browser/prefs/pref_member.h b/chrome/browser/prefs/pref_member.h |
deleted file mode 100644 |
index 493f34cf7127452d399809ddc1abbad12f21ddad..0000000000000000000000000000000000000000 |
--- a/chrome/browser/prefs/pref_member.h |
+++ /dev/null |
@@ -1,248 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
-// |
-// A helper class that stays in sync with a preference (bool, int, real, |
-// string or filepath). For example: |
-// |
-// class MyClass { |
-// public: |
-// MyClass(PrefService* prefs) { |
-// my_string_.Init(prefs::kHomePage, prefs, NULL /* no observer */); |
-// } |
-// private: |
-// StringPrefMember my_string_; |
-// }; |
-// |
-// my_string_ should stay in sync with the prefs::kHomePage pref and will |
-// update if either the pref changes or if my_string_.SetValue is called. |
-// |
-// An optional observer can be passed into the Init method which can be used to |
-// notify MyClass of changes. Note that if you use SetValue(), the observer |
-// will not be notified. |
- |
-#ifndef CHROME_BROWSER_PREFS_PREF_MEMBER_H_ |
-#define CHROME_BROWSER_PREFS_PREF_MEMBER_H_ |
- |
-#include <string> |
- |
-#include "base/basictypes.h" |
-#include "base/file_path.h" |
-#include "base/logging.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/values.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "content/public/browser/notification_observer.h" |
- |
-class PrefService; |
- |
-namespace subtle { |
- |
-class PrefMemberBase : public content::NotificationObserver { |
- protected: |
- class Internal : public base::RefCountedThreadSafe<Internal> { |
- public: |
- Internal(); |
- |
- // Update the value, either by calling |UpdateValueInternal| directly |
- // or by dispatching to the right thread. |
- // Takes ownership of |value|. |
- virtual void UpdateValue(base::Value* value, bool is_managed) const; |
- |
- void MoveToThread(content::BrowserThread::ID thread_id); |
- |
- // See PrefMember<> for description. |
- bool IsManaged() const { |
- return is_managed_; |
- } |
- |
- protected: |
- friend class base::RefCountedThreadSafe<Internal>; |
- virtual ~Internal(); |
- |
- void CheckOnCorrectThread() const { |
- DCHECK(IsOnCorrectThread()); |
- } |
- |
- private: |
- // This method actually updates the value. It should only be called from |
- // the thread the PrefMember is on. |
- virtual bool UpdateValueInternal(const base::Value& value) const = 0; |
- |
- bool IsOnCorrectThread() const; |
- |
- content::BrowserThread::ID thread_id_; |
- mutable bool is_managed_; |
- |
- DISALLOW_COPY_AND_ASSIGN(Internal); |
- }; |
- |
- PrefMemberBase(); |
- virtual ~PrefMemberBase(); |
- |
- // See PrefMember<> for description. |
- void Init(const char* pref_name, PrefService* prefs, |
- content::NotificationObserver* observer); |
- |
- virtual void CreateInternal() const = 0; |
- |
- // See PrefMember<> for description. |
- void Destroy(); |
- |
- void MoveToThread(content::BrowserThread::ID thread_id); |
- |
- // content::NotificationObserver |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE; |
- |
- void VerifyValuePrefName() const { |
- DCHECK(!pref_name_.empty()); |
- } |
- |
- // This method is used to do the actual sync with the preference. |
- // Note: it is logically const, because it doesn't modify the state |
- // seen by the outside world. It is just doing a lazy load behind the scenes. |
- virtual void UpdateValueFromPref() const; |
- |
- // Verifies the preference name, and lazily loads the preference value if |
- // it hasn't been loaded yet. |
- void VerifyPref() const; |
- |
- const std::string& pref_name() const { return pref_name_; } |
- PrefService* prefs() { return prefs_; } |
- const PrefService* prefs() const { return prefs_; } |
- |
- virtual Internal* internal() const = 0; |
- |
- private: |
- // Ordered the members to compact the class instance. |
- std::string pref_name_; |
- content::NotificationObserver* observer_; |
- PrefService* prefs_; |
- |
- protected: |
- bool setting_value_; |
-}; |
- |
-} // namespace subtle |
- |
-template <typename ValueType> |
-class PrefMember : public subtle::PrefMemberBase { |
- public: |
- // Defer initialization to an Init method so it's easy to make this class be |
- // a member variable. |
- PrefMember() {} |
- virtual ~PrefMember() {} |
- |
- // Do the actual initialization of the class. |observer| may be null if you |
- // don't want any notifications of changes. |
- // This method should only be called on the UI thread. |
- void Init(const char* pref_name, PrefService* prefs, |
- content::NotificationObserver* observer) { |
- subtle::PrefMemberBase::Init(pref_name, prefs, observer); |
- } |
- |
- // Unsubscribes the PrefMember from the PrefService. After calling this |
- // function, the PrefMember may not be used any more. |
- // This method should only be called on the UI thread. |
- void Destroy() { |
- subtle::PrefMemberBase::Destroy(); |
- } |
- |
- // Moves the PrefMember to another thread, allowing read accesses from there. |
- // Changes from the PrefService will be propagated asynchronously |
- // via PostTask. |
- // This method should only be used from the thread the PrefMember is currently |
- // on, which is the UI thread by default. |
- void MoveToThread(content::BrowserThread::ID thread_id) { |
- subtle::PrefMemberBase::MoveToThread(thread_id); |
- } |
- |
- // Check whether the pref is managed, i.e. controlled externally through |
- // enterprise configuration management (e.g. windows group policy). Returns |
- // false for unknown prefs. |
- // This method should only be used from the thread the PrefMember is currently |
- // on, which is the UI thread unless changed by |MoveToThread|. |
- bool IsManaged() const { |
- VerifyPref(); |
- return internal_->IsManaged(); |
- } |
- |
- // Retrieve the value of the member variable. |
- // This method should only be used from the thread the PrefMember is currently |
- // on, which is the UI thread unless changed by |MoveToThread|. |
- ValueType GetValue() const { |
- VerifyPref(); |
- return internal_->value(); |
- } |
- |
- // Provided as a convenience. |
- ValueType operator*() const { |
- return GetValue(); |
- } |
- |
- // Set the value of the member variable. |
- // This method should only be called on the UI thread. |
- void SetValue(const ValueType& value) { |
- VerifyValuePrefName(); |
- setting_value_ = true; |
- UpdatePref(value); |
- setting_value_ = false; |
- } |
- |
- // Set the value of the member variable if it is not managed. |
- // This method should only be called on the UI thread. |
- void SetValueIfNotManaged(const ValueType& value) { |
- if (!IsManaged()) { |
- SetValue(value); |
- } |
- } |
- |
- // Returns the pref name. |
- const std::string& GetPrefName() const { |
- return pref_name(); |
- } |
- |
- private: |
- class Internal : public subtle::PrefMemberBase::Internal { |
- public: |
- Internal() : value_(ValueType()) {} |
- |
- ValueType value() { |
- CheckOnCorrectThread(); |
- return value_; |
- } |
- |
- protected: |
- virtual ~Internal() {} |
- |
- virtual bool UpdateValueInternal(const base::Value& value) const; |
- |
- // We cache the value of the pref so we don't have to keep walking the pref |
- // tree. |
- mutable ValueType value_; |
- |
- DISALLOW_COPY_AND_ASSIGN(Internal); |
- }; |
- |
- virtual Internal* internal() const { return internal_; } |
- virtual void CreateInternal() const { |
- internal_ = new Internal(); |
- } |
- |
- // This method is used to do the actual sync with pref of the specified type. |
- virtual void UpdatePref(const ValueType& value); |
- |
- mutable scoped_refptr<Internal> internal_; |
- |
- DISALLOW_COPY_AND_ASSIGN(PrefMember); |
-}; |
- |
-typedef PrefMember<bool> BooleanPrefMember; |
-typedef PrefMember<int> IntegerPrefMember; |
-typedef PrefMember<double> DoublePrefMember; |
-typedef PrefMember<std::string> StringPrefMember; |
-typedef PrefMember<FilePath> FilePathPrefMember; |
- |
-#endif // CHROME_BROWSER_PREFS_PREF_MEMBER_H_ |