extension_prefs.h revision 90dce4d38c5ff5333bea97d859d4e484e27edf0c
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" 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_keyed_service.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "extensions/common/url_pattern_set.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/api/string_ordinal.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefValueMap; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionSorting; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrefService; 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class Profile; 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySyncable; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefsUninstallExtension; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class URLPatternSet; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Class for managing global and per-extension preferences. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class distinguishes the following kinds of preferences: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - global preferences: 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// internal state for the extension system in general, not associated 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with an individual extension, such as lastUpdateTime. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - per-extension preferences: 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// meta-preferences describing properties of the extension like 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// installation time, whether the extension is enabled, etc. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - extension controlled preferences: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// browser preferences that an extension controls. For example, an 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// extension could use the proxy API to specify the browser's proxy 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// preference. Extension-controlled preferences are stored in 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PrefValueStore::extension_prefs(), which this class populates and 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// maintains as the underlying extensions change. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefs : public ContentSettingsStore::Observer, 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public ExtensionScopedPrefs, 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public BrowserContextKeyedService { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Key name for a preference that keeps track of per-extension settings. This 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // is a dictionary object read from the Preferences file, keyed off of 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension ids. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const char kExtensionsPref[]; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Key for what version chrome was last time the extension prefs were loaded. 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static const char kExtensionsLastChromeVersion[]; 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<linked_ptr<ExtensionInfo> > ExtensionsInfo; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Vector containing identifiers for preferences. 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::set<std::string> PrefKeySet; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This enum is used for the launch type the user wants to use for an 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // application. 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not remove items or re-order this enum as it is used in preferences 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and histograms. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum LaunchType { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_PINNED, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_REGULAR, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_FULLSCREEN, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_WINDOW, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Launch an app in the in the way a click on the NTP would, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // if no user pref were set. Update this constant to change 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the default for the NTP and chrome.management.launchApp(). 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LAUNCH_DEFAULT = LAUNCH_REGULAR 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates base::Time classes. The default implementation is just to return 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the current time, but tests can inject alternative implementations. 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TimeProvider { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TimeProvider(); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TimeProvider(); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // By default, returns the current time (base::Time::Now()). 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual base::Time GetCurrentTime() const; 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TimeProvider); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A wrapper around a ScopedUserPrefUpdate, which allows us to access the 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // entry of a particular key for an extension. Use this if you need a mutable 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // record of a dictionary or list in the current settings. Otherwise, prefer 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ReadPrefAsT() and UpdateExtensionPref() methods. 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) template <typename T, base::Value::Type type_enum_value> 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class ScopedUpdate { 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedUpdate(ExtensionPrefs* prefs, 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& extension_id, 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key); 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~ScopedUpdate(); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns a mutable value for the key (ownership remains with the prefs), 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // if one exists. Otherwise, returns NULL. 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual T* Get(); 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Creates and returns a mutable value for the key (the prefs own the new 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // value), if one does not already exist. Otherwise, returns the current 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // value. 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual T* Create(); 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScopedUpdate); 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DictionaryPrefUpdate update_; 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string extension_id_; 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string key_; 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef ScopedUpdate<base::DictionaryValue, base::Value::TYPE_DICTIONARY> 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedDictionaryUpdate; 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef ScopedUpdate<base::ListValue, base::Value::TYPE_LIST> 132c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedListUpdate; 133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates and initializes an ExtensionPrefs object. 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Does not take ownership of |prefs| and |extension_pref_value_map|. 13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // If |extensions_disabled| is true, extension controlled preferences and 13790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // content settings do not become effective. 13890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static ExtensionPrefs* Create( 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* prefs, 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& root_dir, 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map, 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool extensions_disabled); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A version of Create which allows injection of a custom base::Time provider. 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Use this as needed for testing. 14690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static ExtensionPrefs* Create( 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* prefs, 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& root_dir, 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map, 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool extensions_disabled, 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimeProvider> time_provider); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ExtensionPrefs(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // BrowserContextKeyedService implementation. 15690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void Shutdown() OVERRIDE; 15790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Convenience function to get the ExtensionPrefs for a Profile. 15990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static ExtensionPrefs* Get(Profile* profile); 16090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns all installed extensions from extension preferences provided by 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |pref_service|. This is exposed for ProtectedPrefsWatcher because it needs 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // access to the extension ID list before the ExtensionService is initialized. 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static ExtensionIdList GetExtensionsFrom(const PrefService* pref_service); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the specified external extension was uninstalled by the 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // user. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsExternalExtensionUninstalled(const std::string& id) const; 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks whether |extension_id| is disabled. If there's no state pref for 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the extension, this will return false. Generally you should use 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionService::IsExtensionEnabled instead. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsExtensionDisabled(const std::string& id) const; 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get/Set the order that the browser actions appear in the toolbar. 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionIdList GetToolbarOrder(); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetToolbarOrder(const ExtensionIdList& extension_ids); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when an extension is installed, so that prefs get created. 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |page_ordinal| is an invalid ordinal, then a page will be found 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for the App. 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnExtensionInstalled(const Extension* extension, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension::State initial_state, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const syncer::StringOrdinal& page_ordinal); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when an extension is uninstalled, so that prefs get cleaned up. 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnExtensionUninstalled(const std::string& extension_id, 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Manifest::Location& location, 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool external_uninstall); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called to change the extension's state when it is enabled/disabled. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionState(const std::string& extension_id, Extension::State); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Populates |out| with the ids of all installed extensions. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetExtensions(ExtensionIdList* out); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ExtensionScopedPrefs methods: 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void UpdateExtensionPref(const std::string& id, 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key, 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Value* value) OVERRIDE; 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DeleteExtensionPrefs(const std::string& id) OVERRIDE; 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsBoolean(const std::string& extension_id, 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool* out_value) const OVERRIDE; 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsInteger(const std::string& extension_id, 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int* out_value) const OVERRIDE; 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsString(const std::string& extension_id, 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string* out_value) const OVERRIDE; 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsList(const std::string& extension_id, 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::ListValue** out_value) const OVERRIDE; 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsDictionary( 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& extension_id, 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue** out_value) const OVERRIDE; 224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (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) // Records whether or not this extension is currently running. 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionRunning(const std::string& extension_id, bool is_running); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether or not this extension is marked as running. This is used to 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // restart apps across browser restarts. 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsExtensionRunning(const std::string& extension_id); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 35690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Set/Get whether or not the extension has windows associated with it. Used 35790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // to force a launch of apps that don't handle onRestarted() on a restart. We 35890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // can only safely do that if the app had windows when it was last running. 35990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void SetHasWindows(const std::string& extension_id, bool has_windows); 36090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool HasWindows(const std::string& extension_id); 36190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the user enabled this extension to be loaded in incognito 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mode. 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsIncognitoEnabled(const std::string& extension_id); 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetIsIncognitoEnabled(const std::string& extension_id, bool enabled); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the user has chosen to allow this extension to inject 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // scripts into pages with file URLs. 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool AllowFileAccess(const std::string& extension_id); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetAllowFileAccess(const std::string& extension_id, bool allow); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasAllowFileAccessSetting(const std::string& extension_id) const; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get the launch type preference. If no preference is set, return 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |default_pref_value|. 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LaunchType GetLaunchType(const Extension* extension, 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchType default_pref_value); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetLaunchType(const std::string& extension_id, LaunchType launch_type); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Find the right launch container based on the launch type. 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |extension|'s prefs do not have a launch type set, then 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // use |default_pref_value|. 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) extension_misc::LaunchContainer GetLaunchContainer( 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension, 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchType default_pref_value); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Saves ExtensionInfo for each installed extension with the path to the 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // version directory and the location. Blacklisted extensions won't be saved 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and neither will external extensions the user has explicitly uninstalled. 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Caller takes ownership of returned structure. 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionsInfo> GetInstalledExtensionsInfo() const; 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the ExtensionInfo from the prefs for the given extension. If the 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension is not present, NULL is returned. 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionInfo> GetInstalledExtensionInfo( 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id) const; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We've downloaded an updated .crx file for the extension, but are waiting 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for idle time to install it. 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDelayedInstallInfo(const Extension* extension, 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Extension::State initial_state, 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const syncer::StringOrdinal& page_ordinal); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Removes any delayed install information we have for the given 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |extension_id|. Returns true if there was info to remove; false otherwise. 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool RemoveDelayedInstallInfo(const std::string& extension_id); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the prefs to finish the update for an extension. 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool FinishDelayedInstallInfo(const std::string& extension_id); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the ExtensionInfo from the prefs for delayed install information 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for |extension_id|, if we have any. Otherwise returns NULL. 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ExtensionInfo> GetDelayedInstallInfo( 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id) const; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns information about all the extensions that have delayed install 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // information. 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ExtensionsInfo> GetAllDelayedInstallInfo() const; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the user repositioned the app on the app launcher via drag 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and drop. 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WasAppDraggedByUser(const std::string& extension_id); 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets a flag indicating that the user repositioned the app on the app 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // launcher by drag and dropping it. 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetAppDraggedByUser(const std::string& extension_id); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The extension's uninstall URL. If not empty, ExtensionService will 42990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // load the URL when the extension is uninstalled. 43090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void SetUninstallUrl(const std::string& extension_id, 43190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const std::string& url_string); 43290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string GetUninstallUrl(const std::string& extension_id); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets a preference value that is controlled by the extension. In other 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // words, this is not a pref value *about* the extension but something 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // global the extension wants to override. 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Takes ownership of |value|. 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionControlledPref(const std::string& extension_id, 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPrefsScope scope, 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Value* value); 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveExtensionControlledPref(const std::string& extension_id, 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPrefsScope scope); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if currently no extension with higher precedence controls the 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preference. 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CanExtensionControlPref(const std::string& extension_id, 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool incognito); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if extension |extension_id| currently controls the 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // preference. If |from_incognito| is not NULL, looks at incognito preferences 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // first, and |from_incognito| is set to true if the effective pref value is 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // coming from the incognito preferences, false if it is coming from the 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // normal ones. 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool DoesExtensionControlPref(const std::string& extension_id, 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool* from_incognito); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if there is an extension which controls the preference value 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for |pref_key| *and* it is specific to incognito mode. 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasIncognitoPrefValue(const std::string& pref_key); 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clears incognito session-only content settings for all extensions. 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearIncognitoSessionOnlyContentSettings(); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the creation flags mask for the extension. 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GetCreationFlags(const std::string& extension_id) const; 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the extension was installed from the Chrome Web Store. 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsFromWebStore(const std::string& extension_id) const; 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the extension was installed from an App generated from a 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bookmark. 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsFromBookmark(const std::string& extension_id) const; 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the extension was installed as a default app. 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WasInstalledByDefault(const std::string& extension_id) const; 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper method to acquire the installation time of an extension. 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns base::Time() if the installation time could not be parsed or 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // found. 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time GetInstallTime(const std::string& extension_id) const; 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) static void RegisterUserPrefs(user_prefs::PrefRegistrySyncable* registry); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsStore* content_settings_store() { 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return content_settings_store_.get(); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The underlying PrefService. 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* pref_service() const { return prefs_; } 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The underlying ExtensionSorting. 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionSorting* extension_sorting() const { 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return extension_sorting_.get(); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Describes the URLs that are able to install extensions. See 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prefs::kExtensionAllowedInstallSites for more information. 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLPatternSet GetAllowedInstallSites(); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Schedules garbage collection of an extension's on-disk data on the next 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // start of this ExtensionService. Applies only to extensions with isolated 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // storage. 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetNeedsStorageGarbageCollection(bool value); 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool NeedsStorageGarbageCollection(); 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used by ShellWindowGeometryCache to persist its cache. These methods 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should not be called directly. 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue* GetGeometryCache( 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& extension_id) const; 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetGeometryCache(const std::string& extension_id, 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> cache); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 518c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The path of the directory containing the last file chosen by the user in 519c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // response to a chrome.fileSystem.chooseEntry() call for this extension. 520c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool GetLastChooseEntryDirectory(const std::string& extension_id, 521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath* result) const; 522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetLastChooseEntryDirectory(const std::string& extension_id, 523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& value); 524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ExtensionPrefsBlacklistedExtensions; // Unit test. 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ExtensionPrefsUninstallExtension; // Unit test. 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // See the Create methods. 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefs(PrefService* prefs, 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& root_dir, 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map, 53390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<TimeProvider> time_provider, 53490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool extensions_disabled); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extensions::ContentSettingsStore::Observer methods: 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnContentSettingChanged(const std::string& extension_id, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool incognito) OVERRIDE; 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts absolute paths in the pref to paths relative to the 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // install_directory_. 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MakePathsRelative(); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts internal relative paths to be absolute. Used for export to 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // consumers who expect full paths. 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MakePathsAbsolute(base::DictionaryValue* dict); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Helper function used by GetInstalledExtensionInfo() and 549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // GetDelayedInstallInfo() to construct an ExtensionInfo from the provided 550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |extension| dictionary. 551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ExtensionInfo> GetInstalledInfoHelper( 552c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& extension_id, 553c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue* extension) const; 554c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Interprets the list pref, |pref_key| in |extension_id|'s preferences, as a 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLPatternSet. The |valid_schemes| specify how to parse the URLPatterns. 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool ReadPrefAsURLPatternSet(const std::string& extension_id, 558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 559c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) URLPatternSet* result, 560c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int valid_schemes); 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts |new_value| to a list of strings and sets the |pref_key| pref 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // belonging to |extension_id|. 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionPrefURLPatternSet(const std::string& extension_id, 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const URLPatternSet& new_value); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 568c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Read the boolean preference entry and return true if the preference exists 569c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // and the preference's value is true; false otherwise. 570c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool ReadPrefAsBooleanAndReturn(const std::string& extension_id, 571c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key) const; 572c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Interprets |pref_key| in |extension_id|'s preferences as an 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PermissionSet, and passes ownership of the set to the caller. 575c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PermissionSet* ReadPrefAsPermissionSet(const std::string& extension_id, 576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts the |new_value| to its value and sets the |pref_key| pref 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // belonging to |extension_id|. 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionPrefPermissionSet(const std::string& extension_id, 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionSet* new_value); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns an immutable dictionary for extension |id|'s prefs, or NULL if it 585c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // doesn't exist. 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue* GetExtensionPref(const std::string& id) const; 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Loads the preferences controlled by the specified extension from their 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // dictionary and sets them in the |pref_value_map_|. 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadExtensionControlledPrefs(const std::string& id, 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPrefsScope scope); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fix missing preference entries in the extensions that are were introduced 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in a later Chrome version. 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FixMissingPrefs(const ExtensionIdList& extension_ids); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Installs the persistent extension preferences into |prefs_|'s extension 59890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // pref store. Does nothing if extensions_disabled_ is true. 59990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void InitPrefStore(); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Migrates the permissions data in the pref store. 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MigratePermissions(const ExtensionIdList& extension_ids); 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Migrates the disable reasons from a single enum to a bit mask. 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MigrateDisableReasons(const ExtensionIdList& extension_ids); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks whether there is a state pref for the extension and if so, whether 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it matches |check_state|. 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool DoesExtensionHaveState(const std::string& id, 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension::State check_state) const; 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper function to Get/Set array of strings from/to prefs. 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionIdList GetExtensionPrefAsVector(const char* pref); 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionPrefFromVector(const char* pref, 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ExtensionIdList& extension_ids); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helper function to populate |extension_dict| with the values needed 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // by a newly installed extension. Work is broken up between this 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // function and FinishExtensionInfoPrefs() to accomodate delayed 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // installations. 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void PopulateExtensionInfoPrefs(const Extension* extension, 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time install_time, 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Extension::State initial_state, 624c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* extension_dict); 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helper function to complete initialization of the values in 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |extension_dict| for an extension install. Also see 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // PopulateExtensionInfoPrefs(). 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FinishExtensionInfoPrefs( 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& extension_id, 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time install_time, 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool needs_sort_ordinal, 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const syncer::StringOrdinal& suggested_page_ordinal, 634c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* extension_dict); 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The pref service specific to this set of extension prefs. Owned by profile. 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs_; 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Base extensions install directory. 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath install_directory_; 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Weak pointer, owned by Profile. 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map_; 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Contains all the logic for handling the order for various extension 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // properties. 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionSorting> extension_sorting_; 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<ContentSettingsStore> content_settings_store_; 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimeProvider> time_provider_; 6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 65390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool extensions_disabled_; 65490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ExtensionPrefs); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFS_H_ 661