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

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

Issue 10065040: RefCounted types should not have public destructors, chrome/ remaining parts (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Implementation fixes Created 8 years, 8 months 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) 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/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/command_line.h" 10 #include "base/command_line.h"
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
138 } 138 }
139 139
140 return ExtensionPermissionMessage(message_id, message); 140 return ExtensionPermissionMessage(message_id, message);
141 } 141 }
142 142
143 ExtensionPermissionMessage::ExtensionPermissionMessage( 143 ExtensionPermissionMessage::ExtensionPermissionMessage(
144 ExtensionPermissionMessage::ID id, const string16& message) 144 ExtensionPermissionMessage::ID id, const string16& message)
145 : id_(id), message_(message) { 145 : id_(id), message_(message) {
146 } 146 }
147 147
148 ExtensionPermissionMessage::~ExtensionPermissionMessage() { 148 ExtensionPermissionMessage::~ExtensionPermissionMessage() {}
149 }
150 149
151 // 150 //
152 // ExtensionPermission 151 // ExtensionPermission
153 // 152 //
154 153
154 ExtensionAPIPermission::~ExtensionAPIPermission() {}
155
155 ExtensionPermissionMessage ExtensionAPIPermission::GetMessage() const { 156 ExtensionPermissionMessage ExtensionAPIPermission::GetMessage() const {
156 return ExtensionPermissionMessage( 157 return ExtensionPermissionMessage(
157 message_id_, l10n_util::GetStringUTF16(l10n_message_id_)); 158 message_id_, l10n_util::GetStringUTF16(l10n_message_id_));
158 } 159 }
159 160
160 ExtensionAPIPermission::ExtensionAPIPermission( 161 ExtensionAPIPermission::ExtensionAPIPermission(
161 ID id, 162 ID id,
162 const char* name, 163 const char* name,
163 int l10n_message_id, 164 int l10n_message_id,
164 ExtensionPermissionMessage::ID message_id, 165 ExtensionPermissionMessage::ID message_id,
165 int flags) 166 int flags)
166 : id_(id), 167 : id_(id),
167 name_(name), 168 name_(name),
168 flags_(flags), 169 flags_(flags),
169 l10n_message_id_(l10n_message_id), 170 l10n_message_id_(l10n_message_id),
170 message_id_(message_id) {} 171 message_id_(message_id) {}
171 172
172 ExtensionAPIPermission::~ExtensionAPIPermission() {}
173
174 // static 173 // static
175 void ExtensionAPIPermission::RegisterAllPermissions( 174 void ExtensionAPIPermission::RegisterAllPermissions(
176 ExtensionPermissionsInfo* info) { 175 ExtensionPermissionsInfo* info) {
177 176
178 // Register permissions for all extension types. 177 // Register permissions for all extension types.
179 info->RegisterPermission( 178 info->RegisterPermission(
180 kBackground, "background", 0, 179 kBackground, "background", 0,
181 ExtensionPermissionMessage::kNone, kFlagNone); 180 ExtensionPermissionMessage::kNone, kFlagNone);
182 info->RegisterPermission( 181 info->RegisterPermission(
183 kClipboardRead, "clipboardRead", IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD, 182 kClipboardRead, "clipboardRead", IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD,
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 delete i->second; 397 delete i->second;
399 } 398 }
400 399
401 ExtensionPermissionsInfo::ExtensionPermissionsInfo() 400 ExtensionPermissionsInfo::ExtensionPermissionsInfo()
402 : hosted_app_permission_count_(0), 401 : hosted_app_permission_count_(0),
403 permission_count_(0) { 402 permission_count_(0) {
404 ExtensionAPIPermission::RegisterAllPermissions(this); 403 ExtensionAPIPermission::RegisterAllPermissions(this);
405 } 404 }
406 405
407 void ExtensionPermissionsInfo::RegisterAlias( 406 void ExtensionPermissionsInfo::RegisterAlias(
408 const char* name, const char* alias) { 407 const char* name,
Nico 2012/04/25 13:20:37 ?
Ryan Sleevi 2012/04/25 15:13:59 Style guide. Only two forms: all on one line or on
408 const char* alias) {
409 DCHECK(name_map_.find(name) != name_map_.end()); 409 DCHECK(name_map_.find(name) != name_map_.end());
410 DCHECK(name_map_.find(alias) == name_map_.end()); 410 DCHECK(name_map_.find(alias) == name_map_.end());
411 name_map_[alias] = name_map_[name]; 411 name_map_[alias] = name_map_[name];
412 } 412 }
413 413
414 ExtensionAPIPermission* ExtensionPermissionsInfo::RegisterPermission( 414 ExtensionAPIPermission* ExtensionPermissionsInfo::RegisterPermission(
415 ExtensionAPIPermission::ID id, 415 ExtensionAPIPermission::ID id,
416 const char* name, 416 const char* name,
417 int l10n_message_id, 417 int l10n_message_id,
418 ExtensionPermissionMessage::ID message_id, 418 ExtensionPermissionMessage::ID message_id,
419 int flags) { 419 int flags) {
420 DCHECK(id_map_.find(id) == id_map_.end()); 420 DCHECK(id_map_.find(id) == id_map_.end());
421 DCHECK(name_map_.find(name) == name_map_.end()); 421 DCHECK(name_map_.find(name) == name_map_.end());
422 422
423 ExtensionAPIPermission* permission = new ExtensionAPIPermission( 423 ExtensionAPIPermission* permission = new ExtensionAPIPermission(
424 id, name, l10n_message_id, message_id, flags); 424 id, name, l10n_message_id, message_id, flags);
425 425
426 id_map_[id] = permission; 426 id_map_[id] = permission;
427 name_map_[name] = permission; 427 name_map_[name] = permission;
428 428
429 permission_count_++; 429 permission_count_++;
430 430
431 return permission; 431 return permission;
432 } 432 }
433 433
434 // 434 //
435 // ExtensionPermissionSet 435 // ExtensionPermissionSet
436 // 436 //
437 437
438 ExtensionPermissionSet::ExtensionPermissionSet() { 438 ExtensionPermissionSet::ExtensionPermissionSet() {}
439 }
440 439
441 ExtensionPermissionSet::ExtensionPermissionSet( 440 ExtensionPermissionSet::ExtensionPermissionSet(
442 const Extension* extension, 441 const Extension* extension,
443 const ExtensionAPIPermissionSet& apis, 442 const ExtensionAPIPermissionSet& apis,
444 const URLPatternSet& explicit_hosts, 443 const URLPatternSet& explicit_hosts,
445 const ExtensionOAuth2Scopes& scopes) 444 const ExtensionOAuth2Scopes& scopes)
446 : apis_(apis), 445 : apis_(apis),
447 scopes_(scopes) { 446 scopes_(scopes) {
448 DCHECK(extension); 447 DCHECK(extension);
449 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); 448 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_);
(...skipping 22 matching lines...) Expand all
472 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_); 471 AddPatternsAndRemovePaths(explicit_hosts, &explicit_hosts_);
473 InitEffectiveHosts(); 472 InitEffectiveHosts();
474 } 473 }
475 474
476 ExtensionPermissionSet::ExtensionPermissionSet( 475 ExtensionPermissionSet::ExtensionPermissionSet(
477 const ExtensionOAuth2Scopes& scopes) 476 const ExtensionOAuth2Scopes& scopes)
478 : scopes_(scopes) { 477 : scopes_(scopes) {
479 InitEffectiveHosts(); 478 InitEffectiveHosts();
480 } 479 }
481 480
482 ExtensionPermissionSet::~ExtensionPermissionSet() {}
Nico 2012/04/25 13:20:37 Wasn't the consensus on that thread to keep constr
Ryan Sleevi 2012/04/25 15:13:59 No, it was "the style guide says X so we do X, no
483
484 // static 481 // static
485 ExtensionPermissionSet* ExtensionPermissionSet::CreateDifference( 482 ExtensionPermissionSet* ExtensionPermissionSet::CreateDifference(
486 const ExtensionPermissionSet* set1, 483 const ExtensionPermissionSet* set1,
487 const ExtensionPermissionSet* set2) { 484 const ExtensionPermissionSet* set2) {
488 scoped_refptr<ExtensionPermissionSet> empty = new ExtensionPermissionSet(); 485 scoped_refptr<ExtensionPermissionSet> empty = new ExtensionPermissionSet();
489 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? empty : set1; 486 const ExtensionPermissionSet* set1_safe = (set1 == NULL) ? empty : set1;
490 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? empty : set2; 487 const ExtensionPermissionSet* set2_safe = (set2 == NULL) ? empty : set2;
491 488
492 ExtensionAPIPermissionSet apis; 489 ExtensionAPIPermissionSet apis;
493 std::set_difference(set1_safe->apis().begin(), set1_safe->apis().end(), 490 std::set_difference(set1_safe->apis().begin(), set1_safe->apis().end(),
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
794 791
795 if (HasLessAPIPrivilegesThan(permissions)) 792 if (HasLessAPIPrivilegesThan(permissions))
796 return true; 793 return true;
797 794
798 if (HasLessScopesThan(permissions)) 795 if (HasLessScopesThan(permissions))
799 return true; 796 return true;
800 797
801 return false; 798 return false;
802 } 799 }
803 800
801 ExtensionPermissionSet::~ExtensionPermissionSet() {}
802
804 // static 803 // static
805 std::set<std::string> ExtensionPermissionSet::GetDistinctHosts( 804 std::set<std::string> ExtensionPermissionSet::GetDistinctHosts(
806 const URLPatternSet& host_patterns, 805 const URLPatternSet& host_patterns,
807 bool include_rcd, 806 bool include_rcd,
808 bool exclude_file_scheme) { 807 bool exclude_file_scheme) {
809 // Use a vector to preserve order (also faster than a map on small sets). 808 // Use a vector to preserve order (also faster than a map on small sets).
810 // Each item is a host split into two parts: host without RCDs and 809 // Each item is a host split into two parts: host without RCDs and
811 // current best RCD. 810 // current best RCD.
812 typedef std::vector<std::pair<std::string, std::string> > HostVector; 811 typedef std::vector<std::pair<std::string, std::string> > HostVector;
813 HostVector hosts_best_rcd; 812 HostVector hosts_best_rcd;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
848 } 847 }
849 848
850 // Build up the final vector by concatenating hosts and RCDs. 849 // Build up the final vector by concatenating hosts and RCDs.
851 std::set<std::string> distinct_hosts; 850 std::set<std::string> distinct_hosts;
852 for (HostVector::iterator it = hosts_best_rcd.begin(); 851 for (HostVector::iterator it = hosts_best_rcd.begin();
853 it != hosts_best_rcd.end(); ++it) 852 it != hosts_best_rcd.end(); ++it)
854 distinct_hosts.insert(it->first + it->second); 853 distinct_hosts.insert(it->first + it->second);
855 return distinct_hosts; 854 return distinct_hosts;
856 } 855 }
857 856
858 void ExtensionPermissionSet::InitEffectiveHosts() {
859 effective_hosts_.ClearPatterns();
860
861 URLPatternSet::CreateUnion(
862 explicit_hosts(), scriptable_hosts(), &effective_hosts_);
863 }
864
865 void ExtensionPermissionSet::InitImplicitExtensionPermissions( 857 void ExtensionPermissionSet::InitImplicitExtensionPermissions(
866 const Extension* extension) { 858 const Extension* extension) {
867 // Add the implied permissions. 859 // Add the implied permissions.
868 if (!extension->plugins().empty()) 860 if (!extension->plugins().empty())
869 apis_.insert(ExtensionAPIPermission::kPlugin); 861 apis_.insert(ExtensionAPIPermission::kPlugin);
870 862
871 if (!extension->devtools_url().is_empty()) 863 if (!extension->devtools_url().is_empty())
872 apis_.insert(ExtensionAPIPermission::kDevtools); 864 apis_.insert(ExtensionAPIPermission::kDevtools);
873 865
874 // Add the scriptable hosts. 866 // Add the scriptable hosts.
875 for (UserScriptList::const_iterator content_script = 867 for (UserScriptList::const_iterator content_script =
876 extension->content_scripts().begin(); 868 extension->content_scripts().begin();
877 content_script != extension->content_scripts().end(); ++content_script) { 869 content_script != extension->content_scripts().end(); ++content_script) {
878 URLPatternSet::const_iterator pattern = 870 URLPatternSet::const_iterator pattern =
879 content_script->url_patterns().begin(); 871 content_script->url_patterns().begin();
880 for (; pattern != content_script->url_patterns().end(); ++pattern) 872 for (; pattern != content_script->url_patterns().end(); ++pattern)
881 scriptable_hosts_.AddPattern(*pattern); 873 scriptable_hosts_.AddPattern(*pattern);
882 } 874 }
883 } 875 }
884 876
877 void ExtensionPermissionSet::InitEffectiveHosts() {
878 effective_hosts_.ClearPatterns();
879
880 URLPatternSet::CreateUnion(
881 explicit_hosts(), scriptable_hosts(), &effective_hosts_);
882 }
883
885 std::set<ExtensionPermissionMessage> 884 std::set<ExtensionPermissionMessage>
886 ExtensionPermissionSet::GetSimplePermissionMessages() const { 885 ExtensionPermissionSet::GetSimplePermissionMessages() const {
887 std::set<ExtensionPermissionMessage> messages; 886 std::set<ExtensionPermissionMessage> messages;
888 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance(); 887 ExtensionPermissionsInfo* info = ExtensionPermissionsInfo::GetInstance();
889 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin(); 888 for (ExtensionAPIPermissionSet::const_iterator i = apis_.begin();
890 i != apis_.end(); ++i) { 889 i != apis_.end(); ++i) {
891 DCHECK_GT(ExtensionPermissionMessage::kNone, 890 DCHECK_GT(ExtensionPermissionMessage::kNone,
892 ExtensionPermissionMessage::kUnknown); 891 ExtensionPermissionMessage::kUnknown);
893 ExtensionAPIPermission* perm = info->GetByID(*i); 892 ExtensionAPIPermission* perm = info->GetByID(*i);
894 if (perm && perm->message_id() > ExtensionPermissionMessage::kNone) 893 if (perm && perm->message_id() > ExtensionPermissionMessage::kNone)
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
951 ExtensionOAuth2Scopes current_scopes = scopes(); 950 ExtensionOAuth2Scopes current_scopes = scopes();
952 ExtensionOAuth2Scopes new_scopes = permissions->scopes(); 951 ExtensionOAuth2Scopes new_scopes = permissions->scopes();
953 ExtensionOAuth2Scopes delta_scopes; 952 ExtensionOAuth2Scopes delta_scopes;
954 std::set_difference(new_scopes.begin(), new_scopes.end(), 953 std::set_difference(new_scopes.begin(), new_scopes.end(),
955 current_scopes.begin(), current_scopes.end(), 954 current_scopes.begin(), current_scopes.end(),
956 std::inserter(delta_scopes, delta_scopes.begin())); 955 std::inserter(delta_scopes, delta_scopes.begin()));
957 956
958 // We have less privileges if there are additional scopes present. 957 // We have less privileges if there are additional scopes present.
959 return !delta_scopes.empty(); 958 return !delta_scopes.empty();
960 } 959 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698