info_map.h revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef EXTENSIONS_BROWSER_INFO_MAP_H_ 6#define EXTENSIONS_BROWSER_INFO_MAP_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/memory/ref_counted.h" 12#include "base/memory/scoped_ptr.h" 13#include "base/time/time.h" 14#include "extensions/browser/process_map.h" 15#include "extensions/browser/quota_service.h" 16#include "extensions/common/extension_set.h" 17#include "extensions/common/permissions/api_permission.h" 18 19namespace base { 20class FilePath; 21} 22 23namespace extensions { 24class ContentVerifier; 25class Extension; 26 27// Contains extension data that needs to be accessed on the IO thread. It can 28// be created/destroyed on any thread, but all other methods must be called on 29// the IO thread. 30class InfoMap : public base::RefCountedThreadSafe<InfoMap> { 31 public: 32 InfoMap(); 33 34 const ExtensionSet& extensions() const { return extensions_; } 35 const ExtensionSet& disabled_extensions() const { 36 return disabled_extensions_; 37 } 38 39 // Information about which extensions are assigned to which render processes. 40 const ProcessMap& process_map() const { return process_map_; } 41 // Information about which extensions are assigned to which worker processes. 42 const ProcessMap& worker_process_map() const { return worker_process_map_; } 43 44 // Callback for when new extensions are loaded. 45 void AddExtension(const extensions::Extension* extension, 46 base::Time install_time, 47 bool incognito_enabled, 48 bool notifications_disabled); 49 50 // Callback for when an extension is unloaded. 51 void RemoveExtension(const std::string& extension_id, 52 const extensions::UnloadedExtensionInfo::Reason reason); 53 54 // Returns the time the extension was installed, or base::Time() if not found. 55 base::Time GetInstallTime(const std::string& extension_id) const; 56 57 // Returns true if the user has allowed this extension to run in incognito 58 // mode. 59 bool IsIncognitoEnabled(const std::string& extension_id) const; 60 61 // Returns true if the given extension can see events and data from another 62 // sub-profile (incognito to original profile, or vice versa). 63 bool CanCrossIncognito(const extensions::Extension* extension) const; 64 65 // Adds an entry to process_map_. 66 void RegisterExtensionProcess(const std::string& extension_id, 67 int process_id, 68 int site_instance_id); 69 70 // Removes an entry from process_map_. 71 void UnregisterExtensionProcess(const std::string& extension_id, 72 int process_id, 73 int site_instance_id); 74 void UnregisterAllExtensionsInProcess(int process_id); 75 76 // Adds an entry to worker_process_map_. 77 void RegisterExtensionWorkerProcess(const std::string& extension_id, 78 int process_id, 79 int site_instance_id); 80 81 // Removes an entry from worker_process_map_. 82 void UnregisterExtensionWorkerProcess(int process_id); 83 84 // Returns the subset of extensions which has the same |origin| in 85 // |process_id| with the specified |permission|. 86 void GetExtensionsWithAPIPermissionForSecurityOrigin( 87 const GURL& origin, 88 int process_id, 89 extensions::APIPermission::ID permission, 90 ExtensionSet* extensions) const; 91 92 // Returns true if there is exists an extension with the same origin as 93 // |origin| in |process_id| with |permission|. 94 bool SecurityOriginHasAPIPermission(const GURL& origin, 95 int process_id, 96 extensions::APIPermission::ID permission) 97 const; 98 99 // Maps a |file_url| to a |file_path| on the local filesystem, including 100 // resources in extensions. Returns true on success. See NaClBrowserDelegate 101 // for full details. 102 bool MapUrlToLocalFilePath(const GURL& file_url, 103 bool use_blocking_api, 104 base::FilePath* file_path); 105 106 // Returns the IO thread QuotaService. Creates the instance on first call. 107 QuotaService* GetQuotaService(); 108 109 // Keep track of the signin process, so we can restrict extension access to 110 // it. 111 void SetSigninProcess(int process_id); 112 bool IsSigninProcess(int process_id) const; 113 114 // Notifications can be enabled/disabled in real time by the user. 115 void SetNotificationsDisabled(const std::string& extension_id, 116 bool notifications_disabled); 117 bool AreNotificationsDisabled(const std::string& extension_id) const; 118 119 void SetContentVerifier(ContentVerifier* verifier); 120 ContentVerifier* content_verifier() { return content_verifier_; } 121 122 private: 123 friend class base::RefCountedThreadSafe<InfoMap>; 124 125 // Extra dynamic data related to an extension. 126 struct ExtraData; 127 // Map of extension_id to ExtraData. 128 typedef std::map<std::string, ExtraData> ExtraDataMap; 129 130 ~InfoMap(); 131 132 ExtensionSet extensions_; 133 ExtensionSet disabled_extensions_; 134 135 // Extra data associated with enabled extensions. 136 ExtraDataMap extra_data_; 137 138 // Used by dispatchers to limit API quota for individual extensions. 139 // The QuotaService is not thread safe. We need to create and destroy it on 140 // the IO thread. 141 scoped_ptr<QuotaService> quota_service_; 142 143 // Assignment of extensions to renderer processes. 144 extensions::ProcessMap process_map_; 145 146 // Assignment of extensions to worker processes. 147 extensions::ProcessMap worker_process_map_; 148 149 int signin_process_id_; 150 151 scoped_refptr<ContentVerifier> content_verifier_; 152}; 153 154} // namespace extensions 155 156#endif // EXTENSIONS_BROWSER_INFO_MAP_H_ 157