Chromium Code Reviews| Index: chrome/common/extensions/extension_permission_set.cc |
| diff --git a/chrome/common/extensions/extension_permission_set.cc b/chrome/common/extensions/extension_permission_set.cc |
| index 921eed6967a30083e43f410cd28c2452e9edf427..5ef4891647d4a0f921d16d04f0559e46502fd0ea 100644 |
| --- a/chrome/common/extensions/extension_permission_set.cc |
| +++ b/chrome/common/extensions/extension_permission_set.cc |
| @@ -7,10 +7,12 @@ |
| #include <algorithm> |
| #include <string> |
| +#include "base/command_line.h" |
|
Aaron Boodman
2012/02/02 18:17:31
Not needed.
jstritar
2012/02/03 14:33:17
Woops, I do still need this. I added the command l
|
| #include "base/memory/singleton.h" |
| #include "base/values.h" |
| #include "base/string_number_conversions.h" |
| #include "base/utf_string_conversions.h" |
| +#include "chrome/common/chrome_switches.h" |
|
Aaron Boodman
2012/02/02 18:17:31
Not needed?
jstritar
2012/02/03 14:33:17
ditto
|
| #include "chrome/common/extensions/extension.h" |
| #include "chrome/common/extensions/extension_constants.h" |
| #include "chrome/common/extensions/extension_l10n_util.h" |
| @@ -66,6 +68,42 @@ const char* kNonPermissionFunctionNames[] = { |
| const size_t kNumNonPermissionFunctionNames = |
| arraysize(kNonPermissionFunctionNames); |
| +// TODO(jstritar): We should find out what these extensions are. |
|
Aaron Boodman
2012/02/02 18:17:31
This is a pretty ominous comment :). Can you track
|
| + |
| +// ExtensionAPIPermission::kTerminalPrivate whitelist. |
| +const char* kTerminalPrivateWhitelist[] = { |
| + extension_misc::kHTermAppId, |
| + extension_misc::kHTermDevAppId |
| +}; |
| + |
| +// ExtensionAPIPermission::kWebSocketProxyPrivate whitelist. |
| +// ExtensionAPIPermission::kInputMethodPrivate whitelist. |
| +const char* kChromeOSWhitelist[] = { |
| + "haiffjcadagjlijoggckpgfnoeiflnem", |
| + "gnedhmakppccajfpfiihfcdlnpgomkcf", |
| + "fjcibdnjlbfnbfdjneajpipnlcppleek", |
| + extension_misc::kHTermAppId, |
| + extension_misc::kHTermDevAppId |
| +}; |
| + |
| +// ExtensionAPIPermission::kChromePrivate whitelist. |
| +const char* kChromePrivateWhitelist[] = { |
| + "haiffjcadagjlijoggckpgfnoeiflnem", |
| + "gnedhmakppccajfpfiihfcdlnpgomkcf", |
| + "fjcibdnjlbfnbfdjneajpipnlcppleek" |
| +}; |
| + |
| +// ExtensionAPIPermission::kChromeAuthPrivate whitelist. |
| +const char* kChromeAuthPrivateWhitelist[] = { |
| + extension_misc::kCloudPrintAppId |
| +}; |
| + |
| +// ExtensionAPIPermission::kWebstorePrivate whitelist. |
| +const char* kWebstorePrivateWhitelist[] = { |
| + extension_misc::kEnterpriseWebStoreAppId, |
| + extension_misc::kWebStoreAppId |
| +}; |
| + |
| const char kOldUnlimitedStoragePermission[] = "unlimited_storage"; |
| const char kWindowsPermission[] = "windows"; |
| @@ -196,19 +234,6 @@ void ExtensionAPIPermission::RegisterAllPermissions( |
| kUnlimitedStorage, "unlimitedStorage", 0, |
| ExtensionPermissionMessage::kNone, kFlagCannotBeOptional, kTypeAll); |
| - // Register hosted app permissions that are also private. |
| - info->RegisterPermission( |
| - kChromePrivate, "chromePrivate", 0, |
| - ExtensionPermissionMessage::kNone, kFlagCannotBeOptional, |
| - kTypeAll - kTypePlatformApp); |
| - info->RegisterPermission( |
| - kChromeAuthPrivate, "chromeAuthPrivate", 0, |
| - ExtensionPermissionMessage::kNone, |
| - kFlagComponentOnly | kFlagCannotBeOptional, kTypeAll - kTypePlatformApp); |
| - info->RegisterPermission( |
| - kWebstorePrivate, "webstorePrivate", 0, |
| - ExtensionPermissionMessage::kNone, |
| - kFlagComponentOnly | kFlagCannotBeOptional, kTypeAll - kTypePlatformApp); |
| // Register hosted and packaged app permissions. |
| info->RegisterPermission( |
| @@ -245,9 +270,6 @@ void ExtensionAPIPermission::RegisterAllPermissions( |
| kInput, "input", 0, ExtensionPermissionMessage::kNone, |
| kFlagImpliesFullURLAccess, kTypeDefault); |
| info->RegisterPermission( |
| - kInputMethodPrivate, "inputMethodPrivate", 0, |
| - ExtensionPermissionMessage::kNone, kFlagCannotBeOptional, kTypeDefault); |
| - info->RegisterPermission( |
| kManagement, "management", IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT, |
| ExtensionPermissionMessage::kManagement, kFlagNone, kTypeDefault); |
| info->RegisterPermission( |
| @@ -265,9 +287,6 @@ void ExtensionAPIPermission::RegisterAllPermissions( |
| ExtensionPermissionMessage::kTabs, kFlagNone, |
| kTypeDefault - kTypePlatformApp); |
| info->RegisterPermission( |
| - kTerminalPrivate, "terminalPrivate", 0, |
| - ExtensionPermissionMessage::kNone, kFlagCannotBeOptional, kTypeDefault); |
| - info->RegisterPermission( |
| kTts, "tts", 0, |
| ExtensionPermissionMessage::kNone, kFlagCannotBeOptional, kTypeDefault); |
| info->RegisterPermission( |
| @@ -285,32 +304,61 @@ void ExtensionAPIPermission::RegisterAllPermissions( |
| kWebRequestBlocking, "webRequestBlocking", 0, |
| ExtensionPermissionMessage::kNone, kFlagNone, |
| kTypeDefault - kTypePlatformApp); |
| - info->RegisterPermission( |
| - kWebSocketProxyPrivate, "webSocketProxyPrivate", 0, |
| - ExtensionPermissionMessage::kNone, kFlagCannotBeOptional, |
| - kTypeDefault - kTypePlatformApp); |
| // Register private permissions. |
| + ExtensionAPIPermission* chromeAuthPrivate = info->RegisterPermission( |
| + kChromeAuthPrivate, "chromeAuthPrivate", 0, |
| + ExtensionPermissionMessage::kNone, |
| + kFlagCannotBeOptional, kTypeAll - kTypePlatformApp); |
| + for (size_t i = 0; i < arraysize(kChromeAuthPrivateWhitelist); ++i) |
| + chromeAuthPrivate->AddToWhitelist(kChromeAuthPrivateWhitelist[i]); |
| + ExtensionAPIPermission* chromePrivate = info->RegisterPermission( |
| + kChromePrivate, "chromePrivate", 0, ExtensionPermissionMessage::kNone, |
| + kFlagCannotBeOptional, kTypeAll - kTypePlatformApp); |
| + for (size_t i = 0; i < arraysize(kChromePrivateWhitelist); ++i) |
| + chromePrivate->AddToWhitelist(kChromePrivateWhitelist[i]); |
| info->RegisterPermission( |
| kChromeosInfoPrivate, "chromeosInfoPrivate", 0, |
| ExtensionPermissionMessage::kNone, |
| - kFlagComponentOnly | kFlagCannotBeOptional, kTypeDefault); |
| + kFlagComponentOnly_Deprecated | kFlagCannotBeOptional, kTypeDefault); |
| info->RegisterPermission( |
| kFileBrowserPrivate, "fileBrowserPrivate", 0, |
| ExtensionPermissionMessage::kNone, |
| - kFlagComponentOnly | kFlagCannotBeOptional, kTypeDefault); |
| + kFlagComponentOnly_Deprecated | kFlagCannotBeOptional, kTypeDefault); |
| + ExtensionAPIPermission* inputMethodPrivate = info->RegisterPermission( |
| + kInputMethodPrivate, "inputMethodPrivate", 0, |
| + ExtensionPermissionMessage::kNone, kFlagCannotBeOptional, kTypeDefault); |
| + for (size_t i = 0; i < arraysize(kChromeOSWhitelist); ++i) |
| + inputMethodPrivate->AddToWhitelist(kChromeOSWhitelist[i]); |
| info->RegisterPermission( |
| kMediaPlayerPrivate, "mediaPlayerPrivate", 0, |
| ExtensionPermissionMessage::kNone, |
| - kFlagComponentOnly | kFlagCannotBeOptional, kTypeDefault); |
| + kFlagComponentOnly_Deprecated | kFlagCannotBeOptional, kTypeDefault); |
| info->RegisterPermission( |
| kMetricsPrivate, "metricsPrivate", 0, |
| ExtensionPermissionMessage::kNone, |
| - kFlagComponentOnly | kFlagCannotBeOptional, kTypeDefault); |
| + kFlagComponentOnly_Deprecated | kFlagCannotBeOptional, kTypeDefault); |
| info->RegisterPermission( |
| kSystemPrivate, "systemPrivate", 0, |
| ExtensionPermissionMessage::kNone, |
| - kFlagComponentOnly | kFlagCannotBeOptional, kTypeDefault); |
| + kFlagComponentOnly_Deprecated | kFlagCannotBeOptional, kTypeDefault); |
| + ExtensionAPIPermission* terminalPrivate = info->RegisterPermission( |
| + kTerminalPrivate, "terminalPrivate", 0, ExtensionPermissionMessage::kNone, |
| + kFlagCannotBeOptional, kTypeDefault); |
| + for (size_t i = 0; i < arraysize(kTerminalPrivateWhitelist); ++i) |
|
Aaron Boodman
2012/02/02 18:17:31
Nit: instead of duplicating this loop everywhere,
jstritar
2012/02/03 14:33:17
Done.
|
| + terminalPrivate->AddToWhitelist(kTerminalPrivateWhitelist[i]); |
| + ExtensionAPIPermission* webSocketProxyPrivate = info->RegisterPermission( |
|
Aaron Boodman
2012/02/02 18:17:31
Maybe also move the ones that have whitelists to t
jstritar
2012/02/03 14:33:17
Done.
|
| + kWebSocketProxyPrivate, "webSocketProxyPrivate", 0, |
| + ExtensionPermissionMessage::kNone, |
| + kFlagCannotBeOptional, kTypeDefault - kTypePlatformApp); |
| + for (size_t i = 0; i < arraysize(kChromeOSWhitelist); ++i) |
| + webSocketProxyPrivate->AddToWhitelist(kChromeOSWhitelist[i]); |
| + ExtensionAPIPermission* webstorePrivate = info->RegisterPermission( |
| + kWebstorePrivate, "webstorePrivate", 0, |
| + ExtensionPermissionMessage::kNone, |
| + kFlagCannotBeOptional, kTypeAll - kTypePlatformApp); |
| + for (size_t i = 0; i < arraysize(kWebstorePrivateWhitelist); ++i) |
| + webstorePrivate->AddToWhitelist(kWebstorePrivateWhitelist[i]); |
| // Full url access permissions. |
| info->RegisterPermission( |
| @@ -341,6 +389,19 @@ void ExtensionAPIPermission::RegisterAllPermissions( |
| info->RegisterAlias("tabs", kWindowsPermission); |
| } |
| +bool ExtensionAPIPermission::HasWhitelist() const { |
| + return !whitelist_.empty(); |
| +} |
| + |
| +bool ExtensionAPIPermission::IsWhitelisted( |
| + const std::string& extension_id) const { |
| + return whitelist_.find(extension_id) != whitelist_.end(); |
| +} |
| + |
| +void ExtensionAPIPermission::AddToWhitelist(const std::string& extension_id) { |
| + whitelist_.insert(extension_id); |
| +} |
| + |
| // |
| // ExtensionPermissionsInfo |
| // |
| @@ -398,7 +459,7 @@ void ExtensionPermissionsInfo::RegisterAlias( |
| name_map_[alias] = name_map_[name]; |
| } |
| -void ExtensionPermissionsInfo::RegisterPermission( |
| +ExtensionAPIPermission* ExtensionPermissionsInfo::RegisterPermission( |
| ExtensionAPIPermission::ID id, |
| const char* name, |
| int l10n_message_id, |
| @@ -415,6 +476,8 @@ void ExtensionPermissionsInfo::RegisterPermission( |
| name_map_[name] = permission; |
| permission_count_++; |
| + |
| + return permission; |
| } |
| // |