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