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" 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_scoped_prefs.h" 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "components/browser_context_keyed_service/browser_context_keyed_service.h" 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/app_sorting.h" 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/constants.h" 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.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 PrefService; 27a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace content { 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class BrowserContext; 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace user_prefs { 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PrefRegistrySyncable; 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class AppSorting; 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ContentSettingsStore; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionPrefsUninstallExtension; 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class URLPatternSet; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Class for managing global and per-extension preferences. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class distinguishes the following kinds of preferences: 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - global preferences: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// internal state for the extension system in general, not associated 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// with an individual extension, such as lastUpdateTime. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - per-extension preferences: 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// meta-preferences describing properties of the extension like 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// installation time, whether the extension is enabled, etc. 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - extension controlled preferences: 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// browser preferences that an extension controls. For example, an 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// extension could use the proxy API to specify the browser's proxy 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// preference. Extension-controlled preferences are stored in 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// PrefValueStore::extension_prefs(), which this class populates and 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// maintains as the underlying extensions change. 587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class ExtensionPrefs : public ExtensionScopedPrefs, 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) public BrowserContextKeyedService { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<linked_ptr<ExtensionInfo> > ExtensionsInfo; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Vector containing identifiers for preferences. 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::set<std::string> PrefKeySet; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // This enum is used to store the reason an extension's install has been 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // delayed. Do not remove items or re-order this enum as it is used in 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // preferences. 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch enum DelayReason { 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DELAY_REASON_NONE = 0, 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DELAY_REASON_GC = 1, 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DELAY_REASON_WAIT_FOR_IDLE = 2, 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DELAY_REASON_WAIT_FOR_IMPORTS = 3, 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch }; 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates base::Time classes. The default implementation is just to return 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the current time, but tests can inject alternative implementations. 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) class TimeProvider { 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TimeProvider(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TimeProvider(); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // By default, returns the current time (base::Time::Now()). 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual base::Time GetCurrentTime() const; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TimeProvider); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // A wrapper around a ScopedUserPrefUpdate, which allows us to access the 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // entry of a particular key for an extension. Use this if you need a mutable 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // record of a dictionary or list in the current settings. Otherwise, prefer 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ReadPrefAsT() and UpdateExtensionPref() methods. 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) template <typename T, base::Value::Type type_enum_value> 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) class ScopedUpdate { 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedUpdate(ExtensionPrefs* prefs, 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& extension_id, 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key); 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~ScopedUpdate(); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns a mutable value for the key (ownership remains with the prefs), 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // if one exists. Otherwise, returns NULL. 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual T* Get(); 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Creates and returns a mutable value for the key (the prefs own the new 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // value), if one does not already exist. Otherwise, returns the current 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // value. 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual T* Create(); 112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScopedUpdate); 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DictionaryPrefUpdate update_; 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string extension_id_; 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string key_; 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }; 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef ScopedUpdate<base::DictionaryValue, base::Value::TYPE_DICTIONARY> 121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedDictionaryUpdate; 122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef ScopedUpdate<base::ListValue, base::Value::TYPE_LIST> 123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedListUpdate; 124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates and initializes an ExtensionPrefs object. 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Does not take ownership of |prefs| and |extension_pref_value_map|. 12790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // If |extensions_disabled| is true, extension controlled preferences and 12890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // content settings do not become effective. 12990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static ExtensionPrefs* Create( 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* prefs, 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& root_dir, 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map, 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<AppSorting> app_sorting, 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool extensions_disabled); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A version of Create which allows injection of a custom base::Time provider. 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Use this as needed for testing. 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, 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<AppSorting> app_sorting, 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool extensions_disabled, 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimeProvider> time_provider); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ExtensionPrefs(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 148a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Convenience function to get the ExtensionPrefs for a BrowserContext. 149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static ExtensionPrefs* Get(content::BrowserContext* context); 15090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (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 true if the specified external extension was uninstalled by the 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // user. 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsExternalExtensionUninstalled(const std::string& id) const; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks whether |extension_id| is disabled. If there's no state pref for 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the extension, this will return false. Generally you should use 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ExtensionService::IsExtensionEnabled instead. 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsExtensionDisabled(const std::string& id) const; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get/Set the order that the browser actions appear in the toolbar. 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionIdList GetToolbarOrder(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetToolbarOrder(const ExtensionIdList& extension_ids); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 169a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Gets the set of known disabled extension IDs into |id_set_out|. Returns 170a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // false iff the set of known disabled extension IDs hasn't been set yet. 171a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool GetKnownDisabled(ExtensionIdSet* id_set_out); 172a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 173a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Sets the set of known disabled extension IDs. 1744e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void SetKnownDisabled(const ExtensionIdSet& extension_ids); 1754e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when an extension is installed, so that prefs get created. 177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // |blacklisted_for_malware| should be set if the extension was included in a 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // blacklist due to being malware. If |page_ordinal| is an invalid ordinal, 179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // then a page will be found for the App. 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnExtensionInstalled(const Extension* extension, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension::State initial_state, 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool blacklisted_for_malware, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const syncer::StringOrdinal& page_ordinal); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called when an extension is uninstalled, so that prefs get cleaned up. 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnExtensionUninstalled(const std::string& extension_id, 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Manifest::Location& location, 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool external_uninstall); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called to change the extension's state when it is enabled/disabled. 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionState(const std::string& extension_id, Extension::State); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Populates |out| with the ids of all installed extensions. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetExtensions(ExtensionIdList* out); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ExtensionScopedPrefs methods: 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void UpdateExtensionPref(const std::string& id, 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key, 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Value* value) OVERRIDE; 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void DeleteExtensionPrefs(const std::string& id) OVERRIDE; 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsBoolean(const std::string& extension_id, 204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool* out_value) const OVERRIDE; 206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsInteger(const std::string& extension_id, 208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int* out_value) const OVERRIDE; 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsString(const std::string& extension_id, 212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string* out_value) const OVERRIDE; 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsList(const std::string& extension_id, 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::ListValue** out_value) const OVERRIDE; 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual bool ReadPrefAsDictionary( 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& extension_id, 221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue** out_value) const OVERRIDE; 223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual bool HasPrefForExtension(const std::string& extension_id) const 2257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) OVERRIDE; 2267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Did the extension ask to escalate its permission during an upgrade? 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool DidExtensionEscalatePermissions(const std::string& id); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If |did_escalate| is true, the preferences for |extension| will be set to 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // require the install warning when the user tries to enable. 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetDidExtensionEscalatePermissions( 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension, 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool did_escalate); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Getter and setters for disabled reason. 237f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int GetDisableReasons(const std::string& extension_id) const; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddDisableReason(const std::string& extension_id, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension::DisableReason disable_reason); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveDisableReason(const std::string& extension_id, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension::DisableReason disable_reason); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearDisableReasons(const std::string& extension_id); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Gets the set of extensions that have been blacklisted in prefs. 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::set<std::string> GetBlacklistedExtensions(); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets whether the extension with |id| is blacklisted. 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetExtensionBlacklisted(const std::string& extension_id, 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_blacklisted); 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the version string for the currently installed extension, or 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the empty string if not found. 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string GetVersionString(const std::string& extension_id); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Re-writes the extension manifest into the prefs. 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called to change the extension's manifest when it's re-localized. 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UpdateManifest(const Extension* extension); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns extension path based on extension ID, or empty FilePath on error. 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath GetExtensionPath(const std::string& extension_id); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns base extensions install directory. 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& install_directory() const { return install_directory_; } 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns whether the extension with |id| has its blacklist bit set. 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // WARNING: this only checks the extension's entry in prefs, so by definition 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // can only check extensions that prefs knows about. There may be other 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // sources of blacklist information, such as safebrowsing. You probably want 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to use Blacklist::GetBlacklistedIDs rather than this method. 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsExtensionBlacklisted(const std::string& id) const; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Increment the count of how many times we prompted the user to acknowledge 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the given extension, and return the new count. 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int IncrementAcknowledgePromptCount(const std::string& extension_id); 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the user has acknowledged an external extension. 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsExternalExtensionAcknowledged(const std::string& extension_id); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AcknowledgeExternalExtension(const std::string& extension_id); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether the user has acknowledged a blacklisted extension. 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsBlacklistedExtensionAcknowledged(const std::string& extension_id); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AcknowledgeBlacklistedExtension(const std::string& extension_id); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Whether the external extension was installed during the first run 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // of this profile. 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool IsExternalInstallFirstRun(const std::string& extension_id); 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetExternalInstallFirstRun(const std::string& extension_id); 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 290f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Whether the user has been notified about extension with |extension_id| 291f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // being wiped out. 292f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool HasWipeoutBeenAcknowledged(const std::string& extension_id); 293f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SetWipeoutAcknowledged(const std::string& extension_id, bool value); 294f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the extension notification code has already run for the 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // first time for this profile. Currently we use this flag to mean that any 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extensions that would trigger notifications should get silently 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // acknowledged. This is a fuse. Calling it the first time returns false. 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Subsequent calls return true. It's not possible through an API to ever 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reset it. Don't call it unless you mean it! 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool SetAlertSystemFirstRun(); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks if extensions are blacklisted by default, by policy. 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The ManagementPolicy::Provider methods also take this into account, and 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // should be used instead when the extension ID is known. 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool ExtensionsBlacklistedByDefault() const; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the last value set via SetLastPingDay. If there isn't such a 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // pref, the returned Time will return true for is_null(). 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time LastPingDay(const std::string& extension_id) const; 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The time stored is based on the server's perspective of day start time, not 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the client's. 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetLastPingDay(const std::string& extension_id, const base::Time& time); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Similar to the 2 above, but for the extensions blacklist. 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time BlacklistLastPingDay() const; 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetBlacklistLastPingDay(const base::Time& time); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Similar to LastPingDay/SetLastPingDay, but for sending "days since active" 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ping. 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time LastActivePingDay(const std::string& extension_id); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetLastActivePingDay(const std::string& extension_id, 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Time& time); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A bit we use for determining if we should send the "days since active" 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ping. A value of true means the item has been active (launched) since the 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // last update check. 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetActiveBit(const std::string& extension_id); 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetActiveBit(const std::string& extension_id, bool active); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the granted permission set for the extension with |extension_id|, 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and NULL if no preferences were found for |extension_id|. 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This passes ownership of the returned set to the caller. 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PermissionSet* GetGrantedPermissions(const std::string& extension_id); 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds |permissions| to the granted permissions set for the extension with 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |extension_id|. The new granted permissions set will be the union of 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |permissions| and the already granted permissions. 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddGrantedPermissions(const std::string& extension_id, 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionSet* permissions); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // As above, but subtracts the given |permissions| from the granted set. 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveGrantedPermissions(const std::string& extension_id, 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionSet* permissions); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Gets the active permission set for the specified extension. This may 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // differ from the permissions in the manifest due to the optional 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permissions API. This passes ownership of the set to the caller. 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PermissionSet* GetActivePermissions(const std::string& extension_id); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the active |permissions| for the extension with |extension_id|. 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetActivePermissions(const std::string& extension_id, 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionSet* permissions); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Records whether or not this extension is currently running. 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionRunning(const std::string& extension_id, bool is_running); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether or not this extension is marked as running. This is used to 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // restart apps across browser restarts. 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsExtensionRunning(const std::string& extension_id); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Set/Get whether or not the app is active. Used to force a launch of apps 3647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // that don't handle onRestarted() on a restart. We can only safely do that if 3657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // the app was active when it was last running. 3667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void SetIsActive(const std::string& extension_id, bool is_active); 3677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool IsActive(const std::string& extension_id); 36890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the user enabled this extension to be loaded in incognito 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // mode. 371a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // 3728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // IMPORTANT: you probably want to use extension_utils::IsIncognitoEnabled 373a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // instead of this method. 3748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool IsIncognitoEnabled(const std::string& extension_id) const; 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetIsIncognitoEnabled(const std::string& extension_id, bool enabled); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the user has chosen to allow this extension to inject 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // scripts into pages with file URLs. 3798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // 3808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // IMPORTANT: you probably want to use extension_utils::AllowFileAccess 3818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // instead of this method. 3828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool AllowFileAccess(const std::string& extension_id) const; 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetAllowFileAccess(const std::string& extension_id, bool allow); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasAllowFileAccessSetting(const std::string& extension_id) const; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Saves ExtensionInfo for each installed extension with the path to the 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // version directory and the location. Blacklisted extensions won't be saved 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and neither will external extensions the user has explicitly uninstalled. 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Caller takes ownership of returned structure. 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionsInfo> GetInstalledExtensionsInfo() const; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // Same as above, but only includes external extensions the user has 3933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // explicitly uninstalled. 3943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<ExtensionsInfo> GetUninstalledExtensionsInfo() const; 3953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the ExtensionInfo from the prefs for the given extension. If the 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // extension is not present, NULL is returned. 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ExtensionInfo> GetInstalledExtensionInfo( 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id) const; 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We've downloaded an updated .crx file for the extension, but are waiting 402eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // to install it. 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDelayedInstallInfo(const Extension* extension, 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Extension::State initial_state, 405f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool blacklisted_for_malware, 406eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DelayReason delay_reason, 4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const syncer::StringOrdinal& page_ordinal); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Removes any delayed install information we have for the given 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |extension_id|. Returns true if there was info to remove; false otherwise. 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool RemoveDelayedInstallInfo(const std::string& extension_id); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update the prefs to finish the update for an extension. 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool FinishDelayedInstallInfo(const std::string& extension_id); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the ExtensionInfo from the prefs for delayed install information 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // for |extension_id|, if we have any. Otherwise returns NULL. 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ExtensionInfo> GetDelayedInstallInfo( 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& extension_id) const; 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 421eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DelayReason GetDelayedInstallReason(const std::string& extension_id) const; 422eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns information about all the extensions that have delayed install 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // information. 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ExtensionsInfo> GetAllDelayedInstallInfo() const; 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the user repositioned the app on the app launcher via drag 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and drop. 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WasAppDraggedByUser(const std::string& extension_id); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets a flag indicating that the user repositioned the app on the app 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // launcher by drag and dropping it. 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetAppDraggedByUser(const std::string& extension_id); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if there is an extension which controls the preference value 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for |pref_key| *and* it is specific to incognito mode. 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasIncognitoPrefValue(const std::string& pref_key); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the creation flags mask for the extension. 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GetCreationFlags(const std::string& extension_id) const; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 442eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Returns the creation flags mask for a delayed install extension. 443eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int GetDelayedInstallCreationFlags(const std::string& extension_id) const; 444eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the extension was installed from the Chrome Web Store. 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsFromWebStore(const std::string& extension_id) const; 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the extension was installed from an App generated from a 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // bookmark. 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsFromBookmark(const std::string& extension_id) const; 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if the extension was installed as a default app. 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool WasInstalledByDefault(const std::string& extension_id) const; 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper method to acquire the installation time of an extension. 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns base::Time() if the installation time could not be parsed or 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // found. 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Time GetInstallTime(const std::string& extension_id) const; 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Gets/sets the last launch time of an extension. 4614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base::Time GetLastLaunchTime(const std::string& extension_id) const; 4624e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void SetLastLaunchTime(const std::string& extension_id, 4634e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const base::Time& time); 4644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool extensions_disabled() { return extensions_disabled_; } 4687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsStore* content_settings_store() { 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return content_settings_store_.get(); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The underlying PrefService. 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* pref_service() const { return prefs_; } 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 476f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // The underlying AppSorting. 477f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AppSorting* app_sorting() const { return app_sorting_.get(); } 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Describes the URLs that are able to install extensions. See 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // prefs::kExtensionAllowedInstallSites for more information. 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URLPatternSet GetAllowedInstallSites(); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Schedules garbage collection of an extension's on-disk data on the next 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // start of this ExtensionService. Applies only to extensions with isolated 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // storage. 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetNeedsStorageGarbageCollection(bool value); 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool NeedsStorageGarbageCollection(); 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Used by ShellWindowGeometryCache to persist its cache. These methods 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // should not be called directly. 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::DictionaryValue* GetGeometryCache( 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& extension_id) const; 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetGeometryCache(const std::string& extension_id, 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<base::DictionaryValue> cache); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 496f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Used for verification of installed extension ids. For the Set method, pass 497f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // null to remove the preference. 498f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::DictionaryValue* GetInstallSignature(); 499f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SetInstallSignature(const DictionaryValue* signature); 500f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ExtensionPrefsBlacklistedExtensions; // Unit test. 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class ExtensionPrefsUninstallExtension; // Unit test. 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // See the Create methods. 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefs(PrefService* prefs, 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& root_dir, 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map, 509f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<AppSorting> app_sorting, 51090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<TimeProvider> time_provider, 51190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool extensions_disabled); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts absolute paths in the pref to paths relative to the 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // install_directory_. 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MakePathsRelative(); 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts internal relative paths to be absolute. Used for export to 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // consumers who expect full paths. 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MakePathsAbsolute(base::DictionaryValue* dict); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 521c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Helper function used by GetInstalledExtensionInfo() and 522c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // GetDelayedInstallInfo() to construct an ExtensionInfo from the provided 523c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |extension| dictionary. 524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<ExtensionInfo> GetInstalledInfoHelper( 525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& extension_id, 526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue* extension) const; 527c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Interprets the list pref, |pref_key| in |extension_id|'s preferences, as a 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URLPatternSet. The |valid_schemes| specify how to parse the URLPatterns. 530c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool ReadPrefAsURLPatternSet(const std::string& extension_id, 531c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key, 532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) URLPatternSet* result, 533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int valid_schemes); 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts |new_value| to a list of strings and sets the |pref_key| pref 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // belonging to |extension_id|. 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionPrefURLPatternSet(const std::string& extension_id, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const URLPatternSet& new_value); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 541c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Read the boolean preference entry and return true if the preference exists 542c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // and the preference's value is true; false otherwise. 543c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool ReadPrefAsBooleanAndReturn(const std::string& extension_id, 544c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& key) const; 545c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Interprets |pref_key| in |extension_id|'s preferences as an 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PermissionSet, and passes ownership of the set to the caller. 548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PermissionSet* ReadPrefAsPermissionSet(const std::string& extension_id, 549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const std::string& pref_key); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts the |new_value| to its value and sets the |pref_key| pref 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // belonging to |extension_id|. 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetExtensionPrefPermissionSet(const std::string& extension_id, 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& pref_key, 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PermissionSet* new_value); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 557c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns an immutable dictionary for extension |id|'s prefs, or NULL if it 558c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // doesn't exist. 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::DictionaryValue* GetExtensionPref(const std::string& id) const; 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fix missing preference entries in the extensions that are were introduced 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // in a later Chrome version. 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void FixMissingPrefs(const ExtensionIdList& extension_ids); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Installs the persistent extension preferences into |prefs_|'s extension 56690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // pref store. Does nothing if extensions_disabled_ is true. 56790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void InitPrefStore(); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Migrates the permissions data in the pref store. 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MigratePermissions(const ExtensionIdList& extension_ids); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Migrates the disable reasons from a single enum to a bit mask. 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MigrateDisableReasons(const ExtensionIdList& extension_ids); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Checks whether there is a state pref for the extension and if so, whether 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it matches |check_state|. 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool DoesExtensionHaveState(const std::string& id, 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Extension::State check_state) const; 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 580a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Reads the list of strings for |pref| from user prefs into 581a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // |id_container_out|. Returns false if the pref wasn't found in the user 582a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // pref store. 5834e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) template <class ExtensionIdContainer> 584a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool GetUserExtensionPrefIntoContainer( 585a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const char* pref, 586a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ExtensionIdContainer* id_container_out); 5874e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 5884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // Writes the list of strings contained in |strings| to |pref| in prefs. 5894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) template <class ExtensionIdContainer> 5904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void SetExtensionPrefFromContainer(const char* pref, 5914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const ExtensionIdContainer& strings); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helper function to populate |extension_dict| with the values needed 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // by a newly installed extension. Work is broken up between this 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // function and FinishExtensionInfoPrefs() to accomodate delayed 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // installations. 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void PopulateExtensionInfoPrefs(const Extension* extension, 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time install_time, 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Extension::State initial_state, 600f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool blacklisted_for_malware, 601c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* extension_dict); 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helper function to complete initialization of the values in 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |extension_dict| for an extension install. Also see 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // PopulateExtensionInfoPrefs(). 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void FinishExtensionInfoPrefs( 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& extension_id, 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Time install_time, 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool needs_sort_ordinal, 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const syncer::StringOrdinal& suggested_page_ordinal, 611c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::DictionaryValue* extension_dict); 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The pref service specific to this set of extension prefs. Owned by profile. 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrefService* prefs_; 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Base extensions install directory. 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath install_directory_; 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Weak pointer, owned by Profile. 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionPrefValueMap* extension_pref_value_map_; 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Contains all the logic for handling the order for various extension 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // properties. 624f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<AppSorting> app_sorting_; 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<ContentSettingsStore> content_settings_store_; 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TimeProvider> time_provider_; 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 63090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool extensions_disabled_; 63190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ExtensionPrefs); 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFS_H_ 638