chrome_api_permissions.cc revision f2477e01787aa58f445919b809d89e252beef54f
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/permissions/chrome_api_permissions.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/permissions/bluetooth_permission.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/permissions/media_galleries_permission.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/permissions/socket_permission.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/permissions/usb_device_permission.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "extensions/common/permissions/api_permission.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "extensions/common/permissions/api_permission_set.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "extensions/common/permissions/permission_message.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "extensions/common/permissions/permissions_info.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kOldUnlimitedStoragePermission[] = "unlimited_storage";
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kWindowsPermission[] = "windows";
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<typename T> APIPermission* CreateAPIPermission(
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const APIPermissionInfo* permission) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return new T(permission);
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::vector<APIPermissionInfo*> ChromeAPIPermissions::GetAllPermissions()
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct PermissionRegistration {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    APIPermission::ID id;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const char* name;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int flags;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int l10n_message_id;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PermissionMessage::ID message_id;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    APIPermissionInfo::APIPermissionConstructor constructor;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } PermissionsToRegister[] = {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Register permissions for all extension types.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kBackground, "background" },
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kClipboardRead, "clipboardRead",
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagNone,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kClipboard },
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kClipboardWrite, "clipboardWrite" },
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kDeclarativeContent, "declarativeContent" },
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kDeclarativeWebRequest, "declarativeWebRequest",
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagNone,
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_DECLARATIVE_WEB_REQUEST,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kDeclarativeWebRequest },
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kDesktopCapture, "desktopCapture",
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagNone,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_DESKTOP_CAPTURE,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kDesktopCapture },
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kDns, "dns" },
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kDownloads, "downloads", APIPermissionInfo::kFlagNone,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kDownloads },
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kDownloadsOpen, "downloads.open",
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagNone,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS_OPEN,
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kDownloadsOpen },
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kDownloadsShelf, "downloads.shelf" },
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kIdentity, "identity" },
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kExperimental, "experimental",
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // NOTE(kalman): this is provided by a manifest property but needs to
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // appear in the install permission dialogue, so we need a fake
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      // permission for it. See http://crbug.com/247857.
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kWebConnectable, "webConnectable",
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional |
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagInternal,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_WEB_CONNECTABLE,
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kWebConnectable},
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kGeolocation, "geolocation",
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kGeolocation },
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kNotification, "notifications" },
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kUnlimitedStorage, "unlimitedStorage",
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kGcm, "gcm" },
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Register extension permissions.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kActiveTab, "activeTab" },
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kAdView, "adview" },
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kAlarms, "alarms" },
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kBookmark, "bookmarks", APIPermissionInfo::kFlagNone,
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS,
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kBookmarks },
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kBrailleDisplayPrivate, "brailleDisplayPrivate",
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kBrowsingData, "browsingData" },
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kContentSettings, "contentSettings",
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagNone,
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_CONTENT_SETTINGS,
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kContentSettings },
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kContextMenus, "contextMenus" },
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kCookie, "cookies" },
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kFileBrowserHandler, "fileBrowserHandler",
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kFontSettings, "fontSettings",
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kHistory, "history", APIPermissionInfo::kFlagNone,
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY,
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kBrowsingHistory },
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kIdltest, "idltest" },
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kIdle, "idle" },
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kInfobars, "infobars" },
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kInput, "input", APIPermissionInfo::kFlagNone,
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_INPUT,
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kInput },
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kLocation, "location",
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional,
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION,
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kGeolocation },
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kManagement, "management", APIPermissionInfo::kFlagNone,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kManagement },
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kNativeMessaging, "nativeMessaging",
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagNone,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_NATIVE_MESSAGING,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kNativeMessaging },
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kPower, "power", },
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kPrivacy, "privacy", APIPermissionInfo::kFlagNone,
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_PRIVACY,
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kPrivacy },
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kProcesses, "processes", APIPermissionInfo::kFlagNone,
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_TABS,
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kTabs },
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kSessions, "sessions" },
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kSignedInDevices, "signedInDevices",
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagNone,
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_SIGNED_IN_DEVICES,
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kSignedInDevices },
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kStorage, "storage" },
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kSyncFileSystem, "syncFileSystem",
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagNone,
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_SYNCFILESYSTEM,
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kSyncFileSystem },
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kTab, "tabs", APIPermissionInfo::kFlagNone,
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_TABS,
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kTabs },
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kTopSites, "topSites", APIPermissionInfo::kFlagNone,
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY,
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kBrowsingHistory },
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kTts, "tts", 0, APIPermissionInfo::kFlagCannotBeOptional },
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kTtsEngine, "ttsEngine",
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional,
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_TTS_ENGINE,
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kTtsEngine },
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kWallpaper, "wallpaper",
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_WALLPAPER,
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kWallpaper },
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kWebNavigation, "webNavigation",
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagNone,
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_TABS, PermissionMessage::kTabs },
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kWebRequest, "webRequest" },
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kWebRequestBlocking, "webRequestBlocking" },
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kWebView, "webview",
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Register private permissions.
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kScreenlockPrivate, "screenlockPrivate",
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional,
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_SCREENLOCK_PRIVATE,
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      PermissionMessage::kScreenlockPrivate },
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    { APIPermission::kActivityLogPrivate, "activityLogPrivate",
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional,
173      IDS_EXTENSION_PROMPT_WARNING_ACTIVITY_LOG_PRIVATE,
174      PermissionMessage::kActivityLogPrivate },
175    { APIPermission::kAutoTestPrivate, "autotestPrivate",
176      APIPermissionInfo::kFlagCannotBeOptional },
177    { APIPermission::kBookmarkManagerPrivate, "bookmarkManagerPrivate",
178      APIPermissionInfo::kFlagCannotBeOptional },
179    { APIPermission::kCast, "cast",
180      APIPermissionInfo::kFlagCannotBeOptional },
181    { APIPermission::kChromeosInfoPrivate, "chromeosInfoPrivate",
182      APIPermissionInfo::kFlagCannotBeOptional },
183    { APIPermission::kCommandLinePrivate, "commandLinePrivate",
184      APIPermissionInfo::kFlagCannotBeOptional },
185    { APIPermission::kDeveloperPrivate, "developerPrivate",
186      APIPermissionInfo::kFlagCannotBeOptional },
187    { APIPermission::kDiagnostics, "diagnostics",
188      APIPermissionInfo::kFlagCannotBeOptional },
189    { APIPermission::kDial, "dial", APIPermissionInfo::kFlagCannotBeOptional },
190    { APIPermission::kDownloadsInternal, "downloadsInternal" },
191    { APIPermission::kFileBrowserHandlerInternal, "fileBrowserHandlerInternal",
192      APIPermissionInfo::kFlagCannotBeOptional },
193    { APIPermission::kFileBrowserPrivate, "fileBrowserPrivate",
194      APIPermissionInfo::kFlagCannotBeOptional },
195    { APIPermission::kIdentityPrivate, "identityPrivate",
196      APIPermissionInfo::kFlagCannotBeOptional },
197    { APIPermission::kLogPrivate, "logPrivate"},
198    { APIPermission::kNetworkingPrivate, "networkingPrivate",
199      APIPermissionInfo::kFlagCannotBeOptional,
200      IDS_EXTENSION_PROMPT_WARNING_NETWORKING_PRIVATE,
201      PermissionMessage::kNetworkingPrivate },
202    { APIPermission::kMediaPlayerPrivate, "mediaPlayerPrivate",
203      APIPermissionInfo::kFlagCannotBeOptional },
204    { APIPermission::kMetricsPrivate, "metricsPrivate",
205      APIPermissionInfo::kFlagCannotBeOptional },
206    { APIPermission::kMDns, "mdns", APIPermissionInfo::kFlagCannotBeOptional },
207    { APIPermission::kMusicManagerPrivate, "musicManagerPrivate",
208      APIPermissionInfo::kFlagCannotBeOptional,
209      IDS_EXTENSION_PROMPT_WARNING_MUSIC_MANAGER_PRIVATE,
210      PermissionMessage::kMusicManagerPrivate },
211    { APIPermission::kPreferencesPrivate, "preferencesPrivate",
212      APIPermissionInfo::kFlagCannotBeOptional },
213    { APIPermission::kSystemPrivate, "systemPrivate",
214      APIPermissionInfo::kFlagCannotBeOptional },
215    { APIPermission::kCloudPrintPrivate, "cloudPrintPrivate",
216      APIPermissionInfo::kFlagCannotBeOptional },
217    { APIPermission::kInputMethodPrivate, "inputMethodPrivate",
218      APIPermissionInfo::kFlagCannotBeOptional },
219    { APIPermission::kEchoPrivate, "echoPrivate",
220      APIPermissionInfo::kFlagCannotBeOptional },
221    { APIPermission::kFeedbackPrivate, "feedbackPrivate",
222      APIPermissionInfo::kFlagCannotBeOptional },
223    { APIPermission::kImageWriterPrivate, "imageWriterPrivate",
224      APIPermissionInfo::kFlagCannotBeOptional },
225    { APIPermission::kRtcPrivate, "rtcPrivate",
226      APIPermissionInfo::kFlagCannotBeOptional },
227    { APIPermission::kTerminalPrivate, "terminalPrivate",
228      APIPermissionInfo::kFlagCannotBeOptional },
229    { APIPermission::kVirtualKeyboardPrivate, "virtualKeyboardPrivate",
230      APIPermissionInfo::kFlagCannotBeOptional },
231    { APIPermission::kWallpaperPrivate, "wallpaperPrivate",
232      APIPermissionInfo::kFlagCannotBeOptional },
233    { APIPermission::kWebRequestInternal, "webRequestInternal" },
234    { APIPermission::kWebstorePrivate, "webstorePrivate",
235      APIPermissionInfo::kFlagCannotBeOptional },
236    { APIPermission::kMediaGalleriesPrivate, "mediaGalleriesPrivate",
237      APIPermissionInfo::kFlagCannotBeOptional },
238    { APIPermission::kStreamsPrivate, "streamsPrivate",
239      APIPermissionInfo::kFlagCannotBeOptional },
240    { APIPermission::kEnterprisePlatformKeysPrivate,
241      "enterprise.platformKeysPrivate",
242      APIPermissionInfo::kFlagCannotBeOptional },
243    { APIPermission::kWebrtcAudioPrivate, "webrtcAudioPrivate",
244      APIPermissionInfo::kFlagCannotBeOptional },
245    { APIPermission::kWebrtcLoggingPrivate, "webrtcLoggingPrivate",
246      APIPermissionInfo::kFlagCannotBeOptional },
247    { APIPermission::kPrincipalsPrivate, "principalsPrivate",
248      APIPermissionInfo::kFlagCannotBeOptional },
249
250    // Full url access permissions.
251    { APIPermission::kDebugger, "debugger",
252      APIPermissionInfo::kFlagImpliesFullURLAccess |
253          APIPermissionInfo::kFlagCannotBeOptional,
254      IDS_EXTENSION_PROMPT_WARNING_DEBUGGER,
255      PermissionMessage::kDebugger },
256    { APIPermission::kDevtools, "devtools",
257      APIPermissionInfo::kFlagImpliesFullURLAccess |
258      APIPermissionInfo::kFlagCannotBeOptional |
259      APIPermissionInfo::kFlagInternal },
260    { APIPermission::kPageCapture, "pageCapture",
261      APIPermissionInfo::kFlagImpliesFullURLAccess },
262    { APIPermission::kTabCapture, "tabCapture",
263      APIPermissionInfo::kFlagImpliesFullURLAccess },
264    { APIPermission::kTabCaptureForTab, "tabCaptureForTab",
265      APIPermissionInfo::kFlagInternal },
266    { APIPermission::kPlugin, "plugin",
267      APIPermissionInfo::kFlagImpliesFullURLAccess |
268      APIPermissionInfo::kFlagImpliesFullAccess |
269      APIPermissionInfo::kFlagCannotBeOptional |
270      APIPermissionInfo::kFlagInternal,
271      IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS,
272      PermissionMessage::kFullAccess },
273    { APIPermission::kProxy, "proxy",
274      APIPermissionInfo::kFlagImpliesFullURLAccess |
275          APIPermissionInfo::kFlagCannotBeOptional },
276
277    // Platform-app permissions.
278    { APIPermission::kSerial, "serial", APIPermissionInfo::kFlagNone,
279      IDS_EXTENSION_PROMPT_WARNING_SERIAL,
280      PermissionMessage::kSerial },
281    // Because warning messages for the "socket" permission vary based on the
282    // permissions parameters, no message ID or message text is specified here.
283    // The message ID and text used will be determined at run-time in the
284    // |SocketPermission| class.
285    { APIPermission::kSocket, "socket",
286      APIPermissionInfo::kFlagCannotBeOptional, 0,
287      PermissionMessage::kNone, &CreateAPIPermission<SocketPermission> },
288    { APIPermission::kSocketsUdp, "sockets.udp" },
289    { APIPermission::kAppCurrentWindowInternal, "app.currentWindowInternal" },
290    { APIPermission::kAppRuntime, "app.runtime" },
291    { APIPermission::kAppWindow, "app.window" },
292    { APIPermission::kAudioCapture, "audioCapture",
293      APIPermissionInfo::kFlagNone,
294      IDS_EXTENSION_PROMPT_WARNING_AUDIO_CAPTURE,
295      PermissionMessage::kAudioCapture },
296    { APIPermission::kVideoCapture, "videoCapture",
297      APIPermissionInfo::kFlagNone,
298      IDS_EXTENSION_PROMPT_WARNING_VIDEO_CAPTURE,
299      PermissionMessage::kVideoCapture },
300    // The permission string for "fileSystem" is only shown when "write" or
301    // "directory" is present. Read-only access is only granted after the user
302    // has been shown a file or directory  chooser dialog and selected a file or
303    // directory . Selecting the file or directory  is considered consent to
304    // read it.
305    { APIPermission::kFileSystem, "fileSystem" },
306    { APIPermission::kFileSystemDirectory, "fileSystem.directory",
307      APIPermissionInfo::kFlagNone,
308      IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_DIRECTORY,
309      PermissionMessage::kFileSystemDirectory },
310    { APIPermission::kFileSystemProvider, "fileSystemProvider" },
311    { APIPermission::kFileSystemRetainEntries, "fileSystem.retainEntries" },
312    { APIPermission::kFileSystemWrite, "fileSystem.write",
313      APIPermissionInfo::kFlagNone,
314      IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_WRITE,
315      PermissionMessage::kFileSystemWrite },
316    { APIPermission::kFileSystemWriteDirectory, "fileSystem.writeDirectory",
317      APIPermissionInfo::kFlagNone,
318      IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_WRITE_DIRECTORY,
319      PermissionMessage::kFileSystemWriteDirectory },
320    // Because warning messages for the "mediaGalleries" permission vary based
321    // on the permissions parameters, no message ID or message text is
322    // specified here.
323    // The message ID and text used will be determined at run-time in the
324    // |MediaGalleriesPermission| class.
325    { APIPermission::kMediaGalleries, "mediaGalleries",
326      APIPermissionInfo::kFlagNone, 0,
327      PermissionMessage::kNone,
328      &CreateAPIPermission<MediaGalleriesPermission> },
329    { APIPermission::kPushMessaging, "pushMessaging",
330      APIPermissionInfo::kFlagCannotBeOptional },
331    // Because warning messages for the "bluetooth" permission vary based on
332    // the permissions parameters, no message ID or message text is specified
333    // here. The message ID and text used will be determined at run-time in the
334    // |BluetoothPermission| class.
335    { APIPermission::kBluetooth, "bluetooth", APIPermissionInfo::kFlagNone,
336      0, PermissionMessage::kNone,
337      &CreateAPIPermission<BluetoothPermission> },
338    { APIPermission::kUsb, "usb", APIPermissionInfo::kFlagNone,
339      IDS_EXTENSION_PROMPT_WARNING_USB,
340      PermissionMessage::kUsb },
341    { APIPermission::kUsbDevice, "usbDevices",
342      APIPermissionInfo::kFlagNone, 0, PermissionMessage::kNone,
343      &CreateAPIPermission<UsbDevicePermission> },
344    { APIPermission::kSystemIndicator, "systemIndicator",
345      APIPermissionInfo::kFlagNone,
346      IDS_EXTENSION_PROMPT_WARNING_SYSTEM_INDICATOR,
347      PermissionMessage::kSystemIndicator },
348    { APIPermission::kSystemCpu, "system.cpu" },
349    { APIPermission::kSystemMemory, "system.memory" },
350    { APIPermission::kSystemNetwork, "system.network" },
351    { APIPermission::kSystemDisplay, "system.display" },
352    { APIPermission::kSystemStorage, "system.storage" },
353    { APIPermission::kPointerLock, "pointerLock" },
354    { APIPermission::kFullscreen, "fullscreen" },
355    { APIPermission::kAudio, "audio" },
356    { APIPermission::kWebRtc, "webrtc" },
357    { APIPermission::kOverrideEscFullscreen, "overrideEscFullscreen" },
358
359    // Settings override permissions.
360    { APIPermission::kHomepage, "homepage",
361      APIPermissionInfo::kFlagCannotBeOptional |
362      APIPermissionInfo::kFlagInternal,
363      IDS_EXTENSION_PROMPT_WARNING_HOME_PAGE_SETTING_OVERRIDE,
364      PermissionMessage::kHomepage },
365    { APIPermission::kSearchProvider, "searchProvider",
366      APIPermissionInfo::kFlagCannotBeOptional |
367      APIPermissionInfo::kFlagInternal,
368      IDS_EXTENSION_PROMPT_WARNING_SEARCH_SETTINGS_OVERRIDE,
369      PermissionMessage::kSearchProvider },
370    { APIPermission::kStartupPages, "startupPages",
371      APIPermissionInfo::kFlagCannotBeOptional |
372      APIPermissionInfo::kFlagInternal,
373      IDS_EXTENSION_PROMPT_WARNING_START_PAGE_SETTING_OVERRIDE,
374      PermissionMessage::kStartupPages },
375  };
376
377  std::vector<APIPermissionInfo*> permissions;
378
379  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(PermissionsToRegister); ++i) {
380    const PermissionRegistration& pr = PermissionsToRegister[i];
381    permissions.push_back(new APIPermissionInfo(
382        pr.id, pr.name, pr.l10n_message_id,
383        pr.message_id ? pr.message_id : PermissionMessage::kNone,
384        pr.flags,
385        pr.constructor));
386  }
387  return permissions;
388}
389
390std::vector<PermissionsProvider::AliasInfo>
391ChromeAPIPermissions::GetAllAliases() const {
392  // Register aliases.
393  std::vector<PermissionsProvider::AliasInfo> aliases;
394  aliases.push_back(PermissionsProvider::AliasInfo(
395      "unlimitedStorage", kOldUnlimitedStoragePermission));
396  aliases.push_back(PermissionsProvider::AliasInfo(
397      "tabs", kWindowsPermission));
398  return aliases;
399}
400
401}  // namespace extensions
402