1// Copyright 2014 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 "extensions/common/permissions/extensions_api_permissions.h"
6
7#include <vector>
8
9#include "extensions/common/permissions/api_permission.h"
10#include "extensions/common/permissions/permission_message.h"
11#include "extensions/common/permissions/socket_permission.h"
12#include "extensions/common/permissions/usb_device_permission.h"
13#include "grit/extensions_strings.h"
14
15namespace extensions {
16
17namespace {
18
19const char kOldAlwaysOnTopWindowsPermission[] = "alwaysOnTopWindows";
20const char kOldFullscreenPermission[] = "fullscreen";
21const char kOldOverrideEscFullscreenPermission[] = "overrideEscFullscreen";
22
23template <typename T>
24APIPermission* CreateAPIPermission(const APIPermissionInfo* permission) {
25  return new T(permission);
26}
27
28}  // namespace
29
30std::vector<APIPermissionInfo*> ExtensionsAPIPermissions::GetAllPermissions()
31    const {
32  APIPermissionInfo::InitInfo permissions_to_register[] = {
33      {APIPermission::kAlphaEnabled, "app.window.alpha"},
34      {APIPermission::kAlwaysOnTopWindows, "app.window.alwaysOnTop"},
35      {APIPermission::kAudioCapture, "audioCapture",
36       APIPermissionInfo::kFlagNone, IDS_EXTENSION_PROMPT_WARNING_AUDIO_CAPTURE,
37       PermissionMessage::kAudioCapture},
38      {APIPermission::kDns, "dns"},
39      {APIPermission::kExternallyConnectableAllUrls,
40       "externally_connectable.all_urls"},
41      {APIPermission::kFullscreen, "app.window.fullscreen"},
42      {APIPermission::kHid, "hid", APIPermissionInfo::kFlagNone,
43       IDS_EXTENSION_PROMPT_WARNING_HID, PermissionMessage::kHid},
44      {APIPermission::kOverrideEscFullscreen,
45       "app.window.fullscreen.overrideEsc"},
46      {APIPermission::kPower, "power"},
47      {APIPermission::kSerial, "serial", APIPermissionInfo::kFlagNone,
48       IDS_EXTENSION_PROMPT_WARNING_SERIAL, PermissionMessage::kSerial},
49      // Because warning messages for the "socket" permission vary based
50      // on the permissions parameters, no message ID or message text is
51      // specified here.  The message ID and text used will be
52      // determined at run-time in the |SocketPermission| class.
53      {APIPermission::kSocket, "socket",
54       APIPermissionInfo::kFlagCannotBeOptional, 0, PermissionMessage::kNone,
55       &CreateAPIPermission<SocketPermission>},
56      {APIPermission::kStorage, "storage"},
57      {APIPermission::kSystemCpu, "system.cpu"},
58      {APIPermission::kSystemMemory, "system.memory"},
59      {APIPermission::kSystemNetwork, "system.network"},
60      {APIPermission::kSystemDisplay, "system.display"},
61      {APIPermission::kSystemStorage, "system.storage"},
62      {APIPermission::kU2fDevices, "u2fDevices", APIPermissionInfo::kFlagNone,
63       IDS_EXTENSION_PROMPT_WARNING_U2F_DEVICES,
64       PermissionMessage::kU2fDevices},
65      {APIPermission::kUsb, "usb", APIPermissionInfo::kFlagNone,
66       IDS_EXTENSION_PROMPT_WARNING_USB, PermissionMessage::kUsb},
67      {APIPermission::kUsbDevice, "usbDevices", APIPermissionInfo::kFlagNone, 0,
68       PermissionMessage::kNone, &CreateAPIPermission<UsbDevicePermission>},
69      {APIPermission::kVideoCapture, "videoCapture",
70       APIPermissionInfo::kFlagNone, IDS_EXTENSION_PROMPT_WARNING_VIDEO_CAPTURE,
71       PermissionMessage::kVideoCapture},
72      // NOTE(kalman): This is provided by a manifest property but needs to
73      // appear in the install permission dialogue, so we need a fake
74      // permission for it. See http://crbug.com/247857.
75      {APIPermission::kWebConnectable, "webConnectable",
76       APIPermissionInfo::kFlagCannotBeOptional |
77           APIPermissionInfo::kFlagInternal,
78       IDS_EXTENSION_PROMPT_WARNING_WEB_CONNECTABLE,
79       PermissionMessage::kWebConnectable},
80      {APIPermission::kWebView, "webview",
81       APIPermissionInfo::kFlagCannotBeOptional},
82      {APIPermission::kWindowShape, "app.window.shape"},
83  };
84
85  std::vector<APIPermissionInfo*> permissions;
86  for (size_t i = 0; i < ARRAYSIZE_UNSAFE(permissions_to_register); ++i)
87    permissions.push_back(new APIPermissionInfo(permissions_to_register[i]));
88  return permissions;
89}
90
91std::vector<PermissionsProvider::AliasInfo>
92ExtensionsAPIPermissions::GetAllAliases() const {
93  std::vector<PermissionsProvider::AliasInfo> aliases;
94  aliases.push_back(PermissionsProvider::AliasInfo(
95      "app.window.alwaysOnTop", kOldAlwaysOnTopWindowsPermission));
96  aliases.push_back(PermissionsProvider::AliasInfo("app.window.fullscreen",
97                                                   kOldFullscreenPermission));
98  aliases.push_back(
99      PermissionsProvider::AliasInfo("app.window.fullscreen.overrideEsc",
100                                     kOldOverrideEscFullscreenPermission));
101  return aliases;
102}
103
104}  // namespace extensions
105