Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Side by Side Diff: extensions/browser/info_map.cc

Issue 63933003: Moved ExtensionInfoMap and ExtensionsQuotaService to extensions/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comment fix Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « extensions/browser/info_map.h ('k') | extensions/browser/info_map_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/extension_info_map.h" 5 #include "extensions/browser/info_map.h"
6 6
7 #include "chrome/common/extensions/extension.h" 7 #include "chrome/common/extensions/extension.h"
8 #include "chrome/common/extensions/extension_set.h" 8 #include "chrome/common/extensions/extension_set.h"
9 #include "chrome/common/url_constants.h"
10 #include "content/public/browser/browser_thread.h" 9 #include "content/public/browser/browser_thread.h"
11 #include "extensions/common/constants.h" 10 #include "extensions/common/constants.h"
12 #include "extensions/common/manifest_handlers/incognito_info.h" 11 #include "extensions/common/manifest_handlers/incognito_info.h"
13 12
14 using content::BrowserThread; 13 using content::BrowserThread;
15 using extensions::Extension; 14
16 using extensions::UnloadedExtensionInfo; 15 namespace extensions {
17 16
18 namespace { 17 namespace {
19 18
20 void CheckOnValidThread() { 19 void CheckOnValidThread() {
21 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 20 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
22 } 21 }
23 22
24 } // namespace 23 } // namespace
25 24
26 struct ExtensionInfoMap::ExtraData { 25 struct InfoMap::ExtraData {
27 // When the extension was installed. 26 // When the extension was installed.
28 base::Time install_time; 27 base::Time install_time;
29 28
30 // True if the user has allowed this extension to run in incognito mode. 29 // True if the user has allowed this extension to run in incognito mode.
31 bool incognito_enabled; 30 bool incognito_enabled;
32 31
33 ExtraData(); 32 ExtraData();
34 ~ExtraData(); 33 ~ExtraData();
35 }; 34 };
36 35
37 ExtensionInfoMap::ExtraData::ExtraData() : incognito_enabled(false) {} 36 InfoMap::ExtraData::ExtraData() : incognito_enabled(false) {}
38 37
39 ExtensionInfoMap::ExtraData::~ExtraData() {} 38 InfoMap::ExtraData::~ExtraData() {}
40 39
41 ExtensionInfoMap::ExtensionInfoMap() : signin_process_id_(-1) {} 40 InfoMap::InfoMap() : signin_process_id_(-1) {}
42 41
43 const extensions::ProcessMap& ExtensionInfoMap::process_map() const { 42 const ProcessMap& InfoMap::process_map() const { return process_map_; }
44 return process_map_;
45 }
46 43
47 void ExtensionInfoMap::AddExtension(const Extension* extension, 44 void InfoMap::AddExtension(const Extension* extension,
48 base::Time install_time, 45 base::Time install_time,
49 bool incognito_enabled) { 46 bool incognito_enabled) {
50 CheckOnValidThread(); 47 CheckOnValidThread();
51 extensions_.Insert(extension); 48 extensions_.Insert(extension);
52 disabled_extensions_.Remove(extension->id()); 49 disabled_extensions_.Remove(extension->id());
53 50
54 extra_data_[extension->id()].install_time = install_time; 51 extra_data_[extension->id()].install_time = install_time;
55 extra_data_[extension->id()].incognito_enabled = incognito_enabled; 52 extra_data_[extension->id()].incognito_enabled = incognito_enabled;
56 } 53 }
57 54
58 void ExtensionInfoMap::RemoveExtension( 55 void InfoMap::RemoveExtension(const std::string& extension_id,
59 const std::string& extension_id, 56 const UnloadedExtensionInfo::Reason reason) {
60 const UnloadedExtensionInfo::Reason reason) {
61 CheckOnValidThread(); 57 CheckOnValidThread();
62 const Extension* extension = extensions_.GetByID(extension_id); 58 const Extension* extension = extensions_.GetByID(extension_id);
63 extra_data_.erase(extension_id); // we don't care about disabled extra data 59 extra_data_.erase(extension_id); // we don't care about disabled extra data
64 bool was_uninstalled = (reason != UnloadedExtensionInfo::REASON_DISABLE && 60 bool was_uninstalled = (reason != UnloadedExtensionInfo::REASON_DISABLE &&
65 reason != UnloadedExtensionInfo::REASON_TERMINATE); 61 reason != UnloadedExtensionInfo::REASON_TERMINATE);
66 if (extension) { 62 if (extension) {
67 if (!was_uninstalled) 63 if (!was_uninstalled)
68 disabled_extensions_.Insert(extension); 64 disabled_extensions_.Insert(extension);
69 extensions_.Remove(extension_id); 65 extensions_.Remove(extension_id);
70 } else if (was_uninstalled) { 66 } else if (was_uninstalled) {
71 // If the extension was uninstalled, make sure it's removed from the map of 67 // If the extension was uninstalled, make sure it's removed from the map of
72 // disabled extensions. 68 // disabled extensions.
73 disabled_extensions_.Remove(extension_id); 69 disabled_extensions_.Remove(extension_id);
74 } else { 70 } else {
75 // NOTE: This can currently happen if we receive multiple unload 71 // NOTE: This can currently happen if we receive multiple unload
76 // notifications, e.g. setting incognito-enabled state for a 72 // notifications, e.g. setting incognito-enabled state for a
77 // disabled extension (e.g., via sync). See 73 // disabled extension (e.g., via sync). See
78 // http://code.google.com/p/chromium/issues/detail?id=50582 . 74 // http://code.google.com/p/chromium/issues/detail?id=50582 .
79 NOTREACHED() << extension_id; 75 NOTREACHED() << extension_id;
80 } 76 }
81 } 77 }
82 78
83 base::Time ExtensionInfoMap::GetInstallTime( 79 base::Time InfoMap::GetInstallTime(const std::string& extension_id) const {
84 const std::string& extension_id) const {
85 ExtraDataMap::const_iterator iter = extra_data_.find(extension_id); 80 ExtraDataMap::const_iterator iter = extra_data_.find(extension_id);
86 if (iter != extra_data_.end()) 81 if (iter != extra_data_.end())
87 return iter->second.install_time; 82 return iter->second.install_time;
88 return base::Time(); 83 return base::Time();
89 } 84 }
90 85
91 bool ExtensionInfoMap::IsIncognitoEnabled( 86 bool InfoMap::IsIncognitoEnabled(const std::string& extension_id) const {
92 const std::string& extension_id) const {
93 // Keep in sync with duplicate in extension_process_manager.cc. 87 // Keep in sync with duplicate in extension_process_manager.cc.
94 ExtraDataMap::const_iterator iter = extra_data_.find(extension_id); 88 ExtraDataMap::const_iterator iter = extra_data_.find(extension_id);
95 if (iter != extra_data_.end()) 89 if (iter != extra_data_.end())
96 return iter->second.incognito_enabled; 90 return iter->second.incognito_enabled;
97 return false; 91 return false;
98 } 92 }
99 93
100 bool ExtensionInfoMap::CanCrossIncognito(const Extension* extension) const { 94 bool InfoMap::CanCrossIncognito(const Extension* extension) const {
101 // This is duplicated from ExtensionService :(. 95 // This is duplicated from ExtensionService :(.
102 return IsIncognitoEnabled(extension->id()) && 96 return IsIncognitoEnabled(extension->id()) &&
103 !extensions::IncognitoInfo::IsSplitMode(extension); 97 !IncognitoInfo::IsSplitMode(extension);
104 } 98 }
105 99
106 void ExtensionInfoMap::RegisterExtensionProcess(const std::string& extension_id, 100 void InfoMap::RegisterExtensionProcess(const std::string& extension_id,
107 int process_id, 101 int process_id,
108 int site_instance_id) { 102 int site_instance_id) {
109 if (!process_map_.Insert(extension_id, process_id, site_instance_id)) { 103 if (!process_map_.Insert(extension_id, process_id, site_instance_id)) {
110 NOTREACHED() << "Duplicate extension process registration for: " 104 NOTREACHED() << "Duplicate extension process registration for: "
111 << extension_id << "," << process_id << "."; 105 << extension_id << "," << process_id << ".";
112 } 106 }
113 } 107 }
114 108
115 void ExtensionInfoMap::UnregisterExtensionProcess( 109 void InfoMap::UnregisterExtensionProcess(const std::string& extension_id,
116 const std::string& extension_id, 110 int process_id,
117 int process_id, 111 int site_instance_id) {
118 int site_instance_id) {
119 if (!process_map_.Remove(extension_id, process_id, site_instance_id)) { 112 if (!process_map_.Remove(extension_id, process_id, site_instance_id)) {
120 NOTREACHED() << "Unknown extension process registration for: " 113 NOTREACHED() << "Unknown extension process registration for: "
121 << extension_id << "," << process_id << "."; 114 << extension_id << "," << process_id << ".";
122 } 115 }
123 } 116 }
124 117
125 void ExtensionInfoMap::UnregisterAllExtensionsInProcess(int process_id) { 118 void InfoMap::UnregisterAllExtensionsInProcess(int process_id) {
126 process_map_.RemoveAllFromProcess(process_id); 119 process_map_.RemoveAllFromProcess(process_id);
127 } 120 }
128 121
129 void ExtensionInfoMap::GetExtensionsWithAPIPermissionForSecurityOrigin( 122 void InfoMap::GetExtensionsWithAPIPermissionForSecurityOrigin(
130 const GURL& origin, 123 const GURL& origin,
131 int process_id, 124 int process_id,
132 extensions::APIPermission::ID permission, 125 APIPermission::ID permission,
133 ExtensionSet* extensions) const { 126 ExtensionSet* extensions) const {
134 DCHECK(extensions); 127 DCHECK(extensions);
135 128
136 if (origin.SchemeIs(extensions::kExtensionScheme)) { 129 if (origin.SchemeIs(kExtensionScheme)) {
137 const std::string& id = origin.host(); 130 const std::string& id = origin.host();
138 const Extension* extension = extensions_.GetByID(id); 131 const Extension* extension = extensions_.GetByID(id);
139 if (extension && extension->HasAPIPermission(permission) && 132 if (extension && extension->HasAPIPermission(permission) &&
140 process_map_.Contains(id, process_id)) { 133 process_map_.Contains(id, process_id)) {
141 extensions->Insert(extension); 134 extensions->Insert(extension);
142 } 135 }
143 return; 136 return;
144 } 137 }
145 138
146 ExtensionSet::const_iterator i = extensions_.begin(); 139 ExtensionSet::const_iterator i = extensions_.begin();
147 for (; i != extensions_.end(); ++i) { 140 for (; i != extensions_.end(); ++i) {
148 if ((*i)->web_extent().MatchesSecurityOrigin(origin) && 141 if ((*i)->web_extent().MatchesSecurityOrigin(origin) &&
149 process_map_.Contains((*i)->id(), process_id) && 142 process_map_.Contains((*i)->id(), process_id) &&
150 (*i)->HasAPIPermission(permission)) { 143 (*i)->HasAPIPermission(permission)) {
151 extensions->Insert(*i); 144 extensions->Insert(*i);
152 } 145 }
153 } 146 }
154 } 147 }
155 148
156 bool ExtensionInfoMap::SecurityOriginHasAPIPermission( 149 bool InfoMap::SecurityOriginHasAPIPermission(const GURL& origin,
157 const GURL& origin, int process_id, 150 int process_id,
158 extensions::APIPermission::ID permission) const { 151 APIPermission::ID permission)
152 const {
159 ExtensionSet extensions; 153 ExtensionSet extensions;
160 GetExtensionsWithAPIPermissionForSecurityOrigin( 154 GetExtensionsWithAPIPermissionForSecurityOrigin(
161 origin, process_id, permission, &extensions); 155 origin, process_id, permission, &extensions);
162 return !extensions.is_empty(); 156 return !extensions.is_empty();
163 } 157 }
164 158
165 ExtensionsQuotaService* ExtensionInfoMap::GetQuotaService() { 159 QuotaService* InfoMap::GetQuotaService() {
166 CheckOnValidThread(); 160 CheckOnValidThread();
167 if (!quota_service_) 161 if (!quota_service_)
168 quota_service_.reset(new ExtensionsQuotaService()); 162 quota_service_.reset(new QuotaService());
169 return quota_service_.get(); 163 return quota_service_.get();
170 } 164 }
171 165
172 void ExtensionInfoMap::SetSigninProcess(int process_id) { 166 void InfoMap::SetSigninProcess(int process_id) {
173 signin_process_id_ = process_id; 167 signin_process_id_ = process_id;
174 } 168 }
175 169
176 bool ExtensionInfoMap::IsSigninProcess(int process_id) const { 170 bool InfoMap::IsSigninProcess(int process_id) const {
177 return process_id == signin_process_id_; 171 return process_id == signin_process_id_;
178 } 172 }
179 173
180 ExtensionInfoMap::~ExtensionInfoMap() { 174 InfoMap::~InfoMap() {
181 if (quota_service_) { 175 if (quota_service_) {
182 BrowserThread::DeleteSoon(BrowserThread::IO, FROM_HERE, 176 BrowserThread::DeleteSoon(
183 quota_service_.release()); 177 BrowserThread::IO, FROM_HERE, quota_service_.release());
184 } 178 }
185 } 179 }
180
181 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/info_map.h ('k') | extensions/browser/info_map_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698