OLD | NEW |
| (Empty) |
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 // Messages for Web Bluetooth API. | |
6 // Multiply-included message file, hence no include guard. | |
7 | |
8 // Web Bluetooth Security | |
9 // The security mechanisms of Bluetooth are described in the specification: | |
10 // https://webbluetoothchrome.github.io/web-bluetooth | |
11 // | |
12 // Exerpts: | |
13 // | |
14 // From: Security and privacy considerations | |
15 // http://webbluetoothchrome.github.io/web-bluetooth/#security-and-privacy-consi
derations | |
16 // """ | |
17 // When a website requests access to devices using requestDevice, it gets the | |
18 // ability to access all GATT services mentioned in the call. The UA must inform | |
19 // the user what capabilities these services give the website before asking | |
20 // which devices to entrust to it. If any services in the list aren't known to | |
21 // the UA, the UA must assume they give the site complete control over the | |
22 // device and inform the user of this risk. The UA must also allow the user to | |
23 // inspect what sites have access to what devices and revoke these pairings. | |
24 // | |
25 // The UA must not allow the user to pair entire classes of devices with a | |
26 // website. It is possible to construct a class of devices for which each | |
27 // individual device sends the same Bluetooth-level identifying information. UAs | |
28 // are not required to attempt to detect this sort of forgery and may let a user | |
29 // pair this pseudo-device with a website. | |
30 // | |
31 // To help ensure that only the entity the user approved for access actually has | |
32 // access, this specification requires that only authenticated environments can | |
33 // access Bluetooth devices (requestDevice). | |
34 // """ | |
35 // | |
36 // From: Per-origin Bluetooth device properties: | |
37 // """ | |
38 // For each origin, the UA must maintain an allowed devices map, whose keys are | |
39 // the Bluetooth devices the origin is allowed to access, and whose values are | |
40 // pairs of a DOMString device id and an allowed services list consisting of | |
41 // UUIDs for GATT Primary Services the origin is allowed to access on the | |
42 // device. | |
43 // | |
44 // The UA may remove devices from the allowed devices map at any time based on | |
45 // signals from the user. This needs a definition involving removing | |
46 // BluetoothDevice instances from device instance maps and clearing out their | |
47 // [[representedDevice]] fields. For example, if the user chooses not to | |
48 // remember access, the UA might remove a device when the tab that was granted | |
49 // access to it is closed. Or the UA might provide a revocation UI that allows | |
50 // the user to explicitly remove a device even while a tab is actively using | |
51 // that device. If a device is removed from this list while a Promise is pending | |
52 // to do something with the device, it must be treated the same as if the device | |
53 // moved out of Bluetooth range. | |
54 // """ | |
55 // | |
56 // From: Device Discovery: requestDevice | |
57 // http://webbluetoothchrome.github.io/web-bluetooth/#device-discovery | |
58 // """ | |
59 // Even if scanResult is empty, display a prompt to the user requesting that the | |
60 // user select a device from it. The UA should show the user the human-readable | |
61 // name of each device. If this name is not available because the UA's Bluetooth | |
62 // system doesn't support privacy-enabled scans, the UA should allow the user to | |
63 // indicate interest and then perform a privacy-disabled scan to retrieve the | |
64 // name. | |
65 // | |
66 // The UA may allow the user to select a nearby device that does not match | |
67 // filters. | |
68 // | |
69 // Wait for the user to have selected a device or cancelled the prompt. | |
70 // | |
71 // If the user cancels the prompt, reject promise with a NotFoundError and abort | |
72 // these steps. | |
73 // | |
74 // Add device to the origin's allowed devices map. with the union of the service | |
75 // UUIDs from filters and options.optionalServices as allowed services. | |
76 // | |
77 // Get the BluetoothDevice representing device and resolve promise with the | |
78 // result. | |
79 // """ | |
80 | |
81 #include "ipc/ipc_message_macros.h" | |
82 | |
83 #include <stdint.h> | |
84 | |
85 #include "content/common/bluetooth/bluetooth_device.h" | |
86 #include "content/common/bluetooth/bluetooth_scan_filter.h" | |
87 #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothError
.h" | |
88 | |
89 #define IPC_MESSAGE_START BluetoothMsgStart | |
90 | |
91 IPC_STRUCT_TRAITS_BEGIN(content::BluetoothDevice) | |
92 IPC_STRUCT_TRAITS_MEMBER(id) | |
93 IPC_STRUCT_TRAITS_MEMBER(name) | |
94 IPC_STRUCT_TRAITS_MEMBER(uuids) | |
95 IPC_STRUCT_TRAITS_END() | |
96 | |
97 IPC_ENUM_TRAITS_MAX_VALUE(blink::WebBluetoothError, | |
98 blink::WebBluetoothError::ENUM_MAX_VALUE) | |
99 | |
100 IPC_STRUCT_TRAITS_BEGIN(content::BluetoothScanFilter) | |
101 IPC_STRUCT_TRAITS_MEMBER(services) | |
102 IPC_STRUCT_TRAITS_MEMBER(name) | |
103 IPC_STRUCT_TRAITS_MEMBER(namePrefix) | |
104 IPC_STRUCT_TRAITS_END() | |
105 | |
106 // Messages sent from the browser to the renderer. | |
107 | |
108 // Informs the renderer that the device request |request_id| succeeded. | |
109 IPC_MESSAGE_CONTROL3(BluetoothMsg_RequestDeviceSuccess, | |
110 int /* thread_id */, | |
111 int /* request_id */, | |
112 content::BluetoothDevice /* device */) | |
113 | |
114 // Informs the renderer that the device request |request_id| failed. | |
115 IPC_MESSAGE_CONTROL3(BluetoothMsg_RequestDeviceError, | |
116 int /* thread_id */, | |
117 int /* request_id */, | |
118 blink::WebBluetoothError /* result */) | |
119 | |
120 // Messages sent from the renderer to the browser. | |
121 | |
122 // Requests a bluetooth device from the browser. | |
123 IPC_MESSAGE_CONTROL5(BluetoothHostMsg_RequestDevice, | |
124 int /* thread_id */, | |
125 int /* request_id */, | |
126 int /* frame_routing_id */, | |
127 std::vector<content::BluetoothScanFilter>, | |
128 std::vector<device::BluetoothUUID> /* optional_services */) | |
OLD | NEW |