extension_prefs.h revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFS_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFS_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/linked_ptr.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/time.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/content_settings/content_settings_store.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_prefs_scope.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_scoped_prefs.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/prefs/scoped_user_pref_update.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/extension.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/url_pattern_set.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/api/string_ordinal.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefValueMap; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionSorting; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefService; 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs { 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySyncable; 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefsUninstallExtension; 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class URLPatternSet; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace app_file_handler_util { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct SavedFileEntry; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Class for managing global and per-extension preferences. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class distinguishes the following kinds of preferences: 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - global preferences: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// internal state for the extension system in general, not associated 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with an individual extension, such as lastUpdateTime. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - per-extension preferences: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// meta-preferences describing properties of the extension like 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// installation time, whether the extension is enabled, etc. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - extension controlled preferences: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// browser preferences that an extension controls. For example, an 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// extension could use the proxy API to specify the browser's proxy 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// preference. Extension-controlled preferences are stored in 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PrefValueStore::extension_prefs(), which this class populates and 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// maintains as the underlying extensions change. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefs : public ContentSettingsStore::Observer, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ExtensionScopedPrefs { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Key name for a preference that keeps track of per-extension settings. This 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is a dictionary object read from the Preferences file, keyed off of 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension ids. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kExtensionsPref[]; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<linked_ptr<ExtensionInfo> > ExtensionsInfo; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Vector containing identifiers for preferences. 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::set<std::string> PrefKeySet; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This enum is used for the launch type the user wants to use for an 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // application. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not remove items or re-order this enum as it is used in preferences 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and histograms. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum LaunchType { 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_PINNED, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_REGULAR, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_FULLSCREEN, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_WINDOW, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Launch an app in the in the way a click on the NTP would, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if no user pref were set. Update this constant to change 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the default for the NTP and chrome.management.launchApp(). 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_DEFAULT = LAUNCH_REGULAR 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates base::Time classes. The default implementation is just to return 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the current time, but tests can inject alternative implementations. 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TimeProvider { 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TimeProvider(); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TimeProvider(); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // By default, returns the current time (base::Time::Now()). 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual base::Time GetCurrentTime() const; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TimeProvider); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A wrapper around a ScopedUserPrefUpdate, which allows us to access the 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // entry of a particular key for an extension. Use this if you need a mutable 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // record of a dictionary or list in the current settings. Otherwise, prefer 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ReadPrefAsT() and UpdateExtensionPref() methods. 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) template <typename T, base::Value::Type type_enum_value> 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class ScopedUpdate { 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedUpdate(ExtensionPrefs* prefs, 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& extension_id, 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key); 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~ScopedUpdate(); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns a mutable value for the key (ownership remains with the prefs), 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // if one exists. Otherwise, returns NULL. 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual T* Get(); 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Creates and returns a mutable value for the key (the prefs own the new 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // value), if one does not already exist. Otherwise, returns the current 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // value. 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual T* Create(); 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScopedUpdate); 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DictionaryPrefUpdate update_; 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string extension_id_; 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string key_; 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef ScopedUpdate<base::DictionaryValue, base::Value::TYPE_DICTIONARY> 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedDictionaryUpdate; 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef ScopedUpdate<base::ListValue, base::Value::TYPE_LIST> 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedListUpdate; 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates and initializes an ExtensionPrefs object. 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Does not take ownership of |prefs| and |extension_pref_value_map|. 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<ExtensionPrefs> Create( 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* prefs, 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& root_dir, 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map, 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool extensions_disabled); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A version of Create which allows injection of a custom base::Time provider. 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Use this as needed for testing. 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<ExtensionPrefs> Create( 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* prefs, 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& root_dir, 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool extensions_disabled, 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimeProvider> time_provider); 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ExtensionPrefs(); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns all installed extensions from extension preferences provided by 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |pref_service|. This is exposed for ProtectedPrefsWatcher because it needs 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // access to the extension ID list before the ExtensionService is initialized. 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static ExtensionIdList GetExtensionsFrom(const PrefService* pref_service); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a copy of the Extensions prefs. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(erikkay) Remove this so that external consumers don't need to be 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // aware of the internal structure of the preferences. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DictionaryValue* CopyCurrentExtensions(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the specified external extension was uninstalled by the 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // user. 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsExternalExtensionUninstalled(const std::string& id) const; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks whether |extension_id| is disabled. If there's no state pref for 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the extension, this will return false. Generally you should use 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionService::IsExtensionEnabled instead. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsExtensionDisabled(const std::string& id) const; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get/Set the order that the browser actions appear in the toolbar. 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionIdList GetToolbarOrder(); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetToolbarOrder(const ExtensionIdList& extension_ids); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when an extension is installed, so that prefs get created. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |page_ordinal| is an invalid ordinal, then a page will be found 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for the App. 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnExtensionInstalled(const Extension* extension, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension::State initial_state, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const syncer::StringOrdinal& page_ordinal); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when an extension is uninstalled, so that prefs get cleaned up. 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnExtensionUninstalled(const std::string& extension_id, 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Manifest::Location& location, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool external_uninstall); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called to change the extension's state when it is enabled/disabled. 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionState(const std::string& extension_id, Extension::State); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Populates |out| with the ids of all installed extensions. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetExtensions(ExtensionIdList* out); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ExtensionScopedPrefs methods: 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void UpdateExtensionPref(const std::string& id, 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key, 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Value* value) OVERRIDE; 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DeleteExtensionPrefs(const std::string& id) OVERRIDE; 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsBoolean(const std::string& extension_id, 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool* out_value) const OVERRIDE; 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsInteger(const std::string& extension_id, 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int* out_value) const OVERRIDE; 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsString(const std::string& extension_id, 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string* out_value) const OVERRIDE; 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsList(const std::string& extension_id, 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::ListValue** out_value) const OVERRIDE; 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsDictionary( 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& extension_id, 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue** out_value) const OVERRIDE; 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Getter and setter for browser action visibility. 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetBrowserActionVisibility(const Extension* extension); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetBrowserActionVisibility(const Extension* extension, 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool visible); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Did the extension ask to escalate its permission during an upgrade? 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool DidExtensionEscalatePermissions(const std::string& id); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |did_escalate| is true, the preferences for |extension| will be set to 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // require the install warning when the user tries to enable. 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetDidExtensionEscalatePermissions( 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_escalate); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Getter and setters for disabled reason. 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GetDisableReasons(const std::string& extension_id); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddDisableReason(const std::string& extension_id, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension::DisableReason disable_reason); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveDisableReason(const std::string& extension_id, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension::DisableReason disable_reason); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearDisableReasons(const std::string& extension_id); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets the set of extensions that have been blacklisted in prefs. 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::set<std::string> GetBlacklistedExtensions(); 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets whether the extension with |id| is blacklisted. 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetExtensionBlacklisted(const std::string& extension_id, 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_blacklisted); 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the version string for the currently installed extension, or 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the empty string if not found. 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetVersionString(const std::string& extension_id); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Re-writes the extension manifest into the prefs. 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called to change the extension's manifest when it's re-localized. 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateManifest(const Extension* extension); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns extension path based on extension ID, or empty FilePath on error. 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath GetExtensionPath(const std::string& extension_id); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns base extensions install directory. 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& install_directory() const { return install_directory_; } 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns whether the extension with |id| has its blacklist bit set. 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // WARNING: this only checks the extension's entry in prefs, so by definition 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // can only check extensions that prefs knows about. There may be other 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // sources of blacklist information, such as safebrowsing. You probably want 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to use Blacklist::GetBlacklistedIDs rather than this method. 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsExtensionBlacklisted(const std::string& id) const; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Increment the count of how many times we prompted the user to acknowledge 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the given extension, and return the new count. 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int IncrementAcknowledgePromptCount(const std::string& extension_id); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the user has acknowledged an external extension. 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsExternalExtensionAcknowledged(const std::string& extension_id); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AcknowledgeExternalExtension(const std::string& extension_id); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the user has acknowledged a blacklisted extension. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsBlacklistedExtensionAcknowledged(const std::string& extension_id); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AcknowledgeBlacklistedExtension(const std::string& extension_id); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Whether the external extension was installed during the first run 284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // of this profile. 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool IsExternalInstallFirstRun(const std::string& extension_id); 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetExternalInstallFirstRun(const std::string& extension_id); 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the extension notification code has already run for the 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // first time for this profile. Currently we use this flag to mean that any 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extensions that would trigger notifications should get silently 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // acknowledged. This is a fuse. Calling it the first time returns false. 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Subsequent calls return true. It's not possible through an API to ever 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reset it. Don't call it unless you mean it! 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool SetAlertSystemFirstRun(); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks if extensions are blacklisted by default, by policy. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ManagementPolicy::Provider methods also take this into account, and 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should be used instead when the extension ID is known. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ExtensionsBlacklistedByDefault() const; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the last value set via SetLastPingDay. If there isn't such a 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pref, the returned Time will return true for is_null(). 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time LastPingDay(const std::string& extension_id) const; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The time stored is based on the server's perspective of day start time, not 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the client's. 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetLastPingDay(const std::string& extension_id, const base::Time& time); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Similar to the 2 above, but for the extensions blacklist. 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time BlacklistLastPingDay() const; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetBlacklistLastPingDay(const base::Time& time); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Similar to LastPingDay/SetLastPingDay, but for sending "days since active" 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ping. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time LastActivePingDay(const std::string& extension_id); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetLastActivePingDay(const std::string& extension_id, 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& time); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A bit we use for determining if we should send the "days since active" 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ping. A value of true means the item has been active (launched) since the 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // last update check. 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetActiveBit(const std::string& extension_id); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetActiveBit(const std::string& extension_id, bool active); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the granted permission set for the extension with |extension_id|, 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and NULL if no preferences were found for |extension_id|. 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This passes ownership of the returned set to the caller. 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PermissionSet* GetGrantedPermissions(const std::string& extension_id); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds |permissions| to the granted permissions set for the extension with 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |extension_id|. The new granted permissions set will be the union of 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |permissions| and the already granted permissions. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddGrantedPermissions(const std::string& extension_id, 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionSet* permissions); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As above, but subtracts the given |permissions| from the granted set. 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveGrantedPermissions(const std::string& extension_id, 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionSet* permissions); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the active permission set for the specified extension. This may 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // differ from the permissions in the manifest due to the optional 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permissions API. This passes ownership of the set to the caller. 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PermissionSet* GetActivePermissions(const std::string& extension_id); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the active |permissions| for the extension with |extension_id|. 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetActivePermissions(const std::string& extension_id, 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionSet* permissions); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if registered events are from this version of Chrome. Else, 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // clear them, and return false. 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CheckRegisteredEventsUpToDate(); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the list of events that the given extension has registered for. 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<std::string> GetRegisteredEvents(const std::string& extension_id); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetRegisteredEvents(const std::string& extension_id, 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<std::string>& events); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a filter to an event. 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddFilterToEvent(const std::string& event_name, 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 361c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue* filter); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes a filter from an event. 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveFilterFromEvent(const std::string& event_name, 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id, 366c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue* filter); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the dictionary of event filters that the given extension has 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // registered. 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue* GetFilteredEvents( 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id) const; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Records whether or not this extension is currently running. 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionRunning(const std::string& extension_id, bool is_running); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether or not this extension is marked as running. This is used to 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // restart apps across browser restarts. 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsExtensionRunning(const std::string& extension_id); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddSavedFileEntry(const std::string& extension_id, 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& id, 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& file_path, 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool writable); 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ClearSavedFileEntries(const std::string& extension_id); 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetSavedFileEntries( 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& extension_id, 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::vector<app_file_handler_util::SavedFileEntry>* out); 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the user enabled this extension to be loaded in incognito 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mode. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsIncognitoEnabled(const std::string& extension_id); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetIsIncognitoEnabled(const std::string& extension_id, bool enabled); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the user has chosen to allow this extension to inject 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // scripts into pages with file URLs. 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool AllowFileAccess(const std::string& extension_id); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetAllowFileAccess(const std::string& extension_id, bool allow); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasAllowFileAccessSetting(const std::string& extension_id) const; 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the launch type preference. If no preference is set, return 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |default_pref_value|. 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LaunchType GetLaunchType(const Extension* extension, 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchType default_pref_value); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetLaunchType(const std::string& extension_id, LaunchType launch_type); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the right launch container based on the launch type. 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |extension|'s prefs do not have a launch type set, then 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // use |default_pref_value|. 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_misc::LaunchContainer GetLaunchContainer( 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension, 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchType default_pref_value); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Saves ExtensionInfo for each installed extension with the path to the 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // version directory and the location. Blacklisted extensions won't be saved 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and neither will external extensions the user has explicitly uninstalled. 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Caller takes ownership of returned structure. 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionsInfo> GetInstalledExtensionsInfo() const; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the ExtensionInfo from the prefs for the given extension. If the 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension is not present, NULL is returned. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionInfo> GetInstalledExtensionInfo( 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id) const; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We've downloaded an updated .crx file for the extension, but are waiting 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for idle time to install it. 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDelayedInstallInfo(const Extension* extension, 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Extension::State initial_state, 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const syncer::StringOrdinal& page_ordinal); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Removes any delayed install information we have for the given 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |extension_id|. Returns true if there was info to remove; false otherwise. 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool RemoveDelayedInstallInfo(const std::string& extension_id); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the prefs to finish the update for an extension. 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool FinishDelayedInstallInfo(const std::string& extension_id); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the ExtensionInfo from the prefs for delayed install information 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for |extension_id|, if we have any. Otherwise returns NULL. 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ExtensionInfo> GetDelayedInstallInfo( 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id) const; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns information about all the extensions that have delayed install 4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // information. 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ExtensionsInfo> GetAllDelayedInstallInfo() const; 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We allow the web store to set a string containing login information when a 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // purchase is made, so that when a user logs into sync with a different 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // account we can recognize the situation. The Get function returns true if 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // there was previously stored data (placing it in |result|), or false 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // otherwise. The Set will overwrite any previous login. 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetWebStoreLogin(std::string* result); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetWebStoreLogin(const std::string& login); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the user repositioned the app on the app launcher via drag 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and drop. 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WasAppDraggedByUser(const std::string& extension_id); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets a flag indicating that the user repositioned the app on the app 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // launcher by drag and dropping it. 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetAppDraggedByUser(const std::string& extension_id); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The extension's update URL data. If not empty, the ExtensionUpdater 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will append a ap= parameter to the URL when checking if a new version 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // of the extension is available. 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetUpdateUrlData(const std::string& extension_id, 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& data); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetUpdateUrlData(const std::string& extension_id); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets a preference value that is controlled by the extension. In other 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // words, this is not a pref value *about* the extension but something 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // global the extension wants to override. 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Takes ownership of |value|. 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionControlledPref(const std::string& extension_id, 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPrefsScope scope, 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Value* value); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveExtensionControlledPref(const std::string& extension_id, 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPrefsScope scope); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if currently no extension with higher precedence controls the 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preference. 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CanExtensionControlPref(const std::string& extension_id, 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool incognito); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if extension |extension_id| currently controls the 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preference. If |from_incognito| is not NULL, looks at incognito preferences 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // first, and |from_incognito| is set to true if the effective pref value is 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // coming from the incognito preferences, false if it is coming from the 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // normal ones. 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool DoesExtensionControlPref(const std::string& extension_id, 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* from_incognito); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if there is an extension which controls the preference value 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for |pref_key| *and* it is specific to incognito mode. 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasIncognitoPrefValue(const std::string& pref_key); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears incognito session-only content settings for all extensions. 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearIncognitoSessionOnlyContentSettings(); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the creation flags mask for the extension. 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GetCreationFlags(const std::string& extension_id) const; 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the extension was installed from the Chrome Web Store. 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsFromWebStore(const std::string& extension_id) const; 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the extension was installed from an App generated from a 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bookmark. 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsFromBookmark(const std::string& extension_id) const; 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the extension was installed as a default app. 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WasInstalledByDefault(const std::string& extension_id) const; 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper method to acquire the installation time of an extension. 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns base::Time() if the installation time could not be parsed or 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // found. 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time GetInstallTime(const std::string& extension_id) const; 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static void RegisterUserPrefs(user_prefs::PrefRegistrySyncable* registry); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsStore* content_settings_store() { 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return content_settings_store_.get(); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The underlying PrefService. 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* pref_service() const { return prefs_; } 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The underlying ExtensionSorting. 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSorting* extension_sorting() const { 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_sorting_.get(); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Describes the URLs that are able to install extensions. See 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prefs::kExtensionAllowedInstallSites for more information. 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLPatternSet GetAllowedInstallSites(); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Schedules garbage collection of an extension's on-disk data on the next 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // start of this ExtensionService. Applies only to extensions with isolated 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // storage. 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetNeedsStorageGarbageCollection(bool value); 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool NeedsStorageGarbageCollection(); 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used by ShellWindowGeometryCache to persist its cache. These methods 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should not be called directly. 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue* GetGeometryCache( 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& extension_id) const; 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetGeometryCache(const std::string& extension_id, 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> cache); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The path of the directory containing the last file chosen by the user in 555c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // response to a chrome.fileSystem.chooseEntry() call for this extension. 556c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool GetLastChooseEntryDirectory(const std::string& extension_id, 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath* result) const; 558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetLastChooseEntryDirectory(const std::string& extension_id, 559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& value); 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ExtensionPrefsBlacklistedExtensions; // Unit test. 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ExtensionPrefsUninstallExtension; // Unit test. 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // See the Create methods. 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefs(PrefService* prefs, 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& root_dir, 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map, 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimeProvider> time_provider); 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If |extensions_disabled| is true, extension controlled preferences and 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // content settings do not become effective. 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Init(bool extensions_disabled); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extensions::ContentSettingsStore::Observer methods: 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnContentSettingChanged(const std::string& extension_id, 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool incognito) OVERRIDE; 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts absolute paths in the pref to paths relative to the 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // install_directory_. 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MakePathsRelative(); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts internal relative paths to be absolute. Used for export to 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // consumers who expect full paths. 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MakePathsAbsolute(base::DictionaryValue* dict); 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 587c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Helper function used by GetInstalledExtensionInfo() and 588c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // GetDelayedInstallInfo() to construct an ExtensionInfo from the provided 589c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |extension| dictionary. 590c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ExtensionInfo> GetInstalledInfoHelper( 591c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& extension_id, 592c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue* extension) const; 593c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Interprets the list pref, |pref_key| in |extension_id|'s preferences, as a 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLPatternSet. The |valid_schemes| specify how to parse the URLPatterns. 596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool ReadPrefAsURLPatternSet(const std::string& extension_id, 597c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 598c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) URLPatternSet* result, 599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int valid_schemes); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts |new_value| to a list of strings and sets the |pref_key| pref 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // belonging to |extension_id|. 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionPrefURLPatternSet(const std::string& extension_id, 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const URLPatternSet& new_value); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Read the boolean preference entry and return true if the preference exists 608c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // and the preference's value is true; false otherwise. 609c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool ReadPrefAsBooleanAndReturn(const std::string& extension_id, 610c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key) const; 611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Interprets |pref_key| in |extension_id|'s preferences as an 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PermissionSet, and passes ownership of the set to the caller. 614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PermissionSet* ReadPrefAsPermissionSet(const std::string& extension_id, 615c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts the |new_value| to its value and sets the |pref_key| pref 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // belonging to |extension_id|. 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionPrefPermissionSet(const std::string& extension_id, 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionSet* new_value); 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 623c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns an immutable dictionary for extension |id|'s prefs, or NULL if it 624c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // doesn't exist. 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue* GetExtensionPref(const std::string& id) const; 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Loads the preferences controlled by the specified extension from their 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // dictionary and sets them in the |pref_value_map_|. 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadExtensionControlledPrefs(const std::string& id, 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPrefsScope scope); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fix missing preference entries in the extensions that are were introduced 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in a later Chrome version. 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FixMissingPrefs(const ExtensionIdList& extension_ids); 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Installs the persistent extension preferences into |prefs_|'s extension 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pref store. Does nothing if |extensions_disabled| is true. 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitPrefStore(bool extensions_disabled); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Migrates the permissions data in the pref store. 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MigratePermissions(const ExtensionIdList& extension_ids); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Migrates the disable reasons from a single enum to a bit mask. 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MigrateDisableReasons(const ExtensionIdList& extension_ids); 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears the registered events for event pages. 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearRegisteredEvents(); 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks whether there is a state pref for the extension and if so, whether 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it matches |check_state|. 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool DoesExtensionHaveState(const std::string& id, 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension::State check_state) const; 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper function to Get/Set array of strings from/to prefs. 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionIdList GetExtensionPrefAsVector(const char* pref); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionPrefFromVector(const char* pref, 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ExtensionIdList& extension_ids); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helper function to populate |extension_dict| with the values needed 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // by a newly installed extension. Work is broken up between this 6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // function and FinishExtensionInfoPrefs() to accomodate delayed 6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // installations. 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void PopulateExtensionInfoPrefs(const Extension* extension, 6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time install_time, 6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Extension::State initial_state, 666c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* extension_dict); 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helper function to complete initialization of the values in 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |extension_dict| for an extension install. Also see 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // PopulateExtensionInfoPrefs(). 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FinishExtensionInfoPrefs( 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& extension_id, 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time install_time, 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool needs_sort_ordinal, 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const syncer::StringOrdinal& suggested_page_ordinal, 676c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* extension_dict); 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The pref service specific to this set of extension prefs. Owned by profile. 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs_; 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Base extensions install directory. 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath install_directory_; 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Weak pointer, owned by Profile. 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map_; 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Contains all the logic for handling the order for various extension 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // properties. 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionSorting> extension_sorting_; 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<ContentSettingsStore> content_settings_store_; 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimeProvider> time_provider_; 6942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ExtensionPrefs); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFS_H_ 701