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

Side by Side Diff: chrome/common/extensions/extension_permission_set.cc

Issue 8598022: Restrict access to permissions based on extension types. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/common/extensions/extension_permission_set.h" 5 #include "chrome/common/extensions/extension_permission_set.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "base/memory/singleton.h" 10 #include "base/memory/singleton.h"
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 ExtensionPermissionMessage ExtensionAPIPermission::GetMessage() const { 153 ExtensionPermissionMessage ExtensionAPIPermission::GetMessage() const {
154 return ExtensionPermissionMessage( 154 return ExtensionPermissionMessage(
155 message_id_, l10n_util::GetStringUTF16(l10n_message_id_)); 155 message_id_, l10n_util::GetStringUTF16(l10n_message_id_));
156 } 156 }
157 157
158 ExtensionAPIPermission::ExtensionAPIPermission( 158 ExtensionAPIPermission::ExtensionAPIPermission(
159 ID id, 159 ID id,
160 const char* name, 160 const char* name,
161 int l10n_message_id, 161 int l10n_message_id,
162 ExtensionPermissionMessage::ID message_id, 162 ExtensionPermissionMessage::ID message_id,
163 int flags) 163 int flags,
164 int type_restrictions)
164 : id_(id), 165 : id_(id),
165 name_(name), 166 name_(name),
166 flags_(flags), 167 flags_(flags),
168 type_restrictions_(type_restrictions),
167 l10n_message_id_(l10n_message_id), 169 l10n_message_id_(l10n_message_id),
168 message_id_(message_id) { 170 message_id_(message_id) {}
169 }
170 171
171 ExtensionAPIPermission::~ExtensionAPIPermission() { 172 ExtensionAPIPermission::~ExtensionAPIPermission() {}
173
174 // static
175 void ExtensionAPIPermission::RegisterAllPermissions(
176 ExtensionPermissionsInfo* info) {
177
178 // Register hosted app permissions.
179 info->RegisterPermission(
180 kBackground, "background", 0,
181 ExtensionPermissionMessage::kNone, kFlagSupportsOptional, kTypeAll);
182 info->RegisterPermission(
183 kClipboardRead, "clipboardRead", IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD,
184 ExtensionPermissionMessage::kClipboard, kFlagSupportsOptional, kTypeAll);
185 info->RegisterPermission(
186 kClipboardWrite, "clipboardWrite", 0,
187 ExtensionPermissionMessage::kNone, kFlagSupportsOptional, kTypeAll);
188 info->RegisterPermission(
189 kChromePrivate, "chromePrivate", 0,
190 ExtensionPermissionMessage::kNone, kFlagNone,
191 kTypeAll - kTypePlatformApp);
192 info->RegisterPermission(
193 kExperimental, "experimental", 0,
194 ExtensionPermissionMessage::kNone, kFlagNone, kTypeAll);
195 info->RegisterPermission(
196 kGeolocation, "geolocation", IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION,
197 ExtensionPermissionMessage::kGeolocation, kFlagNone, kTypeAll);
198 info->RegisterPermission(
199 kNotification, "notifications", 0,
200 ExtensionPermissionMessage::kNone, kFlagSupportsOptional, kTypeAll);
201 info->RegisterPermission(
202 kUnlimitedStorage, "unlimitedStorage", 0,
203 ExtensionPermissionMessage::kNone, kFlagNone, kTypeAll);
204
205 // Hosted app and private permissions.
206 info->RegisterPermission(
207 kChromeAuthPrivate, "chromeAuthPrivate", 0,
208 ExtensionPermissionMessage::kNone, kFlagComponentOnly,
209 kTypeAll - kTypePlatformApp);
210 info->RegisterPermission(
211 kWebstorePrivate, "webstorePrivate", 0,
212 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeAll);
213
214 // Register extension permissions.
215 info->RegisterPermission(
216 kBookmark, "bookmarks", IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS,
217 ExtensionPermissionMessage::kBookmarks,
218 kFlagSupportsOptional, kTypeDefault);
219 info->RegisterPermission(
220 kContentSettings, "contentSettings",
221 IDS_EXTENSION_PROMPT_WARNING_CONTENT_SETTINGS,
222 ExtensionPermissionMessage::kContentSettings, kFlagNone, kTypeDefault);
223 info->RegisterPermission(
224 kContextMenus, "contextMenus", 0,
225 ExtensionPermissionMessage::kNone, kFlagSupportsOptional, kTypeDefault);
226 info->RegisterPermission(
227 kCookie, "cookies", 0,
228 ExtensionPermissionMessage::kNone, kFlagSupportsOptional,
229 kTypeDefault - kTypePlatformApp);
230 info->RegisterPermission(
231 kDebugger, "debugger", IDS_EXTENSION_PROMPT_WARNING_DEBUGGER,
232 ExtensionPermissionMessage::kDebugger,
233 kFlagSupportsOptional, kTypeDefault);
234 info->RegisterPermission(
235 kFileBrowserHandler, "fileBrowserHandler", 0,
236 ExtensionPermissionMessage::kNone, kFlagNone, kTypeDefault);
237 info->RegisterPermission(
238 kHistory, "history", IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY,
239 ExtensionPermissionMessage::kBrowsingHistory,
240 kFlagSupportsOptional, kTypeDefault);
241 info->RegisterPermission(
242 kIdle, "idle", 0, ExtensionPermissionMessage::kNone,
243 kFlagSupportsOptional, kTypeDefault);
244 info->RegisterPermission(
245 kInputMethodPrivate, "inputMethodPrivate", 0,
246 ExtensionPermissionMessage::kNone, kFlagNone, kTypeDefault);
247 info->RegisterPermission(
248 kManagement, "management", IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT,
249 ExtensionPermissionMessage::kManagement,
250 kFlagSupportsOptional, kTypeDefault);
251 info->RegisterPermission(
252 kPageCapture, "pageCapture",
253 IDS_EXTENSION_PROMPT_WARNING_ALL_PAGES_CONTENT,
254 ExtensionPermissionMessage::kAllPageContent, kFlagNone, kTypeDefault);
255 info->RegisterPermission(
256 kTab, "tabs", IDS_EXTENSION_PROMPT_WARNING_TABS,
257 ExtensionPermissionMessage::kTabs, kFlagSupportsOptional,
258 kTypeDefault - kTypePlatformApp);
259 info->RegisterPermission(
260 kTts, "tts", 0,
261 ExtensionPermissionMessage::kNone, kFlagNone, kTypeDefault);
262 info->RegisterPermission(
263 kTtsEngine, "ttsEngine", IDS_EXTENSION_PROMPT_WARNING_TTS_ENGINE,
264 ExtensionPermissionMessage::kTtsEngine, kFlagNone, kTypeDefault);
265 info->RegisterPermission(
266 kWebNavigation, "webNavigation", 0,
267 ExtensionPermissionMessage::kNone, kFlagNone,
268 kTypeDefault - kTypePlatformApp);
269 info->RegisterPermission(
270 kWebRequest, "webRequest", 0,
271 ExtensionPermissionMessage::kNone, kFlagNone,
272 kTypeDefault - kTypePlatformApp);
273 info->RegisterPermission(
274 kWebRequestBlocking, "webRequestBlocking", 0,
275 ExtensionPermissionMessage::kNone, kFlagNone,
276 kTypeDefault - kTypePlatformApp);
277 info->RegisterPermission(
278 kWebSocketProxyPrivate, "webSocketProxyPrivate", 0,
279 ExtensionPermissionMessage::kNone, kFlagNone,
280 kTypeDefault - kTypePlatformApp);
281
282 // Register private permissions.
283 info->RegisterPermission(
284 kChromeosInfoPrivate, "chromeosInfoPrivate", 0,
285 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeDefault);
286 info->RegisterPermission(
287 kFileBrowserPrivate, "fileBrowserPrivate", 0,
288 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeDefault);
289 info->RegisterPermission(
290 kMediaPlayerPrivate, "mediaPlayerPrivate", 0,
291 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeDefault);
292 info->RegisterPermission(
293 kMetricsPrivate, "metricsPrivate", 0,
294 ExtensionPermissionMessage::kNone, kFlagComponentOnly, kTypeDefault);
295
296 // Full url access permissions.
297 info->RegisterPermission(
298 kProxy, "proxy", 0, ExtensionPermissionMessage::kNone,
299 kFlagImpliesFullURLAccess, kTypeDefault);
300
301 info->RegisterPermission(
302 kDevtools, "devtools", 0, ExtensionPermissionMessage::kNone,
303 kFlagImpliesFullURLAccess, kTypeDefault);
304
305 info->RegisterPermission(
306 kPlugin, "plugin", IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS,
307 ExtensionPermissionMessage::kFullAccess,
308 kFlagImpliesFullURLAccess | kFlagImpliesFullAccess, kTypeDefault);
309
310 // Platform-app permissions.
311 info->RegisterPermission(
312 kSocket, "socket", 0,
313 ExtensionPermissionMessage::kNone, kFlagNone, kTypePlatformApp);
314
315 // Register aliases.
316 info->RegisterAlias("unlimitedStorage", kOldUnlimitedStoragePermission);
317 info->RegisterAlias("tabs", kWindowsPermission);
172 } 318 }
173 319
174 // 320 //
175 // ExtensionPermissionsInfo 321 // ExtensionPermissionsInfo
176 // 322 //
177 323
178 // static 324 // static
179 ExtensionPermissionsInfo* ExtensionPermissionsInfo::GetInstance() { 325 ExtensionPermissionsInfo* ExtensionPermissionsInfo::GetInstance() {
180 return Singleton<ExtensionPermissionsInfo>::get(); 326 return Singleton<ExtensionPermissionsInfo>::get();
181 } 327 }
(...skipping 29 matching lines...) Expand all
211 } 357 }
212 358
213 ExtensionPermissionsInfo::~ExtensionPermissionsInfo() { 359 ExtensionPermissionsInfo::~ExtensionPermissionsInfo() {
214 for (IDMap::iterator i = id_map_.begin(); i != id_map_.end(); ++i) 360 for (IDMap::iterator i = id_map_.begin(); i != id_map_.end(); ++i)
215 delete i->second; 361 delete i->second;
216 } 362 }
217 363
218 ExtensionPermissionsInfo::ExtensionPermissionsInfo() 364 ExtensionPermissionsInfo::ExtensionPermissionsInfo()
219 : hosted_app_permission_count_(0), 365 : hosted_app_permission_count_(0),
220 permission_count_(0) { 366 permission_count_(0) {
221 // Map the permissions flags to shorter names for convenience. 367 ExtensionAPIPermission::RegisterAllPermissions(this);
222 int none = ExtensionAPIPermission::kFlagNone;
223 int hosted_app = ExtensionAPIPermission::kFlagHostedApp;
224 int component_only = ExtensionAPIPermission::kFlagComponentOnly;
225 int full_access = ExtensionAPIPermission::kFlagImpliesFullAccess;
226 int all_urls = ExtensionAPIPermission::kFlagImpliesFullURLAccess;
227 int platform_app_only = ExtensionAPIPermission::kFlagPlatformAppOnly;
228
229 // Note: please update the permissions API documentation when modifying which
230 // permissions can be specified as optional.
231 int optional = ExtensionAPIPermission::kFlagSupportsOptional;
232
233 // Hosted app permissions
234 RegisterPermission(
235 ExtensionAPIPermission::kBackground, "background", 0,
236 ExtensionPermissionMessage::kNone, hosted_app | optional);
237 RegisterPermission(
238 ExtensionAPIPermission::kClipboardRead, "clipboardRead",
239 IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD,
240 ExtensionPermissionMessage::kClipboard, hosted_app | optional);
241 RegisterPermission(
242 ExtensionAPIPermission::kClipboardWrite, "clipboardWrite", 0,
243 ExtensionPermissionMessage::kNone, hosted_app | optional);
244 RegisterPermission(
245 ExtensionAPIPermission::kChromePrivate, "chromePrivate", 0,
246 ExtensionPermissionMessage::kNone, hosted_app);
247 RegisterPermission(
248 ExtensionAPIPermission::kExperimental, "experimental", 0,
249 ExtensionPermissionMessage::kNone, hosted_app);
250 RegisterPermission(
251 ExtensionAPIPermission::kGeolocation, "geolocation",
252 IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION,
253 ExtensionPermissionMessage::kGeolocation, hosted_app);
254 RegisterPermission(
255 ExtensionAPIPermission::kNotification, "notifications", 0,
256 ExtensionPermissionMessage::kNone, hosted_app | optional);
257 RegisterPermission(
258 ExtensionAPIPermission::kUnlimitedStorage, "unlimitedStorage", 0,
259 ExtensionPermissionMessage::kNone, hosted_app);
260
261 // Hosted app and private permissions.
262 RegisterPermission(
263 ExtensionAPIPermission::kChromeAuthPrivate, "chromeAuthPrivate", 0,
264 ExtensionPermissionMessage::kNone, hosted_app | component_only);
265 RegisterPermission(
266 ExtensionAPIPermission::kWebstorePrivate, "webstorePrivate", 0,
267 ExtensionPermissionMessage::kNone, hosted_app | component_only);
268
269 // Extension permissions.
270 RegisterPermission(
271 ExtensionAPIPermission::kBookmark, "bookmarks",
272 IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS,
273 ExtensionPermissionMessage::kBookmarks, optional);
274 RegisterPermission(
275 ExtensionAPIPermission::kContentSettings, "contentSettings",
276 IDS_EXTENSION_PROMPT_WARNING_CONTENT_SETTINGS,
277 ExtensionPermissionMessage::kContentSettings, none);
278 RegisterPermission(
279 ExtensionAPIPermission::kContextMenus, "contextMenus", 0,
280 ExtensionPermissionMessage::kNone, optional);
281 RegisterPermission(
282 ExtensionAPIPermission::kCookie, "cookies", 0,
283 ExtensionPermissionMessage::kNone, optional);
284 RegisterPermission(
285 ExtensionAPIPermission::kDebugger, "debugger",
286 IDS_EXTENSION_PROMPT_WARNING_DEBUGGER,
287 ExtensionPermissionMessage::kDebugger, optional);
288 RegisterPermission(
289 ExtensionAPIPermission::kFileBrowserHandler, "fileBrowserHandler", 0,
290 ExtensionPermissionMessage::kNone, none);
291 RegisterPermission(
292 ExtensionAPIPermission::kHistory, "history",
293 IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY,
294 ExtensionPermissionMessage::kBrowsingHistory, optional);
295 RegisterPermission(
296 ExtensionAPIPermission::kIdle, "idle", 0,
297 ExtensionPermissionMessage::kNone, optional);
298 RegisterPermission(
299 ExtensionAPIPermission::kInputMethodPrivate, "inputMethodPrivate", 0,
300 ExtensionPermissionMessage::kNone, none);
301 RegisterPermission(
302 ExtensionAPIPermission::kManagement, "management",
303 IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT,
304 ExtensionPermissionMessage::kManagement, optional);
305 RegisterPermission(
306 ExtensionAPIPermission::kPageCapture, "pageCapture",
307 IDS_EXTENSION_PROMPT_WARNING_ALL_PAGES_CONTENT,
308 ExtensionPermissionMessage::kAllPageContent, none);
309 RegisterPermission(
310 ExtensionAPIPermission::kTab, "tabs",
311 IDS_EXTENSION_PROMPT_WARNING_TABS,
312 ExtensionPermissionMessage::kTabs, optional);
313 RegisterPermission(
314 ExtensionAPIPermission::kTts, "tts", 0,
315 ExtensionPermissionMessage::kNone, none);
316 RegisterPermission(
317 ExtensionAPIPermission::kTtsEngine, "ttsEngine",
318 IDS_EXTENSION_PROMPT_WARNING_TTS_ENGINE,
319 ExtensionPermissionMessage::kTtsEngine, none);
320 RegisterPermission(
321 ExtensionAPIPermission::kWebNavigation, "webNavigation", 0,
322 ExtensionPermissionMessage::kNone, none);
323 RegisterPermission(
324 ExtensionAPIPermission::kWebRequest, "webRequest", 0,
325 ExtensionPermissionMessage::kNone, none);
326 RegisterPermission(
327 ExtensionAPIPermission::kWebRequestBlocking, "webRequestBlocking", 0,
328 ExtensionPermissionMessage::kNone, none);
329 RegisterPermission(
330 ExtensionAPIPermission::kWebSocketProxyPrivate,
331 "webSocketProxyPrivate", 0,
332 ExtensionPermissionMessage::kNone, none);
333
334 // Private permissions
335 RegisterPermission(
336 ExtensionAPIPermission::kChromeosInfoPrivate, "chromeosInfoPrivate", 0,
337 ExtensionPermissionMessage::kNone, component_only);
338 RegisterPermission(
339 ExtensionAPIPermission::kFileBrowserPrivate, "fileBrowserPrivate", 0,
340 ExtensionPermissionMessage::kNone, component_only);
341 RegisterPermission(
342 ExtensionAPIPermission::kMediaPlayerPrivate, "mediaPlayerPrivate", 0,
343 ExtensionPermissionMessage::kNone, component_only);
344 RegisterPermission(
345 ExtensionAPIPermission::kMetricsPrivate, "metricsPrivate", 0,
346 ExtensionPermissionMessage::kNone, component_only);
347
348 // Full url access permissions.
349 RegisterPermission(
350 ExtensionAPIPermission::kProxy, "proxy", 0,
351 ExtensionPermissionMessage::kNone, all_urls);
352
353 RegisterPermission(
354 ExtensionAPIPermission::kDevtools, "devtools", 0,
355 ExtensionPermissionMessage::kNone, all_urls);
356
357 RegisterPermission(
358 ExtensionAPIPermission::kPlugin, "plugin",
359 IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS,
360 ExtensionPermissionMessage::kFullAccess, all_urls | full_access);
361
362 // Platform-app permissions
363 RegisterPermission(
364 ExtensionAPIPermission::kSocket, "socket", 0,
365 ExtensionPermissionMessage::kNone, platform_app_only);
366
367 // Register Aliases
368 RegisterAlias("unlimitedStorage", kOldUnlimitedStoragePermission);
369 RegisterAlias("tabs", kWindowsPermission);
370 } 368 }
371 369
372 void ExtensionPermissionsInfo::RegisterAlias( 370 void ExtensionPermissionsInfo::RegisterAlias(
373 const char* name, const char* alias) { 371 const char* name, const char* alias) {
374 DCHECK(name_map_.find(name) != name_map_.end()); 372 DCHECK(name_map_.find(name) != name_map_.end());
375 DCHECK(name_map_.find(alias) == name_map_.end()); 373 DCHECK(name_map_.find(alias) == name_map_.end());
376 name_map_[alias] = name_map_[name]; 374 name_map_[alias] = name_map_[name];
377 } 375 }
378 376
379 void ExtensionPermissionsInfo::RegisterPermission( 377 void ExtensionPermissionsInfo::RegisterPermission(
380 ExtensionAPIPermission::ID id, 378 ExtensionAPIPermission::ID id,
381 const char* name, 379 const char* name,
382 int l10n_message_id, 380 int l10n_message_id,
383 ExtensionPermissionMessage::ID message_id, 381 ExtensionPermissionMessage::ID message_id,
384 int flags) { 382 int flags,
383 int type_restrictions) {
385 DCHECK(id_map_.find(id) == id_map_.end()); 384 DCHECK(id_map_.find(id) == id_map_.end());
386 DCHECK(name_map_.find(name) == name_map_.end()); 385 DCHECK(name_map_.find(name) == name_map_.end());
387 386
388 ExtensionAPIPermission* permission = 387 ExtensionAPIPermission* permission = new ExtensionAPIPermission(
389 new ExtensionAPIPermission(id, name, l10n_message_id, message_id, flags); 388 id, name, l10n_message_id, message_id, flags, type_restrictions);
390 389
391 id_map_[id] = permission; 390 id_map_[id] = permission;
392 name_map_[name] = permission; 391 name_map_[name] = permission;
393 392
394 permission_count_++; 393 permission_count_++;
395 if (permission->is_hosted_app())
396 hosted_app_permission_count_++;
397 } 394 }
398 395
399 // 396 //
400 // ExtensionPermissionSet 397 // ExtensionPermissionSet
401 // 398 //
402 399
403 ExtensionPermissionSet::ExtensionPermissionSet() { 400 ExtensionPermissionSet::ExtensionPermissionSet() {
404 } 401 }
405 402
406 ExtensionPermissionSet::ExtensionPermissionSet( 403 ExtensionPermissionSet::ExtensionPermissionSet(
(...skipping 10 matching lines...) Expand all
417 ExtensionPermissionSet::ExtensionPermissionSet( 414 ExtensionPermissionSet::ExtensionPermissionSet(
418 const ExtensionAPIPermissionSet& apis, 415 const ExtensionAPIPermissionSet& apis,
419 const URLPatternSet& explicit_hosts, 416 const URLPatternSet& explicit_hosts,
420 const URLPatternSet& scriptable_hosts) 417 const URLPatternSet& scriptable_hosts)
421 : apis_(apis), 418 : apis_(apis),
422 scriptable_hosts_(scriptable_hosts) { 419 scriptable_hosts_(scriptable_hosts) {
423 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); 420 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_);
424 InitEffectiveHosts(); 421 InitEffectiveHosts();
425 } 422 }
426 423
427 ExtensionPermissionSet::~ExtensionPermissionSet() { 424 ExtensionPermissionSet::~ExtensionPermissionSet() {}
428 }
429 425
430 // static 426 // static
431 ExtensionPermissionSet* ExtensionPermissionSet::CreateDifference( 427 ExtensionPermissionSet* ExtensionPermissionSet::CreateDifference(
432 const ExtensionPermissionSet* set1, 428 const ExtensionPermissionSet* set1,
433 const ExtensionPermissionSet* set2) { 429 const ExtensionPermissionSet* set2) {
434 scoped_refptr<ExtensionPermissionSet> empty = new ExtensionPermissionSet(); 430 scoped_refptr<ExtensionPermissionSet> empty = new ExtensionPermissionSet();
435 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? empty : set1; 431 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? empty : set1;
436 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? empty : set2; 432 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? empty : set2;
437 433
438 ExtensionAPIPermissionSet apis; 434 ExtensionAPIPermissionSet apis;
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); 681 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance();
686 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin(); 682 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin();
687 i != apis_.end(); ++i) { 683 i != apis_.end(); ++i) {
688 ExtensionAPIPermission* permission = info->GetByID(*i); 684 ExtensionAPIPermission* permission = info->GetByID(*i);
689 if (permission && permission->is_component_only()) 685 if (permission && permission->is_component_only())
690 return true; 686 return true;
691 } 687 }
692 return false; 688 return false;
693 } 689 }
694 690
695 bool ExtensionPermissionSet::HasPlatformAppPermissions() const {
696 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance();
697 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin();
698 i != apis_.end(); ++i) {
699 ExtensionAPIPermission* permission = info->GetByID(*i);
700 if (permission && permission->is_platform_app_only())
701 return true;
702 }
703 return false;
704 }
705
706 bool ExtensionPermissionSet::HasLessPrivilegesThan( 691 bool ExtensionPermissionSet::HasLessPrivilegesThan(
707 const ExtensionPermissionSet* permissions) const { 692 const ExtensionPermissionSet* permissions) const {
708 // Things can't get worse than native code access. 693 // Things can't get worse than native code access.
709 if (HasEffectiveFullAccess()) 694 if (HasEffectiveFullAccess())
710 return false; 695 return false;
711 696
712 // Otherwise, it's a privilege increase if the new one has full access. 697 // Otherwise, it's a privilege increase if the new one has full access.
713 if (permissions->HasEffectiveFullAccess()) 698 if (permissions->HasEffectiveFullAccess())
714 return true; 699 return true;
715 700
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 std::set<std::string> new_hosts_set(GetDistinctHosts(new_list, false, false)); 847 std::set<std::string> new_hosts_set(GetDistinctHosts(new_list, false, false));
863 std::set<std::string> old_hosts_set(GetDistinctHosts(old_list, false, false)); 848 std::set<std::string> old_hosts_set(GetDistinctHosts(old_list, false, false));
864 std::set<std::string> new_hosts_only; 849 std::set<std::string> new_hosts_only;
865 850
866 std::set_difference(new_hosts_set.begin(), new_hosts_set.end(), 851 std::set_difference(new_hosts_set.begin(), new_hosts_set.end(),
867 old_hosts_set.begin(), old_hosts_set.end(), 852 old_hosts_set.begin(), old_hosts_set.end(),
868 std::inserter(new_hosts_only, new_hosts_only.begin())); 853 std::inserter(new_hosts_only, new_hosts_only.begin()));
869 854
870 return !new_hosts_only.empty(); 855 return !new_hosts_only.empty();
871 } 856 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension_permission_set.h ('k') | chrome/common/extensions/extension_permission_set_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698