mirror of
https://github.com/servo/servo.git
synced 2025-09-01 02:28:21 +01:00
Update web-platform-tests to revision 74bae78af4b95a2f0ca3a81df9c7fe3143f24bbc
This commit is contained in:
parent
fb95f9df9c
commit
02c1eed999
150 changed files with 2395 additions and 829 deletions
|
@ -9,8 +9,10 @@
|
|||
const test_desc = 'Device with empty name and no UUIDs nearby. Should be ' +
|
||||
'found if acceptAllDevices is true.';
|
||||
|
||||
bluetooth_test(() => setUpPreconnectedDevice({name: ''})
|
||||
.then(() => requestDeviceWithTrustedClick({acceptAllDevices: true}))
|
||||
.then(device => assert_equals(device.name, '')),
|
||||
bluetooth_test(
|
||||
() =>
|
||||
setUpPreconnectedDevice({name: ''})
|
||||
.then(() => requestDeviceWithTrustedClick({acceptAllDevices: true}))
|
||||
.then(device => assert_equals(device.name, '')),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -5,12 +5,15 @@
|
|||
<script src="/resources/testdriver-vendor.js"></script>
|
||||
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
|
||||
<script>
|
||||
const test_desc = 'A device with name and no UUIDs nearby. Should be found if ' +
|
||||
'acceptAllDevices is true.';
|
||||
const test_desc =
|
||||
'A device with name and no UUIDs nearby. Should be found if ' +
|
||||
'acceptAllDevices is true.';
|
||||
const name = 'LE Device';
|
||||
|
||||
bluetooth_test(() => setUpPreconnectedDevice({name: name})
|
||||
.then(() => requestDeviceWithTrustedClick({acceptAllDevices: true}))
|
||||
.then(device => assert_equals(device.name, name)),
|
||||
bluetooth_test(
|
||||
() =>
|
||||
setUpPreconnectedDevice({name: name})
|
||||
.then(() => requestDeviceWithTrustedClick({acceptAllDevices: true}))
|
||||
.then(device => assert_equals(device.name, name)),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -10,13 +10,14 @@ const test_desc = 'requestDevice called with acceptAllDevices: true and ' +
|
|||
'with no optionalServices. Should not get access to any services.';
|
||||
const expected = new DOMException(
|
||||
'Origin is not allowed to access any service. ' +
|
||||
'Tip: Add the service UUID to \'optionalServices\' in ' +
|
||||
'requestDevice() options. https://goo.gl/HxfxSQ',
|
||||
'Tip: Add the service UUID to \'optionalServices\' in ' +
|
||||
'requestDevice() options. https://goo.gl/HxfxSQ',
|
||||
'SecurityError');
|
||||
|
||||
bluetooth_test(() => getConnectedHealthThermometerDevice({acceptAllDevices: true})
|
||||
.then(({device}) => assert_promise_rejects_with_message(
|
||||
device.gatt.getPrimaryServices(),
|
||||
expected)),
|
||||
bluetooth_test(
|
||||
() => getConnectedHealthThermometerDevice({acceptAllDevices: true})
|
||||
.then(
|
||||
({device}) => assert_promise_rejects_with_message(
|
||||
device.gatt.getPrimaryServices(), expected)),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -7,20 +7,23 @@
|
|||
<script>
|
||||
'use strict';
|
||||
const test_desc = 'requestDevice called with acceptAllDevices: true and with ' +
|
||||
'optionalServices. Should get access to services.';
|
||||
'optionalServices. Should get access to services.';
|
||||
|
||||
bluetooth_test(() => getTwoHealthThermometerServicesDevice()
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
acceptAllDevices: true,
|
||||
optionalServices: ['health_thermometer']
|
||||
}))
|
||||
.then(device => device.gatt.connect())
|
||||
.then(gattServer => gattServer.getPrimaryServices())
|
||||
.then(services => {
|
||||
assert_equals(services.length, 2);
|
||||
services.forEach(service => {
|
||||
assert_equals(service.uuid,
|
||||
BluetoothUUID.getService('health_thermometer'));
|
||||
});
|
||||
}), test_desc);
|
||||
bluetooth_test(
|
||||
() => getTwoHealthThermometerServicesDevice()
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
acceptAllDevices: true,
|
||||
optionalServices: ['health_thermometer']
|
||||
}))
|
||||
.then(device => device.gatt.connect())
|
||||
.then(gattServer => gattServer.getPrimaryServices())
|
||||
.then(services => {
|
||||
assert_equals(services.length, 2);
|
||||
services.forEach(service => {
|
||||
assert_equals(
|
||||
service.uuid,
|
||||
BluetoothUUID.getService('health_thermometer'));
|
||||
});
|
||||
}),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -10,16 +10,16 @@ const test_desc = 'Reject with SecurityError if requesting a blocklisted ' +
|
|||
'service.';
|
||||
const expected = new DOMException(
|
||||
'requestDevice() called with a filter containing a blocklisted UUID. ' +
|
||||
'https://goo.gl/4NeimX',
|
||||
'https://goo.gl/4NeimX',
|
||||
'SecurityError');
|
||||
|
||||
bluetooth_test(() => setUpPreconnectedDevice({
|
||||
knownServiceUUIDs: ['human_interface_device']
|
||||
})
|
||||
.then(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({
|
||||
filters: [{services: ['human_interface_device']}]
|
||||
}),
|
||||
expected, 'Requesting blocklisted service rejects.')),
|
||||
bluetooth_test(
|
||||
() =>
|
||||
setUpPreconnectedDevice({knownServiceUUIDs: ['human_interface_device']})
|
||||
.then(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(
|
||||
{filters: [{services: ['human_interface_device']}]}),
|
||||
expected, 'Requesting blocklisted service rejects.')),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -8,26 +8,30 @@
|
|||
'use strict';
|
||||
const test_desc = 'Blocklisted UUID in optionalServices is removed and ' +
|
||||
'access not granted.';
|
||||
const expected = new DOMException('Origin is not allowed to access the ' +
|
||||
'service. Tip: Add the service UUID to \'optionalServices\' in ' +
|
||||
'requestDevice() options. https://goo.gl/HxfxSQ',
|
||||
const expected = new DOMException(
|
||||
'Origin is not allowed to access the ' +
|
||||
'service. Tip: Add the service UUID to \'optionalServices\' in ' +
|
||||
'requestDevice() options. https://goo.gl/HxfxSQ',
|
||||
'SecurityError');
|
||||
let device, fake_peripheral;
|
||||
|
||||
bluetooth_test(() => getDiscoveredHealthThermometerDevice({
|
||||
filters: [{services: ['health_thermometer']}],
|
||||
optionalServices: ['human_interface_device']
|
||||
})
|
||||
.then(_ => ({device, fake_peripheral} = _))
|
||||
.then(() =>
|
||||
fake_peripheral.setNextGATTConnectionResponse({code: HCI_SUCCESS}))
|
||||
.then(() => device.gatt.connect())
|
||||
.then(() => Promise.all([
|
||||
assert_promise_rejects_with_message(
|
||||
device.gatt.getPrimaryService('human_interface_device'),
|
||||
expected, 'Blocklisted service not accessible.'),
|
||||
assert_promise_rejects_with_message(
|
||||
device.gatt.getPrimaryServices('human_interface_device'),
|
||||
expected, 'Blocklisted services not accessible.')])),
|
||||
bluetooth_test(
|
||||
() => getDiscoveredHealthThermometerDevice({
|
||||
filters: [{services: ['health_thermometer']}],
|
||||
optionalServices: ['human_interface_device']
|
||||
})
|
||||
.then(_ => ({device, fake_peripheral} = _))
|
||||
.then(
|
||||
() => fake_peripheral.setNextGATTConnectionResponse(
|
||||
{code: HCI_SUCCESS}))
|
||||
.then(() => device.gatt.connect())
|
||||
.then(() => Promise.all([
|
||||
assert_promise_rejects_with_message(
|
||||
device.gatt.getPrimaryService('human_interface_device'),
|
||||
expected, 'Blocklisted service not accessible.'),
|
||||
assert_promise_rejects_with_message(
|
||||
device.gatt.getPrimaryServices('human_interface_device'),
|
||||
expected, 'Blocklisted services not accessible.')
|
||||
])),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -10,10 +10,11 @@ const test_desc = 'A device name between 29 and 248 bytes is valid.';
|
|||
const DEVICE_NAME = 'a_device_name_that_is_longer_than_29_bytes_but_' +
|
||||
'shorter_than_248_bytes';
|
||||
|
||||
bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME})
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{name: DEVICE_NAME}]
|
||||
}))
|
||||
.then(device => assert_equals(device.name, DEVICE_NAME)),
|
||||
bluetooth_test(
|
||||
() => setUpPreconnectedDevice({name: DEVICE_NAME})
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{name: DEVICE_NAME}]}))
|
||||
.then(device => assert_equals(device.name, DEVICE_NAME)),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
const test_desc = 'A filter must restrict the devices in some way.';
|
||||
const expected = new TypeError();
|
||||
|
||||
bluetooth_test(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: [{}]}),
|
||||
expected),
|
||||
bluetooth_test(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: [{}]}), expected),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -7,12 +7,13 @@
|
|||
<script>
|
||||
'use strict';
|
||||
const test_desc = 'An empty |filters| member should result in a TypeError';
|
||||
const expected = new DOMException('Failed to execute \'requestDevice\' on ' +
|
||||
'\'Bluetooth\': \'filters\' member must be non-empty to find any devices.',
|
||||
const expected = new DOMException(
|
||||
'Failed to execute \'requestDevice\' on ' +
|
||||
'\'Bluetooth\': \'filters\' member must be non-empty to find any devices.',
|
||||
new TypeError());
|
||||
|
||||
bluetooth_test(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: []}),
|
||||
expected),
|
||||
bluetooth_test(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: []}), expected),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -9,36 +9,29 @@
|
|||
const test_desc = 'requestDevice with empty namePrefix. ' +
|
||||
'Should reject with TypeError.';
|
||||
const expected = new TypeError();
|
||||
const test_specs = [{
|
||||
filters: [{ namePrefix: ''}]
|
||||
}, {
|
||||
filters: [{ namePrefix: '', name: 'Name'}]
|
||||
}, {
|
||||
filters: [{ namePrefix: '', services: ['heart_rate']}]
|
||||
}, {
|
||||
filters: [{ namePrefix: '', name: 'Name', services: ['heart_rate']}]
|
||||
}, {
|
||||
filters: [{ namePrefix: ''}],
|
||||
optionalServices: ['heart_rate']
|
||||
}, {
|
||||
filters: [{ namePrefix: '', name: 'Name'}],
|
||||
optionalServices: ['heart_rate']
|
||||
}, {
|
||||
filters: [{ namePrefix: '', services: ['heart_rate']}],
|
||||
optionalServices: ['heart_rate']
|
||||
}, {
|
||||
filters: [{ namePrefix: '', name: 'Name', services: ['heart_rate']}],
|
||||
optionalServices: ['heart_rate']
|
||||
}];
|
||||
const test_specs = [
|
||||
{filters: [{namePrefix: ''}]}, {filters: [{namePrefix: '', name: 'Name'}]},
|
||||
{filters: [{namePrefix: '', services: ['heart_rate']}]},
|
||||
{filters: [{namePrefix: '', name: 'Name', services: ['heart_rate']}]},
|
||||
{filters: [{namePrefix: ''}], optionalServices: ['heart_rate']},
|
||||
{filters: [{namePrefix: '', name: 'Name'}], optionalServices: ['heart_rate']},
|
||||
{
|
||||
filters: [{namePrefix: '', services: ['heart_rate']}],
|
||||
optionalServices: ['heart_rate']
|
||||
},
|
||||
{
|
||||
filters: [{namePrefix: '', name: 'Name', services: ['heart_rate']}],
|
||||
optionalServices: ['heart_rate']
|
||||
}
|
||||
];
|
||||
|
||||
bluetooth_test(() => {
|
||||
let test_promises = Promise.resolve();
|
||||
test_specs.forEach(args => {
|
||||
test_promises = test_promises
|
||||
.then(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(args),
|
||||
expected));
|
||||
});
|
||||
return test_promises;
|
||||
}, test_desc);
|
||||
let test_promises = Promise.resolve();
|
||||
test_specs.forEach(args => {
|
||||
test_promises = test_promises.then(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(args), expected));
|
||||
});
|
||||
return test_promises;
|
||||
}, test_desc);
|
||||
</script>
|
||||
|
|
|
@ -10,14 +10,12 @@ const test_desc = 'Services member must contain at least one service.';
|
|||
const expected = new TypeError();
|
||||
|
||||
bluetooth_test(() => {
|
||||
let test_promises = Promise.resolve();
|
||||
generateRequestDeviceArgsWithServices([]).forEach(args => {
|
||||
test_promises = test_promises.then(() =>
|
||||
assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(args),
|
||||
expected,
|
||||
'Services member must contain at least one service'))
|
||||
});
|
||||
return test_promises;
|
||||
}, test_desc);
|
||||
let test_promises = Promise.resolve();
|
||||
generateRequestDeviceArgsWithServices([]).forEach(
|
||||
args => {test_promises = test_promises.then(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(args), expected,
|
||||
'Services member must contain at least one service'))});
|
||||
return test_promises;
|
||||
}, test_desc);
|
||||
</script>
|
||||
|
|
|
@ -6,28 +6,24 @@
|
|||
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
const test_desc = "RequestDeviceOptions should have exactly one of " +
|
||||
"'filters' or 'acceptAllDevices:true'. Reject with TypeError if not.";
|
||||
const test_desc = 'RequestDeviceOptions should have exactly one of ' +
|
||||
'\'filters\' or \'acceptAllDevices:true\'. Reject with TypeError if not.';
|
||||
const expected = new DOMException(
|
||||
"Failed to execute 'requestDevice' on 'Bluetooth': " +
|
||||
"Either 'filters' should be present or " +
|
||||
"'acceptAllDevices' should be true, but not both.",
|
||||
'Failed to execute \'requestDevice\' on \'Bluetooth\': ' +
|
||||
'Either \'filters\' should be present or ' +
|
||||
'\'acceptAllDevices\' should be true, but not both.',
|
||||
new TypeError());
|
||||
const test_specs = [
|
||||
{},
|
||||
{optionalServices: ['heart_rate']},
|
||||
{filters: [], acceptAllDevices: true},
|
||||
{}, {optionalServices: ['heart_rate']}, {filters: [], acceptAllDevices: true},
|
||||
{filters: [], acceptAllDevices: true, optionalServices: ['heart_rate']}
|
||||
];
|
||||
|
||||
bluetooth_test(() => {
|
||||
let test_promises = Promise.resolve();
|
||||
test_specs.forEach(args => {
|
||||
test_promises = test_promises
|
||||
.then(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(args),
|
||||
expected))
|
||||
});
|
||||
return test_promises;
|
||||
}, test_desc);
|
||||
let test_promises = Promise.resolve();
|
||||
test_specs.forEach(
|
||||
args => {test_promises = test_promises.then(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(args), expected))});
|
||||
return test_promises;
|
||||
}, test_desc);
|
||||
</script>
|
||||
|
|
|
@ -9,15 +9,16 @@
|
|||
const test_desc = 'Unicode string with utf8 representation longer than 248 ' +
|
||||
'bytes in \'name\' must throw TypeError.';
|
||||
const expected = new DOMException(
|
||||
"Failed to execute 'requestDevice' on 'Bluetooth': " +
|
||||
"A device name can't be longer than 248 bytes.",
|
||||
'Failed to execute \'requestDevice\' on \'Bluetooth\': ' +
|
||||
'A device name can\'t be longer than 248 bytes.',
|
||||
new TypeError());
|
||||
// \u2764's UTF-8 respresentation is 3 bytes long.
|
||||
// 83 chars * 3 bytes/char = 249 bytes
|
||||
const unicode_name = '\u2764'.repeat(83);
|
||||
|
||||
bluetooth_test(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: [{name: unicode_name}]}),
|
||||
expected),
|
||||
bluetooth_test(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: [{name: unicode_name}]}),
|
||||
expected),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -8,14 +8,14 @@
|
|||
'use strict';
|
||||
const test_desc = 'A device name longer than 248 must reject.';
|
||||
const expected = new DOMException(
|
||||
"Failed to execute 'requestDevice' on 'Bluetooth': A device " +
|
||||
"name can't be longer than 248 bytes.",
|
||||
'Failed to execute \'requestDevice\' on \'Bluetooth\': A device ' +
|
||||
'name can\'t be longer than 248 bytes.',
|
||||
new TypeError());
|
||||
const name_too_long = 'a'.repeat(249);
|
||||
|
||||
bluetooth_test(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: [{name: name_too_long}]}),
|
||||
expected,
|
||||
'Device name longer than 248'),
|
||||
bluetooth_test(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: [{name: name_too_long}]}),
|
||||
expected, 'Device name longer than 248'),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -9,15 +9,16 @@
|
|||
const test_desc = 'Unicode string with utf8 representation longer than 248 ' +
|
||||
'bytes in \'namePrefix\' must throw NotFoundError.';
|
||||
const expected = new DOMException(
|
||||
"Failed to execute 'requestDevice' on 'Bluetooth': " +
|
||||
"A device name can't be longer than 248 bytes.",
|
||||
'Failed to execute \'requestDevice\' on \'Bluetooth\': ' +
|
||||
'A device name can\'t be longer than 248 bytes.',
|
||||
new TypeError());
|
||||
// \u2764's UTF-8 respresentation is 3 bytes long.
|
||||
// 83 chars * 3 bytes/char = 249 bytes
|
||||
const unicode_name = '\u2764'.repeat(83);
|
||||
|
||||
bluetooth_test(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: [{namePrefix: unicode_name}]}),
|
||||
expected),
|
||||
bluetooth_test(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: [{namePrefix: unicode_name}]}),
|
||||
expected),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -8,14 +8,14 @@
|
|||
'use strict';
|
||||
const test_desc = 'A device name prefix longer than 248 must reject.';
|
||||
const expected = new DOMException(
|
||||
"Failed to execute 'requestDevice' on 'Bluetooth': A device " +
|
||||
"name can't be longer than 248 bytes.",
|
||||
'Failed to execute \'requestDevice\' on \'Bluetooth\': A device ' +
|
||||
'name can\'t be longer than 248 bytes.',
|
||||
new TypeError());
|
||||
const name_too_long = 'a'.repeat(249);
|
||||
|
||||
bluetooth_test(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: [{namePrefix: name_too_long}]}),
|
||||
expected,
|
||||
'Device name longer than 248'),
|
||||
bluetooth_test(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({filters: [{namePrefix: name_too_long}]}),
|
||||
expected, 'Device name longer than 248'),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -11,8 +11,11 @@ const test_desc = 'A unicode device name of 248 bytes is valid.';
|
|||
// 124 chars * 2 bytes/char = 248 bytes
|
||||
const DEVICE_NAME = '\u00A1'.repeat(124);
|
||||
|
||||
bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME})
|
||||
.then(() => requestDeviceWithTrustedClick({ filters: [{name: DEVICE_NAME}]}))
|
||||
.then(device => assert_equals(device.name, DEVICE_NAME)),
|
||||
bluetooth_test(
|
||||
() => setUpPreconnectedDevice({name: DEVICE_NAME})
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{name: DEVICE_NAME}]}))
|
||||
.then(device => assert_equals(device.name, DEVICE_NAME)),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -9,8 +9,11 @@
|
|||
const test_desc = 'A device name of 248 bytes is valid.';
|
||||
const DEVICE_NAME = 'a'.repeat(248);
|
||||
|
||||
bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME})
|
||||
.then(() => requestDeviceWithTrustedClick({ filters: [{name: DEVICE_NAME}]}))
|
||||
.then(device => assert_equals(device.name, DEVICE_NAME)),
|
||||
bluetooth_test(
|
||||
() => setUpPreconnectedDevice({name: DEVICE_NAME})
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{name: DEVICE_NAME}]}))
|
||||
.then(device => assert_equals(device.name, DEVICE_NAME)),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -11,10 +11,11 @@ const test_desc = 'A unicode device namePrefix of 248 bytes is valid.';
|
|||
// 124 chars * 2 bytes/char = 248 bytes
|
||||
const DEVICE_NAME = '\u00A1'.repeat(124);
|
||||
|
||||
bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME})
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{namePrefix: DEVICE_NAME}]
|
||||
}))
|
||||
.then(device => assert_equals(device.name, DEVICE_NAME)),
|
||||
bluetooth_test(
|
||||
() => setUpPreconnectedDevice({name: DEVICE_NAME})
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{namePrefix: DEVICE_NAME}]}))
|
||||
.then(device => assert_equals(device.name, DEVICE_NAME)),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -9,10 +9,11 @@
|
|||
const test_desc = 'A device namePrefix of 248 bytes is valid.';
|
||||
const DEVICE_NAME = 'a'.repeat(248);
|
||||
|
||||
bluetooth_test(() => setUpPreconnectedDevice({name: DEVICE_NAME})
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{namePrefix: DEVICE_NAME}]
|
||||
}))
|
||||
.then(device => assert_equals(device.name, DEVICE_NAME)),
|
||||
bluetooth_test(
|
||||
() => setUpPreconnectedDevice({name: DEVICE_NAME})
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{namePrefix: DEVICE_NAME}]}))
|
||||
.then(device => assert_equals(device.name, DEVICE_NAME)),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -10,8 +10,8 @@
|
|||
const test_desc = 'requestDevice() requires an argument.';
|
||||
const expected = new TypeError();
|
||||
|
||||
promise_test(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(),
|
||||
expected),
|
||||
promise_test(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(), expected),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -12,10 +12,11 @@ const test_desc = 'A name containing unicode characters whose utf8 length ' +
|
|||
// 9 chars * 3 bytes/char = 27 bytes
|
||||
const valid_unicode_name = '\u2764'.repeat(9);
|
||||
|
||||
bluetooth_test(() => setUpPreconnectedDevice({name: valid_unicode_name})
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{name: valid_unicode_name}]
|
||||
}))
|
||||
.then(device => assert_equals(device.name, valid_unicode_name)),
|
||||
bluetooth_test(
|
||||
() => setUpPreconnectedDevice({name: valid_unicode_name})
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{name: valid_unicode_name}]}))
|
||||
.then(device => assert_equals(device.name, valid_unicode_name)),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -6,16 +6,17 @@
|
|||
<script src="/bluetooth/resources/bluetooth-helpers.js"></script>
|
||||
<script>
|
||||
'use strict';
|
||||
const test_desc = 'A namePrefix containing unicode characters whose utf8 ' +
|
||||
const test_desc = 'A namePrefix containing unicode characters whose utf8 ' +
|
||||
'length is less than 30 must not throw an error.';
|
||||
// \u2764's UTF-8 representation is 3 bytes long.
|
||||
// 9 chars * 3 bytes/char = 27 bytes
|
||||
const valid_unicode_name = '\u2764'.repeat(9);
|
||||
|
||||
bluetooth_test(() => setUpPreconnectedDevice({name: valid_unicode_name})
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{namePrefix: valid_unicode_name}]
|
||||
}))
|
||||
.then(device => assert_equals(device.name, valid_unicode_name)),
|
||||
bluetooth_test(
|
||||
() => setUpPreconnectedDevice({name: valid_unicode_name})
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{namePrefix: valid_unicode_name}]}))
|
||||
.then(device => assert_equals(device.name, valid_unicode_name)),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -8,37 +8,34 @@
|
|||
'use strict';
|
||||
const test_desc = 'Invalid optional service must reject the promise.';
|
||||
const expected = new TypeError();
|
||||
const test_specs = [{
|
||||
optionalServices: ['wrong_service'],
|
||||
filters: [{services: ['heart_rate']}]
|
||||
}, {
|
||||
optionalServices: ['wrong_service'],
|
||||
filters: [{ services: ['heart_rate'], name: 'Name'}]
|
||||
}, {
|
||||
optionalServices: ['wrong_service'],
|
||||
filters: [{ services: ['heart_rate'], namePrefix: 'Pre'}]
|
||||
}, {
|
||||
optionalServices: ['wrong_service'],
|
||||
filters: [{ services: ['heart_rate'], name: 'Name', namePrefix: 'Pre'}]
|
||||
}, {
|
||||
optionalServices: ['wrong_service'],
|
||||
filters: [{ name: 'Name'}]
|
||||
}, {
|
||||
optionalServices: ['wrong_service'],
|
||||
filters: [{ name: 'Name', namePrefix: 'Pre'}]
|
||||
}, {
|
||||
optionalServices: ['wrong_service'],
|
||||
filters: [{ namePrefix: 'Pre'}]
|
||||
}];
|
||||
const test_specs = [
|
||||
{optionalServices: ['wrong_service'], filters: [{services: ['heart_rate']}]},
|
||||
{
|
||||
optionalServices: ['wrong_service'],
|
||||
filters: [{services: ['heart_rate'], name: 'Name'}]
|
||||
},
|
||||
{
|
||||
optionalServices: ['wrong_service'],
|
||||
filters: [{services: ['heart_rate'], namePrefix: 'Pre'}]
|
||||
},
|
||||
{
|
||||
optionalServices: ['wrong_service'],
|
||||
filters: [{services: ['heart_rate'], name: 'Name', namePrefix: 'Pre'}]
|
||||
},
|
||||
{optionalServices: ['wrong_service'], filters: [{name: 'Name'}]}, {
|
||||
optionalServices: ['wrong_service'],
|
||||
filters: [{name: 'Name', namePrefix: 'Pre'}]
|
||||
},
|
||||
{optionalServices: ['wrong_service'], filters: [{namePrefix: 'Pre'}]}
|
||||
];
|
||||
|
||||
bluetooth_test(() => {
|
||||
let test_promises = Promise.resolve();
|
||||
test_specs.forEach(args => {
|
||||
test_promises =
|
||||
test_promises.then(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(args),
|
||||
expected));
|
||||
});
|
||||
return test_promises;
|
||||
}, test_desc);
|
||||
let test_promises = Promise.resolve();
|
||||
test_specs.forEach(args => {
|
||||
test_promises = test_promises.then(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(args), expected));
|
||||
});
|
||||
return test_promises;
|
||||
}, test_desc);
|
||||
</script>
|
||||
|
|
|
@ -10,13 +10,12 @@ const test_desc = 'Invalid service must reject the promise.';
|
|||
const expected = new TypeError();
|
||||
|
||||
bluetooth_test(() => {
|
||||
let test_promises = Promise.resolve();
|
||||
generateRequestDeviceArgsWithServices(['wrong_service']).forEach(args => {
|
||||
test_promises = test_promises.then(() =>
|
||||
assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(args),
|
||||
expected));
|
||||
});
|
||||
return test_promises;
|
||||
}, test_desc);
|
||||
let test_promises = Promise.resolve();
|
||||
generateRequestDeviceArgsWithServices(['wrong_service']).forEach(args => {
|
||||
test_promises = test_promises.then(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(args), expected));
|
||||
});
|
||||
return test_promises;
|
||||
}, test_desc);
|
||||
</script>
|
||||
|
|
|
@ -13,26 +13,29 @@ const cross_origin_src = 'https://{{domains[www]}}:{{ports[https][0]}}' +
|
|||
'/bluetooth/resources/health-thermometer-iframe.html'
|
||||
let iframe = document.createElement('iframe');
|
||||
|
||||
bluetooth_test(() => setUpHealthThermometerDevice()
|
||||
// 1. Load the iframe.
|
||||
.then(() => new Promise(resolve => {
|
||||
iframe.src = cross_origin_src;
|
||||
document.body.appendChild(iframe);
|
||||
iframe.addEventListener('load', resolve);
|
||||
}))
|
||||
// 2. Request the device from the iframe.
|
||||
.then(() => new Promise(resolve => {
|
||||
callWithTrustedClick(() => {
|
||||
iframe.contentWindow.postMessage({
|
||||
type: 'RequestDevice'
|
||||
}, '*');
|
||||
});
|
||||
bluetooth_test(
|
||||
() => setUpHealthThermometerDevice()
|
||||
// 1. Load the iframe.
|
||||
.then(() => new Promise(resolve => {
|
||||
iframe.src = cross_origin_src;
|
||||
document.body.appendChild(iframe);
|
||||
iframe.addEventListener('load', resolve);
|
||||
}))
|
||||
// 2. Request the device from the iframe.
|
||||
.then(() => new Promise(resolve => {
|
||||
callWithTrustedClick(() => {
|
||||
iframe.contentWindow.postMessage(
|
||||
{type: 'RequestDevice'}, '*');
|
||||
});
|
||||
|
||||
window.onmessage = messageEvent => {
|
||||
assert_equals(messageEvent.data, 'SecurityError: requestDevice() ' +
|
||||
'called from cross-origin iframe.');
|
||||
resolve();
|
||||
}
|
||||
})), test_desc);
|
||||
window.onmessage = messageEvent => {
|
||||
assert_equals(
|
||||
messageEvent.data,
|
||||
'SecurityError: requestDevice() ' +
|
||||
'called from cross-origin iframe.');
|
||||
resolve();
|
||||
}
|
||||
})),
|
||||
test_desc);
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -8,21 +8,28 @@
|
|||
'use strict';
|
||||
const test_desc = 'Discover a device using alias, name, or UUID.';
|
||||
|
||||
bluetooth_test(() => getConnectedHealthThermometerDevice()
|
||||
// Chrome will always close the previous chooser in the process of handling
|
||||
// a user gesture for the next request, so these need to be done
|
||||
// sequentially.
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{services: [health_thermometer.alias]}]
|
||||
}))
|
||||
.then(device => assert_equals(device.constructor.name, 'BluetoothDevice'))
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{services: [health_thermometer.name]}]
|
||||
}))
|
||||
.then(device => assert_equals(device.constructor.name, 'BluetoothDevice'))
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{services: [health_thermometer.uuid]}]
|
||||
}))
|
||||
.then(device => assert_equals(device.constructor.name, 'BluetoothDevice')),
|
||||
bluetooth_test(
|
||||
() => getConnectedHealthThermometerDevice()
|
||||
// Chrome will always close the previous chooser in the process of
|
||||
// handling a user gesture for the next request, so these need to
|
||||
// be done sequentially.
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{services: [health_thermometer.alias]}]}))
|
||||
.then(
|
||||
device =>
|
||||
assert_equals(device.constructor.name, 'BluetoothDevice'))
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{services: [health_thermometer.name]}]}))
|
||||
.then(
|
||||
device =>
|
||||
assert_equals(device.constructor.name, 'BluetoothDevice'))
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{services: [health_thermometer.uuid]}]}))
|
||||
.then(
|
||||
device => assert_equals(
|
||||
device.constructor.name, 'BluetoothDevice')),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -8,17 +8,21 @@
|
|||
'use strict';
|
||||
const test_desc = 'requestDevice calls do not consume user gestures.';
|
||||
|
||||
bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices()
|
||||
.then(() => callWithTrustedClick(() => {
|
||||
let first = navigator.bluetooth.requestDevice({
|
||||
filters: [{services: ['heart_rate']}]});
|
||||
let second = navigator.bluetooth.requestDevice({
|
||||
filters: [{services: ['heart_rate']}]});
|
||||
return Promise.all([
|
||||
first.then(device => assert_equals(
|
||||
device.constructor.name, 'BluetoothDevice')),
|
||||
second.then(device => assert_equals(
|
||||
device.constructor.name, 'BluetoothDevice')),
|
||||
]);
|
||||
})), test_desc);
|
||||
bluetooth_test(
|
||||
() => setUpHealthThermometerAndHeartRateDevices().then(
|
||||
() => callWithTrustedClick(() => {
|
||||
let first = navigator.bluetooth.requestDevice(
|
||||
{filters: [{services: ['heart_rate']}]});
|
||||
let second = navigator.bluetooth.requestDevice(
|
||||
{filters: [{services: ['heart_rate']}]});
|
||||
return Promise.all([
|
||||
first.then(
|
||||
device =>
|
||||
assert_equals(device.constructor.name, 'BluetoothDevice')),
|
||||
second.then(
|
||||
device =>
|
||||
assert_equals(device.constructor.name, 'BluetoothDevice')),
|
||||
]);
|
||||
})),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -11,57 +11,55 @@ let matching_services = [health_thermometer.uuid];
|
|||
let matching_name = 'Health Thermometer';
|
||||
let matching_namePrefix = 'Health';
|
||||
|
||||
let test_specs = [{
|
||||
filters: [{
|
||||
services: matching_services,
|
||||
}]
|
||||
}, {
|
||||
filters: [{
|
||||
services: matching_services,
|
||||
name: matching_name,
|
||||
}]
|
||||
}, {
|
||||
filters: [{
|
||||
services: matching_services,
|
||||
namePrefix: matching_namePrefix
|
||||
}]
|
||||
}, {
|
||||
filters: [{
|
||||
name: matching_name,
|
||||
}],
|
||||
optionalServices: matching_services
|
||||
}, {
|
||||
filters: [{
|
||||
name: matching_name,
|
||||
namePrefix: matching_namePrefix
|
||||
}],
|
||||
optionalServices: matching_services
|
||||
}, {
|
||||
filters: [{
|
||||
namePrefix: matching_namePrefix
|
||||
}],
|
||||
optionalServices: matching_services
|
||||
}, {
|
||||
filters: [{
|
||||
services: matching_services,
|
||||
name: matching_name,
|
||||
namePrefix: matching_namePrefix
|
||||
}]
|
||||
}];
|
||||
let test_specs = [
|
||||
{
|
||||
filters: [{
|
||||
services: matching_services,
|
||||
}]
|
||||
},
|
||||
{
|
||||
filters: [{
|
||||
services: matching_services,
|
||||
name: matching_name,
|
||||
}]
|
||||
},
|
||||
{filters: [{services: matching_services, namePrefix: matching_namePrefix}]}, {
|
||||
filters: [{
|
||||
name: matching_name,
|
||||
}],
|
||||
optionalServices: matching_services
|
||||
},
|
||||
{
|
||||
filters: [{name: matching_name, namePrefix: matching_namePrefix}],
|
||||
optionalServices: matching_services
|
||||
},
|
||||
{
|
||||
filters: [{namePrefix: matching_namePrefix}],
|
||||
optionalServices: matching_services
|
||||
},
|
||||
{
|
||||
filters: [{
|
||||
services: matching_services,
|
||||
name: matching_name,
|
||||
namePrefix: matching_namePrefix
|
||||
}]
|
||||
}
|
||||
];
|
||||
|
||||
bluetooth_test(() => setUpHealthThermometerDevice()
|
||||
.then(() => {
|
||||
bluetooth_test(
|
||||
() => setUpHealthThermometerDevice().then(() => {
|
||||
let test_promises = Promise.resolve();
|
||||
test_specs.forEach(args => {
|
||||
test_promises = test_promises
|
||||
.then(() => requestDeviceWithTrustedClick(args))
|
||||
.then(device => {
|
||||
// We always have access to the services in matching_services
|
||||
// because we include them in a filter or in optionalServices.
|
||||
assert_equals(device.name, matching_name);
|
||||
assert_true(device.name.startsWith(matching_namePrefix));
|
||||
});
|
||||
test_promises =
|
||||
test_promises.then(() => requestDeviceWithTrustedClick(args))
|
||||
.then(device => {
|
||||
// We always have access to the services in matching_services
|
||||
// because we include them in a filter or in optionalServices.
|
||||
assert_equals(device.name, matching_name);
|
||||
assert_true(device.name.startsWith(matching_namePrefix));
|
||||
});
|
||||
});
|
||||
return test_promises;
|
||||
}), test_desc);
|
||||
}),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -7,12 +7,13 @@
|
|||
<script>
|
||||
'use strict';
|
||||
const test_desc = 'Reject with NotFoundError if Bluetooth is not supported.';
|
||||
const expected = new DOMException('Bluetooth Low Energy not available.',
|
||||
'NotFoundError');
|
||||
const expected =
|
||||
new DOMException('Bluetooth Low Energy not available.', 'NotFoundError');
|
||||
|
||||
bluetooth_test(() => navigator.bluetooth.test.setLESupported(false)
|
||||
.then(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({acceptAllDevices: true}),
|
||||
expected, 'Bluetooth Low Energy is not supported.')),
|
||||
bluetooth_test(
|
||||
() => navigator.bluetooth.test.setLESupported(false).then(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({acceptAllDevices: true}), expected,
|
||||
'Bluetooth Low Energy is not supported.')),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -8,8 +8,10 @@
|
|||
'use strict';
|
||||
const test_desc = 'An empty name device can be obtained by empty name filter.'
|
||||
|
||||
bluetooth_test(() => setUpPreconnectedDevice({name: ''})
|
||||
.then(() => requestDeviceWithTrustedClick({filters: [{name: ''}]}))
|
||||
.then(device => assert_equals(device.name, '')),
|
||||
bluetooth_test(
|
||||
() =>
|
||||
setUpPreconnectedDevice({name: ''})
|
||||
.then(() => requestDeviceWithTrustedClick({filters: [{name: ''}]}))
|
||||
.then(device => assert_equals(device.name, '')),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -11,9 +11,11 @@ const expected = new DOMException(
|
|||
'Must be handling a user gesture to show a permission request.',
|
||||
'SecurityError');
|
||||
|
||||
bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices()
|
||||
.then(() => assert_promise_rejects_with_message(
|
||||
navigator.bluetooth.requestDevice({filters:[{services:['heart_rate']}]}),
|
||||
expected, 'User gesture is required')),
|
||||
bluetooth_test(
|
||||
() => setUpHealthThermometerAndHeartRateDevices().then(
|
||||
() => assert_promise_rejects_with_message(
|
||||
navigator.bluetooth.requestDevice(
|
||||
{filters: [{services: ['heart_rate']}]}),
|
||||
expected, 'User gesture is required')),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -7,14 +7,15 @@
|
|||
<script>
|
||||
'use strict';
|
||||
const test_desc = 'Reject with NotFoundError if there is no BT radio present.';
|
||||
const expected = new DOMException('Bluetooth adapter not available.',
|
||||
'NotFoundError');
|
||||
const expected =
|
||||
new DOMException('Bluetooth adapter not available.', 'NotFoundError');
|
||||
|
||||
bluetooth_test(() => navigator.bluetooth.test.simulateCentral({state: 'absent'})
|
||||
.then(() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick({
|
||||
filters: [{services: ['generic_access']}]
|
||||
}),
|
||||
expected, 'Bluetooth adapter is not present.')),
|
||||
bluetooth_test(
|
||||
() => navigator.bluetooth.test.simulateCentral({state: 'absent'})
|
||||
.then(
|
||||
() => assert_promise_rejects_with_message(
|
||||
requestDeviceWithTrustedClick(
|
||||
{filters: [{services: ['generic_access']}]}),
|
||||
expected, 'Bluetooth adapter is not present.')),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -12,32 +12,36 @@ for (let i = 0; i < 5; i++) {
|
|||
iframes.push(document.createElement('iframe'));
|
||||
}
|
||||
|
||||
bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices()
|
||||
// 1. Load the iframes.
|
||||
.then(() => {
|
||||
let promises = [];
|
||||
for (let iframe of iframes) {
|
||||
iframe.src = '/bluetooth/resources/health-thermometer-iframe.html';
|
||||
document.body.appendChild(iframe);
|
||||
promises.push(new Promise(resolve =>
|
||||
iframe.addEventListener('load', resolve)));
|
||||
}
|
||||
return Promise.all(promises);
|
||||
})
|
||||
// 2. Request the device from the iframes.
|
||||
.then(() => new Promise(async (resolve) => {
|
||||
let numMessages = 0;
|
||||
window.onmessage = messageEvent => {
|
||||
assert_equals(messageEvent.data, 'Success');
|
||||
if (++numMessages === iframes.length) {
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
bluetooth_test(
|
||||
() => setUpHealthThermometerAndHeartRateDevices()
|
||||
// 1. Load the iframes.
|
||||
.then(() => {
|
||||
let promises = [];
|
||||
for (let iframe of iframes) {
|
||||
iframe.src =
|
||||
'/bluetooth/resources/health-thermometer-iframe.html';
|
||||
document.body.appendChild(iframe);
|
||||
promises.push(new Promise(
|
||||
resolve => iframe.addEventListener('load', resolve)));
|
||||
}
|
||||
return Promise.all(promises);
|
||||
})
|
||||
// 2. Request the device from the iframes.
|
||||
.then(() => new Promise(async (resolve) => {
|
||||
let numMessages = 0;
|
||||
window.onmessage =
|
||||
messageEvent => {
|
||||
assert_equals(messageEvent.data, 'Success');
|
||||
if (++numMessages === iframes.length) {
|
||||
resolve();
|
||||
}
|
||||
}
|
||||
|
||||
for (let iframe of iframes) {
|
||||
await callWithTrustedClick(() => iframe.contentWindow.postMessage({
|
||||
type: 'RequestDevice'
|
||||
}, '*'));
|
||||
}
|
||||
})), test_desc);
|
||||
for (let iframe of iframes) {
|
||||
await callWithTrustedClick(
|
||||
() => iframe.contentWindow.postMessage(
|
||||
{type: 'RequestDevice'}, '*'));
|
||||
}
|
||||
})),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -14,26 +14,28 @@ const expected = 'SecurityError: requestDevice() called from cross-origin ' +
|
|||
|
||||
let iframe = document.createElement('iframe');
|
||||
|
||||
bluetooth_test(() => getConnectedHealthThermometerDevice()
|
||||
// 1. Load the iframe.
|
||||
.then(() => new Promise(resolve => {
|
||||
iframe.sandbox.add('allow-scripts');
|
||||
iframe.src = '/bluetooth/resources/health-thermometer-iframe.html';
|
||||
document.body.appendChild(iframe);
|
||||
iframe.addEventListener('load', resolve);
|
||||
}))
|
||||
// 2. Request the device from the iframe.
|
||||
.then(() => new Promise(resolve => {
|
||||
callWithTrustedClick(() => {
|
||||
iframe.contentWindow.postMessage({
|
||||
type: 'RequestDevice'
|
||||
}, '*');
|
||||
});
|
||||
bluetooth_test(
|
||||
() => getConnectedHealthThermometerDevice()
|
||||
// 1. Load the iframe.
|
||||
.then(() => new Promise(resolve => {
|
||||
iframe.sandbox.add('allow-scripts');
|
||||
iframe.src =
|
||||
'/bluetooth/resources/health-thermometer-iframe.html';
|
||||
document.body.appendChild(iframe);
|
||||
iframe.addEventListener('load', resolve);
|
||||
}))
|
||||
// 2. Request the device from the iframe.
|
||||
.then(() => new Promise(resolve => {
|
||||
callWithTrustedClick(() => {
|
||||
iframe.contentWindow.postMessage(
|
||||
{type: 'RequestDevice'}, '*');
|
||||
});
|
||||
|
||||
window.onmessage = messageEvent => {
|
||||
assert_equals(messageEvent.data, expected);
|
||||
resolve();
|
||||
}
|
||||
})), test_desc);
|
||||
window.onmessage = messageEvent => {
|
||||
assert_equals(messageEvent.data, expected);
|
||||
resolve();
|
||||
}
|
||||
})),
|
||||
test_desc);
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -10,21 +10,23 @@ const test_desc = 'Returned device should always be the same.';
|
|||
let devices = [];
|
||||
let push = device => devices.push(device);
|
||||
|
||||
bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices()
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{services: [heart_rate.alias]}]
|
||||
}))
|
||||
.then(push)
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{services: [heart_rate.name]}]
|
||||
}))
|
||||
.then(push)
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{services: [heart_rate.uuid]}]
|
||||
}))
|
||||
.then(push)
|
||||
.then(() => {
|
||||
assert_equals(devices[0], devices[1]);
|
||||
assert_equals(devices[1], devices[2]);
|
||||
}), test_desc);
|
||||
bluetooth_test(
|
||||
() => setUpHealthThermometerAndHeartRateDevices()
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{services: [heart_rate.alias]}]}))
|
||||
.then(push)
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{services: [heart_rate.name]}]}))
|
||||
.then(push)
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{services: [heart_rate.uuid]}]}))
|
||||
.then(push)
|
||||
.then(() => {
|
||||
assert_equals(devices[0], devices[1]);
|
||||
assert_equals(devices[1], devices[2]);
|
||||
}),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
|
@ -8,10 +8,11 @@
|
|||
'use strict';
|
||||
const test_desc = 'Simple filter selects matching device.';
|
||||
|
||||
bluetooth_test(() => setUpHealthThermometerAndHeartRateDevices()
|
||||
.then(() => requestDeviceWithTrustedClick({
|
||||
filters: [{services: ['health_thermometer']}]
|
||||
}))
|
||||
.then(device => assert_equals(device.name, 'Health Thermometer')),
|
||||
bluetooth_test(
|
||||
() => setUpHealthThermometerAndHeartRateDevices()
|
||||
.then(
|
||||
() => requestDeviceWithTrustedClick(
|
||||
{filters: [{services: ['health_thermometer']}]}))
|
||||
.then(device => assert_equals(device.name, 'Health Thermometer')),
|
||||
test_desc);
|
||||
</script>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue