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

Unified Diff: chrome/common/extensions/extension_permission_set.cc

Issue 9317013: Add a centralized mechanism for whitelisting access to extension permissions. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: update CanSpecifyAPIPermission logic Created 8 years, 11 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 side-by-side diff with in-line comments
Download patch
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..5af2806b8b453d6bd716b9ce665faaa21d026894 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"
#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"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_l10n_util.h"
@@ -196,19 +198,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 +234,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 +251,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 +268,73 @@ void ExtensionAPIPermission::RegisterAllPermissions(
kWebRequestBlocking, "webRequestBlocking", 0,
ExtensionPermissionMessage::kNone, kFlagNone,
kTypeDefault - kTypePlatformApp);
- info->RegisterPermission(
- kWebSocketProxyPrivate, "webSocketProxyPrivate", 0,
- ExtensionPermissionMessage::kNone, kFlagCannotBeOptional,
- kTypeDefault - kTypePlatformApp);
// Register private permissions.
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);
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* chromeAuthPrivate = info->RegisterPermission(
+ kChromeAuthPrivate, "chromeAuthPrivate", 0,
+ ExtensionPermissionMessage::kNone,
+ kFlagCannotBeOptional, kTypeAll - kTypePlatformApp);
+ chromeAuthPrivate->AddToWhitelist(extension_misc::kCloudPrintAppId);
+
+ ExtensionAPIPermission* chromePrivate = info->RegisterPermission(
+ kChromePrivate, "chromePrivate", 0, ExtensionPermissionMessage::kNone,
+ kFlagCannotBeOptional, kTypeAll - kTypePlatformApp);
+ chromePrivate->AddToWhitelist(extension_misc::kCitrixReceiverAppId);
+ chromePrivate->AddToWhitelist("gnedhmakppccajfpfiihfcdlnpgomkcf");
+ chromePrivate->AddToWhitelist("fjcibdnjlbfnbfdjneajpipnlcppleek");
+
+ ExtensionAPIPermission* inputMethodPrivate = info->RegisterPermission(
+ kInputMethodPrivate, "inputMethodPrivate", 0,
+ ExtensionPermissionMessage::kNone, kFlagCannotBeOptional, kTypeDefault);
+ inputMethodPrivate->AddToWhitelist(extension_misc::kCitrixReceiverAppId);
+ inputMethodPrivate->AddToWhitelist("gnedhmakppccajfpfiihfcdlnpgomkcf");
+ inputMethodPrivate->AddToWhitelist("fjcibdnjlbfnbfdjneajpipnlcppleek");
+ inputMethodPrivate->AddToWhitelist(extension_misc::kHTermAppId);
+ inputMethodPrivate->AddToWhitelist(extension_misc::kHTermDevAppId);
+
+ ExtensionAPIPermission* terminalPrivate = info->RegisterPermission(
+ kTerminalPrivate, "terminalPrivate", 0, ExtensionPermissionMessage::kNone,
+ kFlagCannotBeOptional, kTypeDefault);
+ terminalPrivate->AddToWhitelist(extension_misc::kHTermAppId);
+ terminalPrivate->AddToWhitelist(extension_misc::kHTermDevAppId);
+
+ ExtensionAPIPermission* webSocketProxyPrivate = info->RegisterPermission(
+ kWebSocketProxyPrivate, "webSocketProxyPrivate", 0,
+ ExtensionPermissionMessage::kNone,
+ kFlagCannotBeOptional, kTypeDefault - kTypePlatformApp);
+ webSocketProxyPrivate->AddToWhitelist(extension_misc::kCitrixReceiverAppId);
+ webSocketProxyPrivate->AddToWhitelist("gnedhmakppccajfpfiihfcdlnpgomkcf");
jstritar 2012/02/08 16:16:07 do you know what extension this is?
+ webSocketProxyPrivate->AddToWhitelist("fjcibdnjlbfnbfdjneajpipnlcppleek");
jstritar 2012/02/08 16:16:07 ditto^
Dmitry Polukhin 2012/02/08 17:40:29 All these 3 IDs are Citrix Receiver (stable, beta
+ webSocketProxyPrivate->AddToWhitelist(extension_misc::kHTermAppId);
+ webSocketProxyPrivate->AddToWhitelist(extension_misc::kHTermDevAppId);
+
+ ExtensionAPIPermission* webstorePrivate = info->RegisterPermission(
+ kWebstorePrivate, "webstorePrivate", 0,
+ ExtensionPermissionMessage::kNone,
+ kFlagCannotBeOptional, kTypeAll - kTypePlatformApp);
+ webstorePrivate->AddToWhitelist(extension_misc::kEnterpriseWebStoreAppId);
+ webstorePrivate->AddToWhitelist(extension_misc::kWebStoreAppId);
// Full url access permissions.
info->RegisterPermission(
@@ -341,6 +365,25 @@ void ExtensionAPIPermission::RegisterAllPermissions(
info->RegisterAlias("tabs", kWindowsPermission);
}
+bool ExtensionAPIPermission::HasWhitelist() const {
+ return !whitelist_.empty();
+}
+
+bool ExtensionAPIPermission::IsWhitelisted(
+ const std::string& extension_id) const {
+ CommandLine* command_line = CommandLine::ForCurrentProcess();
+ if (command_line->HasSwitch(switches::kWhitelistedExtensionID)) {
+ if (extension_id == command_line->GetSwitchValueASCII(
+ switches::kWhitelistedExtensionID))
+ return true;
+ }
+ return whitelist_.find(extension_id) != whitelist_.end();
+}
+
+void ExtensionAPIPermission::AddToWhitelist(const std::string& extension_id) {
+ whitelist_.insert(extension_id);
+}
+
//
// ExtensionPermissionsInfo
//
@@ -398,7 +441,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 +458,8 @@ void ExtensionPermissionsInfo::RegisterPermission(
name_map_[name] = permission;
permission_count_++;
+
+ return permission;
}
//
« 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