| Index: chrome/browser/extensions/extension_pref_store.h
|
| ===================================================================
|
| --- chrome/browser/extensions/extension_pref_store.h (revision 0)
|
| +++ chrome/browser/extensions/extension_pref_store.h (revision 0)
|
| @@ -0,0 +1,87 @@
|
| +// Copyright (c) 2010 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.
|
| +
|
| +#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_PREF_STORE_H_
|
| +#define CHROME_BROWSER_EXTENSIONS_EXTENSION_PREF_STORE_H_
|
| +
|
| +#include <list>
|
| +#include <map>
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/scoped_ptr.h"
|
| +#include "chrome/common/pref_store.h"
|
| +
|
| +class DictionaryValue;
|
| +class PrefService;
|
| +class Value;
|
| +
|
| +// This PrefStore keeps track of preferences set by extensions: for example,
|
| +// proxy settings. A stack of relevant extension IDs is stored in order of
|
| +// their addition to this PrefStore. For each preference, the last-added
|
| +// enabled extension that tries to set it overrules any others.
|
| +class ExtensionPrefStore : public PrefStore {
|
| + public:
|
| + explicit ExtensionPrefStore(PrefService* pref_service);
|
| + virtual ~ExtensionPrefStore() {}
|
| +
|
| + // The PrefService creates the ExtensionPrefStore, so we need to be able to
|
| + // defer setting the PrefService here until after construction.
|
| + void SetPrefService(PrefService* pref_service) {
|
| + pref_service_ = pref_service;
|
| + }
|
| +
|
| + // Begins tracking the preference and value an extension wishes to set. This
|
| + // must be called each time an extension API tries to set a preference.
|
| + virtual void InstallExtensionPref(std::string extension_id,
|
| + const wchar_t* pref_path,
|
| + Value* pref_value);
|
| +
|
| + // Removes an extension and all its preference settings from this PrefStore.
|
| + // This must be called when an extension is uninstalled or disabled.
|
| + virtual void UninstallExtension(std::string extension_id);
|
| +
|
| + // PrefStore methods:
|
| + virtual DictionaryValue* prefs() { return prefs_.get(); }
|
| +
|
| + virtual PrefReadError ReadPrefs() { return PREF_READ_ERROR_NONE; }
|
| +
|
| + protected:
|
| + // Returns a vector of the extension IDs in the extension_stack_.
|
| + // This should only be accessed by subclasses for unit-testing.
|
| + void GetExtensionIDs(std::vector<std::string>* result);
|
| +
|
| + private:
|
| + // The pref service referring to this pref store. Weak reference.
|
| + PrefService* pref_service_;
|
| +
|
| + // Maps preference paths to their values.
|
| + typedef std::map<const wchar_t*, Value*> PrefValueMap;
|
| +
|
| + // Applies the highest-priority extension's setting for the given preference
|
| + // path, or clears the setting in this PrefStore if no extensions wish to
|
| + // control it.
|
| + void UpdateOnePref(const wchar_t* path);
|
| +
|
| + // Updates each preference in the |pref_values| list.
|
| + void UpdatePrefs(const PrefValueMap* pref_values);
|
| +
|
| + // A cache of the highest-priority values for each preference that any
|
| + // extension is controlling, for quick read access. Owns the stored values.
|
| + scoped_ptr<DictionaryValue> prefs_;
|
| +
|
| + // Associates an extension ID with the prefs it sets.
|
| + struct ExtensionPrefs {
|
| + std::string extension_id;
|
| + PrefValueMap* pref_values;
|
| + };
|
| +
|
| + // A pseudo-stack of extensions and their preferences. Extensions are always
|
| + // added to the head, but may be removed from the middle. This stack owns
|
| + // the values in the extensions' PrefValueMaps.
|
| + typedef std::list<ExtensionPrefs*> ExtensionStack;
|
| + ExtensionStack extension_stack_;
|
| +};
|
| +
|
| +#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PREF_STORE_H_
|
|
|
| Property changes on: chrome\browser\extensions\extension_pref_store.h
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|