Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / permissions / chrome_api_permissions.cc
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/common/extensions/permissions/chrome_api_permissions.h"
6
7 #include "chrome/grit/generated_resources.h"
8 #include "extensions/common/permissions/api_permission.h"
9 #include "extensions/common/permissions/api_permission_set.h"
10 #include "extensions/common/permissions/media_galleries_permission.h"
11 #include "extensions/common/permissions/permission_message.h"
12 #include "extensions/common/permissions/permissions_info.h"
13 #include "extensions/strings/grit/extensions_strings.h"
14
15 namespace extensions {
16
17 namespace {
18
19 const char kOldUnlimitedStoragePermission[] = "unlimited_storage";
20 const char kWindowsPermission[] = "windows";
21
22 template<typename T> APIPermission* CreateAPIPermission(
23     const APIPermissionInfo* permission) {
24   return new T(permission);
25 }
26
27 }  // namespace
28
29 std::vector<APIPermissionInfo*> ChromeAPIPermissions::GetAllPermissions()
30     const {
31   APIPermissionInfo::InitInfo permissions_to_register[] = {
32       // Register permissions for all extension types.
33       {APIPermission::kAppView, "appview",
34        APIPermissionInfo::kFlagCannotBeOptional},
35       {APIPermission::kBackground, "background"},
36       {APIPermission::kClipboardRead, "clipboardRead",
37        APIPermissionInfo::kFlagNone, IDS_EXTENSION_PROMPT_WARNING_CLIPBOARD,
38        PermissionMessage::kClipboard},
39       {APIPermission::kClipboardWrite, "clipboardWrite"},
40       {APIPermission::kDeclarativeContent, "declarativeContent"},
41       {APIPermission::kDeclarativeWebRequest, "declarativeWebRequest",
42        APIPermissionInfo::kFlagNone,
43        IDS_EXTENSION_PROMPT_WARNING_DECLARATIVE_WEB_REQUEST,
44        PermissionMessage::kDeclarativeWebRequest},
45       {APIPermission::kDesktopCapture, "desktopCapture",
46        APIPermissionInfo::kFlagNone,
47        IDS_EXTENSION_PROMPT_WARNING_DESKTOP_CAPTURE,
48        PermissionMessage::kDesktopCapture},
49       {APIPermission::kDownloads, "downloads", APIPermissionInfo::kFlagNone,
50        IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS, PermissionMessage::kDownloads},
51       {APIPermission::kDownloadsOpen, "downloads.open",
52        APIPermissionInfo::kFlagNone,
53        IDS_EXTENSION_PROMPT_WARNING_DOWNLOADS_OPEN,
54        PermissionMessage::kDownloadsOpen},
55       {APIPermission::kDownloadsShelf, "downloads.shelf"},
56       {APIPermission::kEasyUnlockPrivate, "easyUnlockPrivate"},
57       {APIPermission::kIdentity, "identity"},
58       {APIPermission::kIdentityEmail, "identity.email",
59        APIPermissionInfo::kFlagNone,
60        IDS_EXTENSION_PROMPT_WARNING_IDENTITY_EMAIL,
61        PermissionMessage::kIdentityEmail},
62       {APIPermission::kExperimental, "experimental",
63        APIPermissionInfo::kFlagCannotBeOptional},
64       {APIPermission::kEmbeddedExtensionOptions, "embeddedExtensionOptions",
65        APIPermissionInfo::kFlagCannotBeOptional},
66       {APIPermission::kGeolocation, "geolocation",
67        APIPermissionInfo::kFlagCannotBeOptional,
68        IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION,
69        PermissionMessage::kGeolocation},
70       {APIPermission::kNotifications, "notifications"},
71       {APIPermission::kUnlimitedStorage, "unlimitedStorage",
72        APIPermissionInfo::kFlagCannotBeOptional},
73       {APIPermission::kGcdPrivate, "gcdPrivate"},
74       {APIPermission::kGcm, "gcm"},
75       {APIPermission::kNotificationProvider, "notificationProvider"},
76
77       // Register extension permissions.
78       {APIPermission::kAccessibilityFeaturesModify,
79        "accessibilityFeatures.modify", APIPermissionInfo::kFlagNone,
80        IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_MODIFY,
81        PermissionMessage::kAccessibilityFeaturesModify},
82       {APIPermission::kAccessibilityFeaturesRead, "accessibilityFeatures.read",
83        APIPermissionInfo::kFlagNone,
84        IDS_EXTENSION_PROMPT_WARNING_ACCESSIBILITY_FEATURES_READ,
85        PermissionMessage::kAccessibilityFeaturesRead},
86       {APIPermission::kAccessibilityPrivate, "accessibilityPrivate",
87        APIPermissionInfo::kFlagCannotBeOptional},
88       {APIPermission::kActiveTab, "activeTab"},
89       {APIPermission::kAlarms, "alarms"},
90       {APIPermission::kBookmark, "bookmarks", APIPermissionInfo::kFlagNone,
91        IDS_EXTENSION_PROMPT_WARNING_BOOKMARKS, PermissionMessage::kBookmarks},
92       {APIPermission::kBrailleDisplayPrivate, "brailleDisplayPrivate",
93        APIPermissionInfo::kFlagCannotBeOptional},
94       {APIPermission::kBrowsingData, "browsingData"},
95       {APIPermission::kContentSettings, "contentSettings",
96        APIPermissionInfo::kFlagNone,
97        IDS_EXTENSION_PROMPT_WARNING_CONTENT_SETTINGS,
98        PermissionMessage::kContentSettings},
99       {APIPermission::kContextMenus, "contextMenus"},
100       {APIPermission::kCookie, "cookies"},
101       {APIPermission::kCopresence, "copresence", APIPermissionInfo::kFlagNone,
102        IDS_EXTENSION_PROMPT_WARNING_COPRESENCE, PermissionMessage::kCopresence},
103       {APIPermission::kCopresencePrivate, "copresencePrivate"},
104       {APIPermission::kEnterprisePlatformKeys, "enterprise.platformKeys"},
105       {APIPermission::kFileBrowserHandler, "fileBrowserHandler",
106        APIPermissionInfo::kFlagCannotBeOptional},
107       {APIPermission::kFontSettings, "fontSettings",
108        APIPermissionInfo::kFlagCannotBeOptional},
109       {APIPermission::kHistory, "history", APIPermissionInfo::kFlagNone,
110        IDS_EXTENSION_PROMPT_WARNING_HISTORY_WRITE,
111        PermissionMessage::kBrowsingHistory},
112       {APIPermission::kIdltest, "idltest"},
113       {APIPermission::kIdle, "idle"},
114       {APIPermission::kInfobars, "infobars"},
115       {APIPermission::kInput, "input", APIPermissionInfo::kFlagNone,
116        IDS_EXTENSION_PROMPT_WARNING_INPUT, PermissionMessage::kInput},
117       {APIPermission::kLocation, "location",
118        APIPermissionInfo::kFlagCannotBeOptional,
119        IDS_EXTENSION_PROMPT_WARNING_GEOLOCATION,
120        PermissionMessage::kGeolocation},
121       {APIPermission::kManagement, "management", APIPermissionInfo::kFlagNone,
122        IDS_EXTENSION_PROMPT_WARNING_MANAGEMENT, PermissionMessage::kManagement},
123       {APIPermission::kNativeMessaging, "nativeMessaging",
124        APIPermissionInfo::kFlagNone,
125        IDS_EXTENSION_PROMPT_WARNING_NATIVE_MESSAGING,
126        PermissionMessage::kNativeMessaging},
127       {APIPermission::kPrivacy, "privacy", APIPermissionInfo::kFlagNone,
128        IDS_EXTENSION_PROMPT_WARNING_PRIVACY, PermissionMessage::kPrivacy},
129       {APIPermission::kProcesses, "processes", APIPermissionInfo::kFlagNone,
130        IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ, PermissionMessage::kTabs},
131       {APIPermission::kSessions, "sessions"},
132       {APIPermission::kSignedInDevices, "signedInDevices",
133        APIPermissionInfo::kFlagNone,
134        IDS_EXTENSION_PROMPT_WARNING_SIGNED_IN_DEVICES,
135        PermissionMessage::kSignedInDevices},
136       {APIPermission::kSyncFileSystem, "syncFileSystem",
137        APIPermissionInfo::kFlagNone,
138        IDS_EXTENSION_PROMPT_WARNING_SYNCFILESYSTEM,
139        PermissionMessage::kSyncFileSystem},
140       {APIPermission::kTab, "tabs", APIPermissionInfo::kFlagNone,
141        IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ, PermissionMessage::kTabs},
142       {APIPermission::kTopSites, "topSites", APIPermissionInfo::kFlagNone,
143        IDS_EXTENSION_PROMPT_WARNING_TOPSITES, PermissionMessage::kTopSites},
144       {APIPermission::kTts, "tts", 0, APIPermissionInfo::kFlagCannotBeOptional},
145       {APIPermission::kTtsEngine, "ttsEngine",
146        APIPermissionInfo::kFlagCannotBeOptional,
147        IDS_EXTENSION_PROMPT_WARNING_TTS_ENGINE, PermissionMessage::kTtsEngine},
148       {APIPermission::kWallpaper, "wallpaper",
149        APIPermissionInfo::kFlagCannotBeOptional,
150        IDS_EXTENSION_PROMPT_WARNING_WALLPAPER, PermissionMessage::kWallpaper},
151       {APIPermission::kWebNavigation, "webNavigation",
152        APIPermissionInfo::kFlagNone, IDS_EXTENSION_PROMPT_WARNING_HISTORY_READ,
153        PermissionMessage::kTabs},
154       {APIPermission::kWebRequest, "webRequest"},
155       {APIPermission::kWebRequestBlocking, "webRequestBlocking"},
156
157       // Register private permissions.
158       {APIPermission::kScreenlockPrivate, "screenlockPrivate",
159        APIPermissionInfo::kFlagCannotBeOptional,
160        IDS_EXTENSION_PROMPT_WARNING_SCREENLOCK_PRIVATE,
161        PermissionMessage::kScreenlockPrivate},
162       {APIPermission::kActivityLogPrivate, "activityLogPrivate",
163        APIPermissionInfo::kFlagCannotBeOptional,
164        IDS_EXTENSION_PROMPT_WARNING_ACTIVITY_LOG_PRIVATE,
165        PermissionMessage::kActivityLogPrivate},
166       {APIPermission::kAutoTestPrivate, "autotestPrivate",
167        APIPermissionInfo::kFlagCannotBeOptional},
168       {APIPermission::kBookmarkManagerPrivate, "bookmarkManagerPrivate",
169        APIPermissionInfo::kFlagCannotBeOptional},
170       {APIPermission::kCast, "cast", APIPermissionInfo::kFlagCannotBeOptional},
171       {APIPermission::kChromeosInfoPrivate, "chromeosInfoPrivate",
172        APIPermissionInfo::kFlagCannotBeOptional},
173       {APIPermission::kCommandsAccessibility, "commands.accessibility",
174        APIPermissionInfo::kFlagCannotBeOptional},
175       {APIPermission::kCommandLinePrivate, "commandLinePrivate",
176        APIPermissionInfo::kFlagCannotBeOptional},
177       {APIPermission::kDeveloperPrivate, "developerPrivate",
178        APIPermissionInfo::kFlagCannotBeOptional},
179       {APIPermission::kDiagnostics, "diagnostics",
180        APIPermissionInfo::kFlagCannotBeOptional},
181       {APIPermission::kDial, "dial", APIPermissionInfo::kFlagCannotBeOptional},
182       {APIPermission::kDownloadsInternal, "downloadsInternal"},
183       {APIPermission::kExperienceSamplingPrivate, "experienceSamplingPrivate",
184        APIPermissionInfo::kFlagCannotBeOptional,
185        IDS_EXTENSION_PROMPT_WARNING_EXPERIENCE_SAMPLING_PRIVATE,
186        PermissionMessage::kExperienceSamplingPrivate},
187       {APIPermission::kFileBrowserHandlerInternal, "fileBrowserHandlerInternal",
188        APIPermissionInfo::kFlagCannotBeOptional},
189       {APIPermission::kFileManagerPrivate, "fileManagerPrivate",
190        APIPermissionInfo::kFlagCannotBeOptional},
191       {APIPermission::kHotwordPrivate, "hotwordPrivate",
192        APIPermissionInfo::kFlagCannotBeOptional},
193       {APIPermission::kIdentityPrivate, "identityPrivate",
194        APIPermissionInfo::kFlagCannotBeOptional},
195       {APIPermission::kLogPrivate, "logPrivate",
196        APIPermissionInfo::kFlagCannotBeOptional},
197       {APIPermission::kWebcamPrivate, "webcamPrivate"},
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::kReadingListPrivate, "readingListPrivate",
226        APIPermissionInfo::kFlagCannotBeOptional},
227       {APIPermission::kRtcPrivate, "rtcPrivate",
228        APIPermissionInfo::kFlagCannotBeOptional},
229       {APIPermission::kSyncedNotificationsPrivate,
230        "syncedNotificationsPrivate"},
231       {APIPermission::kTerminalPrivate, "terminalPrivate",
232        APIPermissionInfo::kFlagCannotBeOptional},
233       {APIPermission::kVirtualKeyboardPrivate, "virtualKeyboardPrivate",
234        APIPermissionInfo::kFlagCannotBeOptional},
235       {APIPermission::kWallpaperPrivate, "wallpaperPrivate",
236        APIPermissionInfo::kFlagCannotBeOptional},
237       {APIPermission::kWebstorePrivate, "webstorePrivate",
238        APIPermissionInfo::kFlagCannotBeOptional},
239       {APIPermission::kMediaGalleriesPrivate, "mediaGalleriesPrivate",
240        APIPermissionInfo::kFlagCannotBeOptional},
241       {APIPermission::kStreamsPrivate, "streamsPrivate",
242        APIPermissionInfo::kFlagCannotBeOptional},
243       {APIPermission::kEnterprisePlatformKeysPrivate,
244        "enterprise.platformKeysPrivate",
245        APIPermissionInfo::kFlagCannotBeOptional},
246       {APIPermission::kWebrtcAudioPrivate, "webrtcAudioPrivate",
247        APIPermissionInfo::kFlagCannotBeOptional},
248       {APIPermission::kWebrtcLoggingPrivate, "webrtcLoggingPrivate",
249        APIPermissionInfo::kFlagCannotBeOptional},
250       {APIPermission::kPrincipalsPrivate, "principalsPrivate",
251        APIPermissionInfo::kFlagCannotBeOptional},
252       {APIPermission::kFirstRunPrivate, "firstRunPrivate",
253        APIPermissionInfo::kFlagCannotBeOptional},
254       {APIPermission::kBluetoothPrivate, "bluetoothPrivate",
255        APIPermissionInfo::kFlagCannotBeOptional,
256        IDS_EXTENSION_PROMPT_WARNING_BLUETOOTH_PRIVATE,
257        PermissionMessage::kBluetoothPrivate},
258
259       // Full url access permissions.
260       {APIPermission::kDebugger, "debugger",
261        APIPermissionInfo::kFlagImpliesFullURLAccess |
262            APIPermissionInfo::kFlagCannotBeOptional,
263        IDS_EXTENSION_PROMPT_WARNING_DEBUGGER, PermissionMessage::kDebugger},
264       {APIPermission::kDevtools, "devtools",
265        APIPermissionInfo::kFlagImpliesFullURLAccess |
266            APIPermissionInfo::kFlagCannotBeOptional |
267            APIPermissionInfo::kFlagInternal},
268       {APIPermission::kPageCapture, "pageCapture",
269        APIPermissionInfo::kFlagImpliesFullURLAccess},
270       {APIPermission::kTabCapture, "tabCapture",
271        APIPermissionInfo::kFlagImpliesFullURLAccess},
272       {APIPermission::kTabCaptureForTab, "tabCaptureForTab",
273        APIPermissionInfo::kFlagInternal},
274       {APIPermission::kPlugin, "plugin",
275        APIPermissionInfo::kFlagImpliesFullURLAccess |
276            APIPermissionInfo::kFlagImpliesFullAccess |
277            APIPermissionInfo::kFlagCannotBeOptional |
278            APIPermissionInfo::kFlagInternal,
279        IDS_EXTENSION_PROMPT_WARNING_FULL_ACCESS,
280        PermissionMessage::kFullAccess},
281       {APIPermission::kProxy, "proxy",
282        APIPermissionInfo::kFlagImpliesFullURLAccess |
283            APIPermissionInfo::kFlagCannotBeOptional},
284
285       // Platform-app permissions.
286
287       // The permission string for "fileSystem" is only shown when
288       // "write" or "directory" is present. Read-only access is only
289       // granted after the user has been shown a file or directory
290       // chooser dialog and selected a file or directory. Selecting
291       // the file or directory is considered consent to read it.
292       {APIPermission::kFileSystem, "fileSystem"},
293       {APIPermission::kFileSystemDirectory, "fileSystem.directory",
294        APIPermissionInfo::kFlagNone,
295        IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_DIRECTORY,
296        PermissionMessage::kFileSystemDirectory},
297       {APIPermission::kFileSystemProvider, "fileSystemProvider"},
298       {APIPermission::kFileSystemRetainEntries, "fileSystem.retainEntries"},
299       {APIPermission::kFileSystemWrite, "fileSystem.write"},
300       {APIPermission::kFileSystemWriteDirectory, "fileSystem.writeDirectory",
301        APIPermissionInfo::kFlagNone,
302        IDS_EXTENSION_PROMPT_WARNING_FILE_SYSTEM_WRITE_DIRECTORY,
303        PermissionMessage::kFileSystemWriteDirectory},
304       // Because warning messages for the "mediaGalleries" permission
305       // vary based on the permissions parameters, no message ID or
306       // message text is specified here.  The message ID and text used
307       // will be determined at run-time in the
308       // |MediaGalleriesPermission| class.
309       {APIPermission::kMediaGalleries, "mediaGalleries",
310        APIPermissionInfo::kFlagNone, 0, PermissionMessage::kNone,
311        &CreateAPIPermission<MediaGalleriesPermission>},
312       {APIPermission::kPushMessaging, "pushMessaging",
313        APIPermissionInfo::kFlagCannotBeOptional},
314       {APIPermission::kPointerLock, "pointerLock"},
315       {APIPermission::kAudio, "audio"},
316       {APIPermission::kCastStreaming, "cast.streaming"},
317       {APIPermission::kBrowser, "browser"},
318
319       // Settings override permissions.
320       {APIPermission::kHomepage, "homepage",
321        APIPermissionInfo::kFlagCannotBeOptional |
322            APIPermissionInfo::kFlagInternal,
323        IDS_EXTENSION_PROMPT_WARNING_HOME_PAGE_SETTING_OVERRIDE,
324        PermissionMessage::kHomepage},
325       {APIPermission::kSearchProvider, "searchProvider",
326        APIPermissionInfo::kFlagCannotBeOptional |
327            APIPermissionInfo::kFlagInternal,
328        IDS_EXTENSION_PROMPT_WARNING_SEARCH_SETTINGS_OVERRIDE,
329        PermissionMessage::kSearchProvider},
330       {APIPermission::kStartupPages, "startupPages",
331        APIPermissionInfo::kFlagCannotBeOptional |
332            APIPermissionInfo::kFlagInternal,
333        IDS_EXTENSION_PROMPT_WARNING_START_PAGE_SETTING_OVERRIDE,
334        PermissionMessage::kStartupPages},
335   };
336
337   std::vector<APIPermissionInfo*> permissions;
338
339   for (size_t i = 0; i < ARRAYSIZE_UNSAFE(permissions_to_register); ++i)
340     permissions.push_back(new APIPermissionInfo(permissions_to_register[i]));
341   return permissions;
342 }
343
344 std::vector<PermissionsProvider::AliasInfo>
345 ChromeAPIPermissions::GetAllAliases() const {
346   // Register aliases.
347   std::vector<PermissionsProvider::AliasInfo> aliases;
348   aliases.push_back(PermissionsProvider::AliasInfo(
349       "unlimitedStorage", kOldUnlimitedStoragePermission));
350   aliases.push_back(PermissionsProvider::AliasInfo(
351       "tabs", kWindowsPermission));
352   return aliases;
353 }
354
355 }  // namespace extensions