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

Unified Diff: chrome/browser/prefs/pref_member.h

Issue 10857031: Move PrefMember and PrefChangeRegistrar to api directory. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge to parent Created 8 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/prefs/pref_change_registrar_unittest.cc ('k') | chrome/browser/prefs/pref_member.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_
« no previous file with comments | « chrome/browser/prefs/pref_change_registrar_unittest.cc ('k') | chrome/browser/prefs/pref_member.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698