extension_prefs.h revision 201ade2fbba22bfb27ae029f4d23fca6ded109a0
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 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 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/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 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Class for managing global and per-extension preferences. 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This class is instantiated by ExtensionsService, so it should be accessed 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// from there. 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionPrefs { 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Key name for a preference that keeps track of per-extension settings. This 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // is a dictionary object read from the Preferences file, keyed off of 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // extension ids. 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick static const char kExtensionsPref[]; 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::vector<linked_ptr<ExtensionInfo> > ExtensionsInfo; 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // This enum is used for the launch type the user wants to use for an 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // application. 33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Do not remove items or re-order this enum as it is used in preferences 34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // and histograms. 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick enum LaunchType { 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick LAUNCH_PINNED, 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick LAUNCH_REGULAR, 38201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LAUNCH_FULLSCREEN, 39201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LAUNCH_WINDOW 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick }; 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit ExtensionPrefs(PrefService* prefs, const FilePath& root_dir_); 43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ~ExtensionPrefs(); 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns a copy of the Extensions prefs. 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(erikkay) Remove this so that external consumers don't need to be 47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // aware of the internal structure of the preferences. 48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DictionaryValue* CopyCurrentExtensions(); 49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Populate |killed_ids| with extension ids that have been killed. 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void GetKilledExtensionIds(std::set<std::string>* killed_ids); 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get the order that toolstrip URLs appear in the shelf. 54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch typedef std::vector<GURL> URLList; 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLList GetShelfToolstripOrder(); 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets the order that toolstrip URLs appear in the shelf. 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetShelfToolstripOrder(const URLList& urls); 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Get the order that the browser actions appear in the toolbar. 61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::vector<std::string> GetToolbarOrder(); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Set the order that the browser actions appear in the toolbar. 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetToolbarOrder(const std::vector<std::string>& extension_ids); 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called when an extension is installed, so that prefs get created. 67513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void OnExtensionInstalled(const Extension* extension, 68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Extension::State initial_state, 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool initial_incognito_enabled); 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called when an extension is uninstalled, so that prefs get cleaned up. 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void OnExtensionUninstalled(const std::string& extension_id, 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const Extension::Location& location, 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool external_uninstall); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the state (enabled/disabled) of the given extension. 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Extension::State GetExtensionState(const std::string& extension_id); 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called to change the extension's state when it is enabled/disabled. 80513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void SetExtensionState(const Extension* extension, Extension::State); 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 82201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Getter and setter for browser action visibility. 83201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool GetBrowserActionVisibility(const Extension* extension); 84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void SetBrowserActionVisibility(const Extension* extension, bool visible); 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Did the extension ask to escalate its permission during an upgrade? 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool DidExtensionEscalatePermissions(const std::string& id); 88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If |did_escalate| is true, the preferences for |extension| will be set to 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // require the install warning when the user tries to enable. 91513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void SetDidExtensionEscalatePermissions(const Extension* extension, 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool did_escalate); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the version string for the currently installed extension, or 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the empty string if not found. 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string GetVersionString(const std::string& extension_id); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Re-writes the extension manifest into the prefs. 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Called to change the extension's manifest when it's re-localized. 100513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void UpdateManifest(const Extension* extension); 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns extension path based on extension ID, or empty FilePath on error. 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath GetExtensionPath(const std::string& extension_id); 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns base extensions install directory. 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath& install_directory() const { return install_directory_; } 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Updates the prefs based on the blacklist. 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UpdateBlacklist(const std::set<std::string>& blacklist_set); 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Based on extension id, checks prefs to see if it is blacklisted. 112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool IsExtensionBlacklisted(const std::string& id); 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Is the extension with |extension_id| allowed by policy (checking both 1153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // whitelist and blacklist). 1163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool IsExtensionAllowedByPolicy(const std::string& extension_id); 1173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the last value set via SetLastPingDay. If there isn't such a 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // pref, the returned Time will return true for is_null(). 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time LastPingDay(const std::string& extension_id) const; 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The time stored is based on the server's perspective of day start time, not 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the client's. 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetLastPingDay(const std::string& extension_id, const base::Time& time); 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 126201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Gets the permissions (|api_permissions|, |host_extent| and |full_access|) 127201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // granted to the extension with |extension_id|. |full_access| will be true 128201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // if the extension has all effective permissions (like from an NPAPI plugin). 129201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Returns false if the granted permissions haven't been initialized yet. 130201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // TODO(jstritar): Refractor the permissions into a class that encapsulates 131201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // all granted permissions, can be initialized from preferences or 132201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // a manifest file, and can be compared to each other. 133201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool GetGrantedPermissions(const std::string& extension_id, 134201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool* full_access, 135201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::set<std::string>* api_permissions, 136201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ExtensionExtent* host_extent); 137201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 138201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Adds the specified |api_permissions|, |host_extent| and |full_access| 139201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // to the granted permissions for extension with |extension_id|. 140201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // |full_access| should be set to true if the extension effectively has all 141201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // permissions (such as by having an NPAPI plugin). 142201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void AddGrantedPermissions(const std::string& extension_id, 143201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const bool full_access, 144201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::set<std::string>& api_permissions, 145201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const ExtensionExtent& host_extent); 146201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Similar to the 2 above, but for the extensions blacklist. 148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time BlacklistLastPingDay() const; 149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetBlacklistLastPingDay(const base::Time& time); 150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if the user enabled this extension to be loaded in incognito 152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // mode. 153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool IsIncognitoEnabled(const std::string& extension_id); 154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetIsIncognitoEnabled(const std::string& extension_id, bool enabled); 155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if the user has chosen to allow this extension to inject 157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // scripts into pages with file URLs. 158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool AllowFileAccess(const std::string& extension_id); 159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetAllowFileAccess(const std::string& extension_id, bool allow); 160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 161201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Get the launch type preference. If no preference is set, return 162201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // |default_pref_value|. 163201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LaunchType GetLaunchType(const std::string& extension_id, 164201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LaunchType default_pref_value); 165201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 1663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void SetLaunchType(const std::string& extension_id, LaunchType launch_type); 1673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 168201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Find the right launch container based on the launch type. 169201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // If |extension|'s prefs do not have a launch type set, then 170201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // use |default_pref_value|. 171201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch extension_misc::LaunchContainer GetLaunchContainer( 172201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const Extension* extension, 173201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch LaunchType default_pref_value); 174201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 175201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Saves ExtensionInfo for each installed extension with the path to the 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // version directory and the location. Blacklisted extensions won't be saved 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // and neither will external extensions the user has explicitly uninstalled. 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Caller takes ownership of returned structure. 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExtensionsInfo* GetInstalledExtensionsInfo(); 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the ExtensionInfo from the prefs for the given extension. If the 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // extension is not present, NULL is returned. 184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ExtensionInfo* GetInstalledExtensionInfo(const std::string& extension_id); 185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We've downloaded an updated .crx file for the extension, but are waiting 187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // for idle time to install it. 188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetIdleInstallInfo(const std::string& extension_id, 189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const FilePath& crx_path, 190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& version, 191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const base::Time& fetch_time); 192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Removes any idle install information we have for the given |extension_id|. 194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns true if there was info to remove; false otherwise. 195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool RemoveIdleInstallInfo(const std::string& extension_id); 196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // If we have idle install information for |extension_id|, this puts it into 198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // the out parameters and returns true. Otherwise returns false. 199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool GetIdleInstallInfo(const std::string& extension_id, 200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath* crx_path, 201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string* version, 202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time* fetch_time); 203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the extension id's that have idle install information. 205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::set<std::string> GetIdleInstallInfoIds(); 206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // We allow the web store to set a string containing login information when a 2083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // purchase is made, so that when a user logs into sync with a different 2093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // account we can recognize the situation. The Get function returns true if 2103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // there was previously stored data (placing it in |result|), or false 2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // otherwise. The Set will overwrite any previous login. 2123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool GetWebStoreLogin(std::string* result); 2133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void SetWebStoreLogin(const std::string& login); 2143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 215731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Get the application launch index for an extension with |extension_id|. This 216731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // determines the order of which the applications appear on the New Tab Page. 217731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // A value of 0 generally indicates top left. If the extension has no launch 218731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // index a -1 value is returned. 219731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int GetAppLaunchIndex(const std::string& extension_id); 220731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 221731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Sets a specific launch index for an extension with |extension_id|. 222731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void SetAppLaunchIndex(const std::string& extension_id, int index); 223731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 224731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // Gets the next available application launch index. This is 1 higher than the 225731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // highest current application launch index found. 226731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick int GetNextAppLaunchIndex(); 227731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 2284a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // The extension's update URL data. If not empty, the ExtensionUpdater 2294a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // will append a ap= parameter to the URL when checking if a new version 2304a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch // of the extension is available. 2314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch void SetUpdateUrlData(const std::string& extension_id, 2324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch const std::string& data); 2334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch std::string GetUpdateUrlData(const std::string& extension_id); 2344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void RegisterUserPrefs(PrefService* prefs); 236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The underlying PrefService. 238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PrefService* pref_service() const { return prefs_; } 239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Converts absolute paths in the pref to paths relative to the 242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // install_directory_. 243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void MakePathsRelative(); 244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Converts internal relative paths to be absolute. Used for export to 246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // consumers who expect full paths. 247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void MakePathsAbsolute(DictionaryValue* dict); 248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Sets the pref |key| for extension |id| to |value|. 250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UpdateExtensionPref(const std::string& id, 2513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& key, 252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Value* value); 253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Deletes the pref dictionary for extension |id|. 255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void DeleteExtensionPrefs(const std::string& id); 256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reads a boolean pref from |ext| with key |pref_key|. 258201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Return false if the value is false or |pref_key| does not exist. 2593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool ReadBooleanFromPref(DictionaryValue* ext, const std::string& pref_key); 260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Reads a boolean pref |pref_key| from extension with id |extension_id|. 262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool ReadExtensionPrefBoolean(const std::string& extension_id, 2633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& pref_key); 2643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Reads an integer pref from |ext| with key |pref_key|. 2663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Return false if the value does not exist. 2673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool ReadIntegerFromPref(DictionaryValue* ext, const std::string& pref_key, 2683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int* out_value); 2693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Reads an integer pref |pref_key| from extension with id |extension_id|. 2713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick bool ReadExtensionPrefInteger(const std::string& extension_id, 2723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const std::string& pref_key, 2733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int* out_value); 274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 275201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Reads a list pref |pref_key| from extension with id | extension_id|. 276201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool ReadExtensionPrefList(const std::string& extension_id, 277201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::string& pref_key, 278201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ListValue** out_value); 279201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 280201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Reads a list pref |pref_key| as a string set from the extension with 281201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // id |extension_id|. 282201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch bool ReadExtensionPrefStringSet(const std::string& extension_id, 283201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::string& pref_key, 284201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::set<std::string>* result); 285201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 286201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Adds the |added_values| to the value of |pref_key| for the extension 287201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // with id |extension_id| (the new value will be the union of the existing 288201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // value and |added_values|). 289201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch void AddToExtensionPrefStringSet(const std::string& extension_id, 290201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::string& pref_key, 291201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const std::set<std::string>& added_values); 292201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Ensures and returns a mutable dictionary for extension |id|'s prefs. 294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DictionaryValue* GetOrCreateExtensionPref(const std::string& id); 295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Same as above, but returns NULL if it doesn't exist. 297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DictionaryValue* GetExtensionPref(const std::string& id) const; 298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 2993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Serializes the data and schedules a persistent save via the |PrefService|. 3003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Additionally fires a PREF_CHANGED notification with the top-level 3013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // |kExtensionsPref| path set. 3023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TODO(andybons): Switch this to EXTENSION_PREF_CHANGED to be more granular. 3033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TODO(andybons): Use a ScopedPrefUpdate to update observers on changes to 3043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // the mutable extension dictionary. 3053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void SavePrefsAndNotify(); 3063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Checks if kPrefBlacklist is set to true in the DictionaryValue. 308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Return false if the value is false or kPrefBlacklist does not exist. 309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is used to decide if an extension is blacklisted. 310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool IsBlacklistBitSet(DictionaryValue* ext); 311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Helper methods for the public last ping day functions. 313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Time LastPingDayImpl(const DictionaryValue* dictionary) const; 314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void SetLastPingDayImpl(const base::Time& time, DictionaryValue* dictionary); 315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The pref service specific to this set of extension prefs. 317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PrefService* prefs_; 318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Base extensions install directory. 320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch FilePath install_directory_; 321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // The URLs of all of the toolstrips. 323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch URLList shelf_order_; 324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(ExtensionPrefs); 326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PREFS_H_ 329