chrome_api_permissions.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// found in the LICENSE file.
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "chrome/common/extensions/permissions/chrome_api_permissions.h"
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "chrome/common/extensions/permissions/api_permission.h"
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "chrome/common/extensions/permissions/api_permission_set.h"
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "chrome/common/extensions/permissions/bluetooth_device_permission.h"
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "chrome/common/extensions/permissions/media_galleries_permission.h"
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "chrome/common/extensions/permissions/permission_message.h"
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "chrome/common/extensions/permissions/permissions_info.h"
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "chrome/common/extensions/permissions/socket_permission.h"
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "chrome/common/extensions/permissions/usb_device_permission.h"
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "grit/generated_resources.h"
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace extensions {
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace {
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const char kOldUnlimitedStoragePermission[] = "unlimited_storage";
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const char kWindowsPermission[] = "windows";
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)template<typename T> APIPermission* CreateAPIPermission(
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    const APIPermissionInfo* permission) {
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  return new T(permission);
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}  // namespace
305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
31d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)std::vector<APIPermissionInfo*> ChromeAPIPermissions::GetAllPermissions()
32d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    const {
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  struct PermissionRegistration {
34c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    APIPermission::ID id;
3593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    const char* name;
36d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    int flags;
37c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)    int l10n_message_id;
38f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)    PermissionMessage::ID message_id;
3993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    APIPermissionInfo::APIPermissionConstructor constructor;
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)  } PermissionsToRegister[] = {
41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    // Register permissions for all extension types.
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    { APIPermission::kBackground, "background" },
43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)    { APIPermission::kClipboardRead, "clipboardRead",
44d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)      APIPermissionInfo::kFlagNone,
45d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD,
4683750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch      PermissionMessage::kClipboard },
47323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    { APIPermission::kClipboardWrite, "clipboardWrite" },
48323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    { APIPermission::kDeclarativeContent, "declarativeContent" },
49323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    { APIPermission::kDeclarativeWebRequest, "declarativeWebRequest" },
50323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    { APIPermission::kDownloads, "downloads", APIPermissionInfo::kFlagNone,
51323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS,
5293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      PermissionMessage::kDownloads },
5393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kIdentity, "identity" },
5493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kExperimental, "experimental",
5593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
5693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kGeolocation, "geolocation",
5793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional,
5893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION,
5993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      PermissionMessage::kGeolocation },
6093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kNotification, "notifications" },
6153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    { APIPermission::kScreensaver, "screensaver" },
62c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    { APIPermission::kUnlimitedStorage, "unlimitedStorage",
637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci      APIPermissionInfo::kFlagCannotBeOptional },
64d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    // Register extension permissions.
66e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    { APIPermission::kActiveTab, "activeTab" },
67e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    { APIPermission::kAdView, "adview" },
68e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    { APIPermission::kAlarms, "alarms" },
69e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    { APIPermission::kBookmark, "bookmarks", APIPermissionInfo::kFlagNone,
70e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS,
71e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)      PermissionMessage::kBookmarks },
72e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    { APIPermission::kBrowsingData, "browsingData" },
73e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    { APIPermission::kContentSettings, "contentSettings",
74c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)      APIPermissionInfo::kFlagNone,
75e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_CONTENT_SETTINGS,
76c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)      PermissionMessage::kContentSettings },
77d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    { APIPermission::kContextMenus, "contextMenus" },
78c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    { APIPermission::kCookie, "cookies" },
79e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    { APIPermission::kFileBrowserHandler, "fileBrowserHandler",
80e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
81d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    { APIPermission::kFontSettings, "fontSettings",
8253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
8351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)    { APIPermission::kHistory, "history", APIPermissionInfo::kFlagNone,
8451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY,
85e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)      PermissionMessage::kBrowsingHistory },
8693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kIdle, "idle" },
8793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kInput, "input", APIPermissionInfo::kFlagNone,
8883750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch      IDS_EXTENSION_PROMPT_WARNING_INPUT,
8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)      PermissionMessage::kInput },
9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    { APIPermission::kLocation, "location",
9193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional,
9293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION,
9310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch      PermissionMessage::kGeolocation },
9410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    { APIPermission::kManagement, "management", APIPermissionInfo::kFlagNone,
9510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch      IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT,
9610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch      PermissionMessage::kManagement },
9710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    { APIPermission::kNativeMessaging, "nativeMessaging" },
9810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    { APIPermission::kPower, "power", },
9910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    { APIPermission::kPrivacy, "privacy", APIPermissionInfo::kFlagNone,
10093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_PRIVACY,
10110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch      PermissionMessage::kPrivacy },
10210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    { APIPermission::kSessionRestore, "sessionRestore" },
10310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    { APIPermission::kStorage, "storage" },
10410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    { APIPermission::kSyncFileSystem, "syncFileSystem",
10509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)      APIPermissionInfo::kFlagNone,
106d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_SYNCFILESYSTEM,
107d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)      PermissionMessage::kSyncFileSystem },
10810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    { APIPermission::kTab, "tabs", APIPermissionInfo::kFlagNone,
109d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_TABS,
11009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)      PermissionMessage::kTabs },
11109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    { APIPermission::kTopSites, "topSites", APIPermissionInfo::kFlagNone,
11210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch      IDS_EXTENSION_PROMPT_WARNING_BROWSING_HISTORY,
11310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch      PermissionMessage::kBrowsingHistory },
11409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    { APIPermission::kTts, "tts", 0, APIPermissionInfo::kFlagCannotBeOptional },
11583750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch    { APIPermission::kTtsEngine, "ttsEngine",
1167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci      APIPermissionInfo::kFlagCannotBeOptional,
1177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci      IDS_EXTENSION_PROMPT_WARNING_TTS_ENGINE,
1187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci      PermissionMessage::kTtsEngine },
119d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    { APIPermission::kWebNavigation, "webNavigation",
120d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)      APIPermissionInfo::kFlagNone,
12181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)      IDS_EXTENSION_PROMPT_WARNING_TABS, PermissionMessage::kTabs },
122c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    { APIPermission::kWebRequest, "webRequest" },
12393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kWebRequestBlocking, "webRequestBlocking" },
124d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    { APIPermission::kWebView, "webview",
12593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
12693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)
127323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)    // Register private permissions.
12809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    { APIPermission::kAutoTestPrivate, "autotestPrivate",
129a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch      APIPermissionInfo::kFlagCannotBeOptional },
13010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    { APIPermission::kBookmarkManagerPrivate, "bookmarkManagerPrivate",
131bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
132d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    { APIPermission::kChromeosInfoPrivate, "chromeosInfoPrivate",
133d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
134d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    { APIPermission::kCommandLinePrivate, "commandLinePrivate",
135d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
136d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    { APIPermission::kDeveloperPrivate, "developerPrivate",
137d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
138d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    { APIPermission::kDial, "dial", APIPermissionInfo::kFlagCannotBeOptional },
139d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    { APIPermission::kDownloadsInternal, "downloadsInternal" },
140d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    { APIPermission::kFileBrowserHandlerInternal, "fileBrowserHandlerInternal",
141d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
14209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    { APIPermission::kFileBrowserPrivate, "fileBrowserPrivate",
14309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
14409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    { APIPermission::kNetworkingPrivate, "networkingPrivate",
145d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
14693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kManagedModePrivate, "managedModePrivate",
14709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
148d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)    { APIPermission::kMediaPlayerPrivate, "mediaPlayerPrivate",
14983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch      APIPermissionInfo::kFlagCannotBeOptional },
15093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kMetricsPrivate, "metricsPrivate",
151d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
15293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kSystemPrivate, "systemPrivate",
153d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
15410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch    { APIPermission::kCloudPrintPrivate, "cloudPrintPrivate",
155c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
15693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kInputMethodPrivate, "inputMethodPrivate",
15793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
158e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)    { APIPermission::kEchoPrivate, "echoPrivate",
15993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
16093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kRtcPrivate, "rtcPrivate",
16193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
16293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kTerminalPrivate, "terminalPrivate",
16383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch      APIPermissionInfo::kFlagCannotBeOptional },
16409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    { APIPermission::kWallpaperPrivate, "wallpaperPrivate",
16509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
16609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    { APIPermission::kWebRequestInternal, "webRequestInternal" },
16793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)    { APIPermission::kWebSocketProxyPrivate, "webSocketProxyPrivate",
16809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
16909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    { APIPermission::kWebstorePrivate, "webstorePrivate",
1707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci      APIPermissionInfo::kFlagCannotBeOptional },
17181a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)    { APIPermission::kMediaGalleriesPrivate, "mediaGalleriesPrivate",
17209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
17353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)    { APIPermission::kStreamsPrivate, "streamsPrivate",
1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
175c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)    { APIPermission::kEnterprisePlatformKeysPrivate,
1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)      "enterprise.platformKeysPrivate",
17781a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles)      APIPermissionInfo::kFlagCannotBeOptional },
178
179    // Full url access permissions.
180    { APIPermission::kDebugger, "debugger",
181      APIPermissionInfo::kFlagImpliesFullURLAccess |
182          APIPermissionInfo::kFlagCannotBeOptional,
183      IDS_EXTENSION_PROMPT_WARNING_DEBUGGER,
184      PermissionMessage::kDebugger },
185    { APIPermission::kDevtools, "devtools",
186      APIPermissionInfo::kFlagImpliesFullURLAccess |
187      APIPermissionInfo::kFlagCannotBeOptional },
188    { APIPermission::kPageCapture, "pageCapture",
189      APIPermissionInfo::kFlagImpliesFullURLAccess },
190    { APIPermission::kTabCapture, "tabCapture",
191      APIPermissionInfo::kFlagImpliesFullURLAccess },
192    { APIPermission::kPlugin, "plugin",
193      APIPermissionInfo::kFlagImpliesFullURLAccess |
194          APIPermissionInfo::kFlagImpliesFullAccess |
195          APIPermissionInfo::kFlagCannotBeOptional,
196      IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS,
197      PermissionMessage::kFullAccess },
198    { APIPermission::kProxy, "proxy",
199      APIPermissionInfo::kFlagImpliesFullURLAccess |
200          APIPermissionInfo::kFlagCannotBeOptional },
201
202    // Platform-app permissions.
203    { APIPermission::kSerial, "serial", APIPermissionInfo::kFlagNone,
204      IDS_EXTENSION_PROMPT_WARNING_SERIAL,
205      PermissionMessage::kSerial },
206    // Because warning messages for the "socket" permission vary based on the
207    // permissions parameters, no message ID or message text is specified here.
208    // The message ID and text used will be determined at run-time in the
209    // |SocketPermission| class.
210    { APIPermission::kSocket, "socket",
211      APIPermissionInfo::kFlagCannotBeOptional, 0,
212      PermissionMessage::kNone, &CreateAPIPermission<SocketPermission> },
213    { APIPermission::kAppCurrentWindowInternal, "app.currentWindowInternal" },
214    { APIPermission::kAppRuntime, "app.runtime" },
215    { APIPermission::kAppWindow, "app.window" },
216    { APIPermission::kAudioCapture, "audioCapture",
217      APIPermissionInfo::kFlagNone,
218      IDS_EXTENSION_PROMPT_WARNING_AUDIO_CAPTURE,
219      PermissionMessage::kAudioCapture },
220    { APIPermission::kVideoCapture, "videoCapture",
221      APIPermissionInfo::kFlagNone,
222      IDS_EXTENSION_PROMPT_WARNING_VIDEO_CAPTURE,
223      PermissionMessage::kVideoCapture },
224    // The permission string for "fileSystem" is only shown when "write" is
225    // present. Read-only access is only granted after the user has been shown
226    // a file chooser dialog and selected a file. Selecting the file is
227    // considered consent to read it.
228    { APIPermission::kFileSystem, "fileSystem" },
229    { APIPermission::kFileSystemWrite, "fileSystem.write",
230      APIPermissionInfo::kFlagNone,
231      IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_WRITE,
232      PermissionMessage::kFileSystemWrite },
233    // Because warning messages for the "mediaGalleries" permission vary based
234    // on the permissions parameters, no message ID or message text is
235    // specified here.
236    // The message ID and text used will be determined at run-time in the
237    // |MediaGalleriesPermission| class.
238    { APIPermission::kMediaGalleries, "mediaGalleries",
239      APIPermissionInfo::kFlagNone, 0,
240      PermissionMessage::kNone,
241      &CreateAPIPermission<MediaGalleriesPermission> },
242    { APIPermission::kPushMessaging, "pushMessaging",
243      APIPermissionInfo::kFlagCannotBeOptional },
244    { APIPermission::kBluetooth, "bluetooth", APIPermissionInfo::kFlagNone,
245      IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH,
246      PermissionMessage::kBluetooth },
247    { APIPermission::kBluetoothDevice, "bluetoothDevices",
248      APIPermissionInfo::kFlagNone, 0, PermissionMessage::kNone,
249      &CreateAPIPermission<BluetoothDevicePermission> },
250    { APIPermission::kUsb, "usb", APIPermissionInfo::kFlagNone,
251      IDS_EXTENSION_PROMPT_WARNING_USB,
252      PermissionMessage::kUsb },
253    { APIPermission::kUsbDevice, "usbDevices",
254      APIPermissionInfo::kFlagMustBeOptional, 0, PermissionMessage::kNone,
255      &CreateAPIPermission<UsbDevicePermission> },
256    { APIPermission::kSystemIndicator, "systemIndicator",
257      APIPermissionInfo::kFlagNone,
258      IDS_EXTENSION_PROMPT_WARNING_SYSTEM_INDICATOR,
259      PermissionMessage::kSystemIndicator },
260    { APIPermission::kSystemInfoDisplay, "systemInfo.display" },
261    { APIPermission::kPointerLock, "pointerLock" },
262    { APIPermission::kFullscreen, "fullscreen" },
263    { APIPermission::kAudio, "audio" },
264  };
265
266  std::vector<APIPermissionInfo*> permissions;
267
268  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(PermissionsToRegister); ++i) {
269    const PermissionRegistration& pr = PermissionsToRegister[i];
270    permissions.push_back(new APIPermissionInfo(
271        pr.id, pr.name, pr.l10n_message_id,
272        pr.message_id ? pr.message_id : PermissionMessage::kNone,
273        pr.flags,
274        pr.constructor));
275  }
276  return permissions;
277}
278
279std::vector<PermissionsInfo::AliasInfo> ChromeAPIPermissions::GetAllAliases()
280    const {
281  // Register aliases.
282  std::vector<PermissionsInfo::AliasInfo> aliases;
283  aliases.push_back(PermissionsInfo::AliasInfo(
284      "unlimitedStorage", kOldUnlimitedStoragePermission));
285  aliases.push_back(PermissionsInfo::AliasInfo(
286      "tabs", kWindowsPermission));
287  return aliases;
288}
289
290}  // namespace extensions
291