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

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: comments 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..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;
}
//

Powered by Google App Engine
This is Rietveld 408576698