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