172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFS_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFS_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <set> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/linked_ptr.h" 14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/time.h" 153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/prefs/pref_service.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/extensions/extension.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h" 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenclass ExtensionPrefValueMap; 2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Class for managing global and per-extension preferences. 2221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// 2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// This class distinguishes the following kinds of preferences: 2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// - global preferences: 2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// internal state for the extension system in general, not associated 2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// with an individual extension, such as lastUpdateTime. 2721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// - per-extension preferences: 2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// meta-preferences describing properties of the extension like 2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// installation time, whether the extension is enabled, etc. 3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// - extension controlled preferences: 3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// browser preferences that an extension controls. For example, an 3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// extension could use the proxy API to specify the browser's proxy 3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// preference. Extension-controlled preferences are stored in 3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// PrefValueStore::extension_prefs(), which this class populates and 3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// maintains as the underlying extensions change. 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefs { 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Key name for a preference that keeps track of per-extension settings. This 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // is a dictionary object read from the Preferences file, keyed off of 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // extension ids. 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick static const char kExtensionsPref[]; 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::vector<linked_ptr<ExtensionInfo> > ExtensionsInfo; 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Vector containing identifiers for preferences. 4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen typedef std::set<std::string> PrefKeySet; 4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 4821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Vector containing identifiers for extensions. 4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen typedef std::vector<std::string> ExtensionIdSet; 5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // This enum is used for the launch type the user wants to use for an 523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // application. 53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Do not remove items or re-order this enum as it is used in preferences 54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // and histograms. 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick enum LaunchType { 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick LAUNCH_PINNED, 573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick LAUNCH_REGULAR, 58201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LAUNCH_FULLSCREEN, 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen LAUNCH_WINDOW, 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Launch an app in the in the way a click on the NTP would, 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // if no user pref were set. Update this constant to change 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // the default for the NTP and chrome.management.launchApp(). 6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen LAUNCH_DEFAULT = LAUNCH_REGULAR 653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick }; 663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Does not assume ownership of |prefs| and |incognito_prefs|. 6821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen explicit ExtensionPrefs(PrefService* prefs, 6921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const FilePath& root_dir, 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ExtensionPrefValueMap* extension_pref_value_map); 71ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen virtual ~ExtensionPrefs(); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns a copy of the Extensions prefs. 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(erikkay) Remove this so that external consumers don't need to be 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // aware of the internal structure of the preferences. 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DictionaryValue* CopyCurrentExtensions(); 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns true if the specified external extension was uninstalled by the 79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // user. 80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool IsExternalExtensionUninstalled(const std::string& id) const; 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get the order that toolstrip URLs appear in the shelf. 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::vector<GURL> URLList; 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLList GetShelfToolstripOrder(); 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets the order that toolstrip URLs appear in the shelf. 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetShelfToolstripOrder(const URLList& urls); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get the order that the browser actions appear in the toolbar. 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<std::string> GetToolbarOrder(); 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set the order that the browser actions appear in the toolbar. 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetToolbarOrder(const std::vector<std::string>& extension_ids); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called when an extension is installed, so that prefs get created. 96513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void OnExtensionInstalled(const Extension* extension, 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Extension::State initial_state, 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool initial_incognito_enabled); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called when an extension is uninstalled, so that prefs get cleaned up. 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnExtensionUninstalled(const std::string& extension_id, 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const Extension::Location& location, 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool external_uninstall); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the state (enabled/disabled) of the given extension. 10621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen Extension::State GetExtensionState(const std::string& extension_id) const; 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called to change the extension's state when it is enabled/disabled. 109513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void SetExtensionState(const Extension* extension, Extension::State); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 11172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Returns all installed extensions 11272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void GetExtensions(ExtensionIdSet* out); 11321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 114201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Getter and setter for browser action visibility. 115201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool GetBrowserActionVisibility(const Extension* extension); 116201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void SetBrowserActionVisibility(const Extension* extension, bool visible); 117201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Did the extension ask to escalate its permission during an upgrade? 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool DidExtensionEscalatePermissions(const std::string& id); 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If |did_escalate| is true, the preferences for |extension| will be set to 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // require the install warning when the user tries to enable. 123513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void SetDidExtensionEscalatePermissions(const Extension* extension, 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool did_escalate); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the version string for the currently installed extension, or 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the empty string if not found. 128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string GetVersionString(const std::string& extension_id); 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Re-writes the extension manifest into the prefs. 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called to change the extension's manifest when it's re-localized. 132513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void UpdateManifest(const Extension* extension); 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns extension path based on extension ID, or empty FilePath on error. 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath GetExtensionPath(const std::string& extension_id); 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns base extensions install directory. 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath& install_directory() const { return install_directory_; } 139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Updates the prefs based on the blacklist. 141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UpdateBlacklist(const std::set<std::string>& blacklist_set); 142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Based on extension id, checks prefs to see if it is blacklisted. 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool IsExtensionBlacklisted(const std::string& id); 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Is the extension with |extension_id| allowed by policy (checking both 1473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // whitelist and blacklist). 1483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool IsExtensionAllowedByPolicy(const std::string& extension_id); 1493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the last value set via SetLastPingDay. If there isn't such a 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // pref, the returned Time will return true for is_null(). 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time LastPingDay(const std::string& extension_id) const; 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The time stored is based on the server's perspective of day start time, not 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the client's. 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetLastPingDay(const std::string& extension_id, const base::Time& time); 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 158dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Similar to the 2 above, but for the extensions blacklist. 159dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen base::Time BlacklistLastPingDay() const; 160dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetBlacklistLastPingDay(const base::Time& time); 161dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Similar to LastPingDay/SetLastPingDay, but for sending "days since active" 163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // ping. 164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen base::Time LastActivePingDay(const std::string& extension_id); 165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetLastActivePingDay(const std::string& extension_id, 166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const base::Time& time); 167ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 168ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // A bit we use for determining if we should send the "days since active" 169ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // ping. A value of true means the item has been active (launched) since the 170ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // last update check. 171ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool GetActiveBit(const std::string& extension_id); 172ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetActiveBit(const std::string& extension_id, bool active); 173ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 174201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Gets the permissions (|api_permissions|, |host_extent| and |full_access|) 175201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // granted to the extension with |extension_id|. |full_access| will be true 176201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // if the extension has all effective permissions (like from an NPAPI plugin). 177201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Returns false if the granted permissions haven't been initialized yet. 178dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // TODO(jstritar): Refactor the permissions into a class that encapsulates 179201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // all granted permissions, can be initialized from preferences or 180201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // a manifest file, and can be compared to each other. 181201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool GetGrantedPermissions(const std::string& extension_id, 182201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool* full_access, 183201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::set<std::string>* api_permissions, 184201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ExtensionExtent* host_extent); 185201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 186201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Adds the specified |api_permissions|, |host_extent| and |full_access| 187201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // to the granted permissions for extension with |extension_id|. 188201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // |full_access| should be set to true if the extension effectively has all 189201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // permissions (such as by having an NPAPI plugin). 190201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void AddGrantedPermissions(const std::string& extension_id, 191201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const bool full_access, 192201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::set<std::string>& api_permissions, 193201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const ExtensionExtent& host_extent); 194201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if the user enabled this extension to be loaded in incognito 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // mode. 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool IsIncognitoEnabled(const std::string& extension_id); 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetIsIncognitoEnabled(const std::string& extension_id, bool enabled); 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if the user has chosen to allow this extension to inject 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // scripts into pages with file URLs. 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool AllowFileAccess(const std::string& extension_id); 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetAllowFileAccess(const std::string& extension_id, bool allow); 204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool HasAllowFileAccessSetting(const std::string& extension_id) const; 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 206201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Get the launch type preference. If no preference is set, return 207201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // |default_pref_value|. 208201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LaunchType GetLaunchType(const std::string& extension_id, 209201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LaunchType default_pref_value); 210201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void SetLaunchType(const std::string& extension_id, LaunchType launch_type); 2123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 213201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Find the right launch container based on the launch type. 214201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // If |extension|'s prefs do not have a launch type set, then 215201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // use |default_pref_value|. 216201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch extension_misc::LaunchContainer GetLaunchContainer( 217201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const Extension* extension, 218201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LaunchType default_pref_value); 219201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 220201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Saves ExtensionInfo for each installed extension with the path to the 222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // version directory and the location. Blacklisted extensions won't be saved 223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // and neither will external extensions the user has explicitly uninstalled. 224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Caller takes ownership of returned structure. 225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExtensionsInfo* GetInstalledExtensionsInfo(); 226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the ExtensionInfo from the prefs for the given extension. If the 228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // extension is not present, NULL is returned. 229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExtensionInfo* GetInstalledExtensionInfo(const std::string& extension_id); 230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We've downloaded an updated .crx file for the extension, but are waiting 232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // for idle time to install it. 233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetIdleInstallInfo(const std::string& extension_id, 234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath& crx_path, 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& version, 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const base::Time& fetch_time); 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Removes any idle install information we have for the given |extension_id|. 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if there was info to remove; false otherwise. 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool RemoveIdleInstallInfo(const std::string& extension_id); 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If we have idle install information for |extension_id|, this puts it into 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the out parameters and returns true. Otherwise returns false. 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool GetIdleInstallInfo(const std::string& extension_id, 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath* crx_path, 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string* version, 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time* fetch_time); 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the extension id's that have idle install information. 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::set<std::string> GetIdleInstallInfoIds(); 251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // We allow the web store to set a string containing login information when a 2533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // purchase is made, so that when a user logs into sync with a different 2543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // account we can recognize the situation. The Get function returns true if 2553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // there was previously stored data (placing it in |result|), or false 2563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // otherwise. The Set will overwrite any previous login. 2573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool GetWebStoreLogin(std::string* result); 2583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void SetWebStoreLogin(const std::string& login); 2593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 260731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Get the application launch index for an extension with |extension_id|. This 261731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // determines the order of which the applications appear on the New Tab Page. 262731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // A value of 0 generally indicates top left. If the extension has no launch 263731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // index a -1 value is returned. 264731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int GetAppLaunchIndex(const std::string& extension_id); 265731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 266731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Sets a specific launch index for an extension with |extension_id|. 267731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void SetAppLaunchIndex(const std::string& extension_id, int index); 268731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 269731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Gets the next available application launch index. This is 1 higher than the 270731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // highest current application launch index found. 271731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int GetNextAppLaunchIndex(); 272731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 27372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Sets the order the apps should be displayed in the app launcher. 27472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void SetAppLauncherOrder(const std::vector<std::string>& extension_ids); 27572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 276dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Get the application page index for an extension with |extension_id|. This 277dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // determines which page an app will appear on in page-based NTPs. If 278dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // the app has no page specified, -1 is returned. 279dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen int GetPageIndex(const std::string& extension_id); 280dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 281dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Sets a specific page index for an extension with |extension_id|. 282dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetPageIndex(const std::string& extension_id, int index); 283dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 284dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns true if the user repositioned the app on the app launcher via drag 285dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // and drop. 286dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool WasAppDraggedByUser(const std::string& extension_id); 287dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 288dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Sets a flag indicating that the user repositioned the app on the app 289dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // launcher by drag and dropping it. 290dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen void SetAppDraggedByUser(const std::string& extension_id); 291dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 2924a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The extension's update URL data. If not empty, the ExtensionUpdater 2934a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // will append a ap= parameter to the URL when checking if a new version 2944a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // of the extension is available. 2954a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void SetUpdateUrlData(const std::string& extension_id, 2964a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::string& data); 2974a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch std::string GetUpdateUrlData(const std::string& extension_id); 2984a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 29921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Sets a preference value that is controlled by the extension. In other 30021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // words, this is not a pref value *about* the extension but something 30121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // global the extension wants to override. 302dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Takes ownership of |value|. 30321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen void SetExtensionControlledPref(const std::string& extension_id, 30421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen const std::string& pref_key, 30572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool incognito, 30621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen Value* value); 30721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 30872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void RemoveExtensionControlledPref(const std::string& extension_id, 30972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const std::string& pref_key, 31072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen bool incognito); 31172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 312dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns true if currently no extension with higher precedence controls the 313dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // preference. 314dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool CanExtensionControlPref(const std::string& extension_id, 315dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& pref_key, 316dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool incognito); 317dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 318dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // Returns true if extension |extension_id| currently controls the 319dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // preference. 320dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool DoesExtensionControlPref(const std::string& extension_id, 321dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen const std::string& pref_key, 322dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen bool incognito); 323dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 324ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns true if there is an extension which controls the preference value 325ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // for |pref_key| *and* it is specific to incognito mode. 326ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool HasIncognitoPrefValue(const std::string& pref_key); 327ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void RegisterUserPrefs(PrefService* prefs); 329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The underlying PrefService. 331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PrefService* pref_service() const { return prefs_; } 332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen protected: 33421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // For unit testing. Enables injecting an artificial clock that is used 33521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // to query the current time, when an extension is installed. 33621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen virtual base::Time GetCurrentTime() const; 33721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Converts absolute paths in the pref to paths relative to the 340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // install_directory_. 341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void MakePathsRelative(); 342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Converts internal relative paths to be absolute. Used for export to 344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // consumers who expect full paths. 345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void MakePathsAbsolute(DictionaryValue* dict); 346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets the pref |key| for extension |id| to |value|. 348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UpdateExtensionPref(const std::string& id, 3493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& key, 350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Value* value); 351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Deletes the pref dictionary for extension |id|. 353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void DeleteExtensionPrefs(const std::string& id); 354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reads a boolean pref from |ext| with key |pref_key|. 356201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Return false if the value is false or |pref_key| does not exist. 357ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool ReadBooleanFromPref(const DictionaryValue* ext, 358ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& pref_key); 359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reads a boolean pref |pref_key| from extension with id |extension_id|. 361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool ReadExtensionPrefBoolean(const std::string& extension_id, 3623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& pref_key); 3633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Reads an integer pref from |ext| with key |pref_key|. 3653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Return false if the value does not exist. 366ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool ReadIntegerFromPref(const DictionaryValue* ext, 367ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& pref_key, 3683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int* out_value); 3693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Reads an integer pref |pref_key| from extension with id |extension_id|. 3713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool ReadExtensionPrefInteger(const std::string& extension_id, 3723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& pref_key, 3733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int* out_value); 374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 375201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Reads a list pref |pref_key| from extension with id | extension_id|. 376201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool ReadExtensionPrefList(const std::string& extension_id, 377201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::string& pref_key, 378ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const ListValue** out_value); 379201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 380201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Reads a list pref |pref_key| as a string set from the extension with 381201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // id |extension_id|. 382201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool ReadExtensionPrefStringSet(const std::string& extension_id, 383201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::string& pref_key, 384201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::set<std::string>* result); 385201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 386201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Adds the |added_values| to the value of |pref_key| for the extension 387201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // with id |extension_id| (the new value will be the union of the existing 388201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // value and |added_values|). 389201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void AddToExtensionPrefStringSet(const std::string& extension_id, 390201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::string& pref_key, 391201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::set<std::string>& added_values); 392201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 393ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Returns a dictionary for extension |id|'s prefs or NULL if it doesn't 394ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // exist. 395ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const DictionaryValue* GetExtensionPref(const std::string& id) const; 396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 39721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Returns the dictionary of preferences controlled by the specified extension 39872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // or creates a new one. All entries in the dictionary contain non-expanded 39921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // paths. 400ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const DictionaryValue* GetExtensionControlledPrefs( 401ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen const std::string& id) const; 40221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 4033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Serializes the data and schedules a persistent save via the |PrefService|. 4043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Additionally fires a PREF_CHANGED notification with the top-level 4053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // |kExtensionsPref| path set. 4063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TODO(andybons): Switch this to EXTENSION_PREF_CHANGED to be more granular. 407dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // TODO(andybons): Use a ScopedUserPrefUpdate to update observers on changes 408dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen // to the mutable extension dictionary. 409ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SavePrefs(); 4103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Checks if kPrefBlacklist is set to true in the DictionaryValue. 412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return false if the value is false or kPrefBlacklist does not exist. 413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is used to decide if an extension is blacklisted. 414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool IsBlacklistBitSet(DictionaryValue* ext); 415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 41621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Helper method to acquire the installation time of an extension. 41772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Returns base::Time() if the installation time could not be parsed or 41872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // found. 41921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen base::Time GetInstallTime(const std::string& extension_id) const; 42021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 42121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Fix missing preference entries in the extensions that are were introduced 42221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // in a later Chrome version. 42321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen void FixMissingPrefs(const ExtensionIdSet& extension_ids); 42421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 42521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // Installs the persistent extension preferences into |prefs_|'s extension 42621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen // pref store. 42721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen void InitPrefStore(); 42821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 42972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // The pref service specific to this set of extension prefs. Owned by profile. 430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PrefService* prefs_; 431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Base extensions install directory. 433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath install_directory_; 434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 43572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Weak pointer, owned by Profile. 43672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ExtensionPrefValueMap* extension_pref_value_map_; 43721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen 438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The URLs of all of the toolstrips. 439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLList shelf_order_; 440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ExtensionPrefs); 442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFS_H_ 445