Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(465)

Side by Side Diff: third_party/WebKit/LayoutTests/usb/usbDevice.html

Issue 1781533002: Track USBDevice open state in Blink. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <script src="../resources/testharness.js"></script> 2 <script src="../resources/testharness.js"></script>
3 <script src="../resources/testharnessreport.js"></script> 3 <script src="../resources/testharnessreport.js"></script>
4 <script src="../resources/mojo-helpers.js"></script> 4 <script src="../resources/mojo-helpers.js"></script>
5 <script src="resources/fake-devices.js"></script> 5 <script src="resources/fake-devices.js"></script>
6 <script src="resources/usb-helpers.js"></script> 6 <script src="resources/usb-helpers.js"></script>
7 <script> 7 <script>
8 'use strict'; 8 'use strict';
9 9
10 function assertRejectsWithError(promise, name, message) {
11 return promise.then(() => {
12 assert_unreached('expected promise to reject with ' + name);
13 }, error => {
14 assert_equals(error.name, name);
15 if (message !== undefined)
16 assert_equals(error.message, message);
17 });
18 }
19
10 function assertRejectsWithNotFoundError(promise) { 20 function assertRejectsWithNotFoundError(promise) {
11 return promise.then(() => { 21 return assertRejectsWithError(promise, 'NotFoundError');
12 assert_unreached('promise should reject'); 22 }
13 }, error => { 23
14 assert_equals(error.code, DOMException.NOT_FOUND_ERR); 24 function assertRejectsWithNotOpenError(promise) {
15 }); 25 return assertRejectsWithError(
26 promise, 'InvalidStateError', 'The device must be open()ed first.')
16 } 27 }
17 28
18 usb_test(usb => { 29 usb_test(usb => {
19 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); 30 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
20 return navigator.usb.getDevices().then(devices => { 31 return navigator.usb.getDevices().then(devices => {
21 assert_equals(1, devices.length); 32 assert_equals(1, devices.length);
22 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); 33 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]);
23 return assertRejectsWithNotFoundError(devices[0].open()); 34 return assertRejectsWithNotFoundError(devices[0].open());
24 }); 35 });
25 }, 'open rejects when called on a disconnected device'); 36 }, 'open rejects when called on a disconnected device');
26 37
27 usb_test(usb => { 38 usb_test(usb => {
28 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); 39 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
29 return navigator.usb.getDevices().then(devices => { 40 return navigator.usb.getDevices().then(devices => {
30 assert_equals(1, devices.length); 41 assert_equals(1, devices.length);
31 let device = devices[0]; 42 let device = devices[0];
32 return device.open().then(() => device.close()); 43 assert_false(device.opened);
44 return device.open().then(() => {
45 assert_true(device.opened);
46 return device.close().then(() => {
47 assert_false(device.opened);
48 });
49 });
33 }); 50 });
34 }, 'a device can be opened and closed'); 51 }, 'a device can be opened and closed');
35 52
36 usb_test(usb => { 53 usb_test(usb => {
37 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); 54 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
38 return navigator.usb.getDevices().then(devices => { 55 return navigator.usb.getDevices().then(devices => {
39 assert_equals(1, devices.length); 56 assert_equals(1, devices.length);
40 let device = devices[0]; 57 let device = devices[0];
58 return device.open()
59 .then(() => device.open())
60 .then(() => device.open())
61 .then(() => device.open())
62 .then(() => device.close())
63 .then(() => device.close())
64 .then(() => device.close())
65 .then(() => device.close());
66 });
67 }, 'open and close can be called multiple times');
68
69 usb_test(usb => {
70 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
71 return navigator.usb.getDevices().then(devices => {
72 assert_equals(1, devices.length);
73 let device = devices[0];
74 return Promise.all([
75 device.open(),
76 assertRejectsWithError(device.open(), 'InvalidStateError',
77 'An open() or close() task is in progress.'),
78 assertRejectsWithError(device.close(), 'InvalidStateError',
79 'An open() or close() task is in progress.'),
80 ]).then(() => Promise.all([
81 device.close(),
82 assertRejectsWithError(device.open(), 'InvalidStateError',
83 'An open() or close() task is in progress.'),
84 assertRejectsWithError(device.close(), 'InvalidStateError',
85 'An open() or close() task is in progress.'),
86 ]));
87 });
88 }, 'open and close cannot be called again while open or close are in progress');
89
90 usb_test(usb => {
91 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
92 return navigator.usb.getDevices().then(devices => {
93 assert_equals(1, devices.length);
94 let device = devices[0];
41 return device.open().then(() => { 95 return device.open().then(() => {
42 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); 96 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]);
43 return assertRejectsWithNotFoundError(device.close()); 97 return assertRejectsWithNotFoundError(device.close());
44 }); 98 });
45 }); 99 });
46 }, 'close rejects when called on a disconnected device'); 100 }, 'close rejects when called on a disconnected device');
47 101
48 usb_test(usb => { 102 usb_test(usb => {
49 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); 103 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
50 return navigator.usb.getDevices().then(devices => { 104 return navigator.usb.getDevices().then(devices => {
51 assert_equals(1, devices.length); 105 assert_equals(1, devices.length);
52 var device = devices[0]; 106 var device = devices[0];
53 return device.open() 107 return device.open()
54 .then(() => { 108 .then(() => {
55 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); 109 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]);
56 return assertRejectsWithNotFoundError(device.setConfiguration(1)); 110 return assertRejectsWithNotFoundError(device.setConfiguration(1));
57 }); 111 });
58 }); 112 });
59 }, 'setConfiguration rejects when called on a disconnected device'); 113 }, 'setConfiguration rejects when called on a disconnected device');
60 114
61 usb_test(usb => { 115 usb_test(usb => {
62 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); 116 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
63 return navigator.usb.getDevices().then(devices => { 117 return navigator.usb.getDevices().then(devices => {
64 assert_equals(1, devices.length); 118 assert_equals(1, devices.length);
119 var device = devices[0];
120 return Promise.all([
121 assertRejectsWithNotOpenError(device.setConfiguration(1)),
122 assertRejectsWithNotOpenError(device.claimInterface(0)),
123 assertRejectsWithNotOpenError(device.releaseInterface(0)),
124 assertRejectsWithNotOpenError(device.setInterface(0, 1)),
125 assertRejectsWithNotOpenError(device.controlTransferIn({
126 requestType: 'vendor',
127 recipient: 'device',
128 request: 0x42,
129 value: 0x1234,
130 index: 0x5678
131 }, 7)),
132 assertRejectsWithNotOpenError(device.controlTransferOut({
133 requestType: 'vendor',
134 recipient: 'device',
135 request: 0x42,
136 value: 0x1234,
137 index: 0x5678
138 }, new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]))),
139 assertRejectsWithNotOpenError(device.clearHalt(1)),
140 assertRejectsWithNotOpenError(device.transferIn(1, 8)),
141 assertRejectsWithNotOpenError(
142 device.transferOut(1, new ArrayBuffer(8))),
143 assertRejectsWithNotOpenError(device.isochronousTransferIn(1, [8])),
144 assertRejectsWithNotOpenError(
145 device.isochronousTransferOut(1, new ArrayBuffer(8), [8])),
146 assertRejectsWithNotOpenError(device.reset())
147 ]);
148 });
149 }, 'methods requiring it reject when the device is not open');
150
151 usb_test(usb => {
152 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
153 return navigator.usb.getDevices().then(devices => {
154 assert_equals(1, devices.length);
65 let device = devices[0]; 155 let device = devices[0];
66 return device.open() 156 return device.open()
67 .then(() => device.setConfiguration(1)) 157 .then(() => device.setConfiguration(1))
68 .then(() => device.getConfiguration()) 158 .then(() => device.getConfiguration())
69 .then(config => { 159 .then(config => {
70 usb.assertConfigurationInfoEquals( 160 usb.assertConfigurationInfoEquals(
71 config, usb.fakeDevices[0].configurations[0]); 161 config, usb.fakeDevices[0].configurations[0]);
72 }) 162 })
73 .then(() => device.close()); 163 .then(() => device.close());
74 }); 164 });
(...skipping 15 matching lines...) Expand all
90 }); 180 });
91 }); 181 });
92 }, 'getConfiguration rejects when called on a disconnected device'); 182 }, 'getConfiguration rejects when called on a disconnected device');
93 183
94 usb_test(usb => { 184 usb_test(usb => {
95 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); 185 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
96 return navigator.usb.getDevices().then(devices => { 186 return navigator.usb.getDevices().then(devices => {
97 assert_equals(devices.length, 1); 187 assert_equals(devices.length, 1);
98 let device = devices[0]; 188 let device = devices[0];
99 return device.open() 189 return device.open()
100 .then(() => device.getConfiguration() 190 .then(() =>
101 .then(() => { 191 assertRejectsWithError(device.getConfiguration(), 'NotFoundError'))
102 assert_unreached('getConfiguration should reject');
103 })
104 .catch(error => {
105 assert_equals(error.code, DOMException.NOT_FOUND_ERR);
106 return Promise.resolve();
107 }))
108 .then(() => device.close()); 192 .then(() => device.close());
109 }); 193 });
110 }, 'querying an unset configuration raises NotFoundError'); 194 }, 'querying an unset configuration raises NotFoundError');
111 195
112 usb_test(usb => { 196 usb_test(usb => {
113 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); 197 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
114 return navigator.usb.getDevices().then(devices => { 198 return navigator.usb.getDevices().then(devices => {
115 assert_equals(1, devices.length); 199 assert_equals(1, devices.length);
116 let device = devices[0]; 200 let device = devices[0];
117 return device.open() 201 return device.open()
118 .then(() => device.setConfiguration(1)) 202 .then(() => device.setConfiguration(1))
119 .then(() => device.claimInterface(0)) 203 .then(() => device.claimInterface(0))
120 .then(() => device.releaseInterface(0)) 204 .then(() => device.releaseInterface(0))
121 .then(() => device.close()); 205 .then(() => device.close());
122 }); 206 });
123 }, 'an interface can be claimed and released'); 207 }, 'an interface can be claimed and released');
124 208
125 usb_test(usb => { 209 usb_test(usb => {
126 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); 210 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
127 return navigator.usb.getDevices().then(devices => { 211 return navigator.usb.getDevices().then(devices => {
128 assert_equals(1, devices.length); 212 assert_equals(1, devices.length);
129 let device = devices[0]; 213 let device = devices[0];
130 return device.open() 214 return device.open()
131 .then(() => device.claimInterface(0) 215 .then(() =>
132 .then(() => {
133 assert_unreached('claimInterface should reject');
134 })
135 .catch(error => {
136 // TODO(reillyg): This should be INVALID_STATE_ERR. 216 // TODO(reillyg): This should be INVALID_STATE_ERR.
137 assert_equals(error.code, DOMException.NETWORK_ERR); 217 assertRejectsWithError(device.claimInterface(0), 'NetworkError'))
138 return Promise.resolve();
139 }))
140 .then(() => device.close()); 218 .then(() => device.close());
141 }); 219 });
142 }, 'claiming an interface fails without an active configuration'); 220 }, 'claiming an interface fails without an active configuration');
143 221
144 usb_test(usb => { 222 usb_test(usb => {
145 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]); 223 usb.mockDeviceManager.addMockDevice(usb.fakeDevices[0]);
146 return navigator.usb.getDevices().then(devices => { 224 return navigator.usb.getDevices().then(devices => {
147 assert_equals(1, devices.length); 225 assert_equals(1, devices.length);
148 var device = devices[0]; 226 var device = devices[0];
149 return device.open() 227 return device.open()
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
528 return navigator.usb.getDevices().then(devices => { 606 return navigator.usb.getDevices().then(devices => {
529 assert_equals(1, devices.length); 607 assert_equals(1, devices.length);
530 let device = devices[0]; 608 let device = devices[0];
531 return device.open().then(() => { 609 return device.open().then(() => {
532 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]); 610 usb.mockDeviceManager.removeMockDevice(usb.fakeDevices[0]);
533 return assertRejectsWithNotFoundError(device.reset()); 611 return assertRejectsWithNotFoundError(device.reset());
534 }); 612 });
535 }); 613 });
536 }, 'resetDevice rejects when called on a disconnected device'); 614 }, 'resetDevice rejects when called on a disconnected device');
537 </script> 615 </script>
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698