mirror of
https://github.com/servo/servo.git
synced 2025-07-23 07:13:52 +01:00
Implement GetAvailability for Bluetooth
This commit is contained in:
parent
8ca1383c41
commit
ca7aa6bff8
9 changed files with 98 additions and 9 deletions
|
@ -246,13 +246,16 @@ impl BluetoothManager {
|
||||||
},
|
},
|
||||||
BluetoothRequest::Test(data_set_name, sender) => {
|
BluetoothRequest::Test(data_set_name, sender) => {
|
||||||
let _ = sender.send(self.test(data_set_name));
|
let _ = sender.send(self.test(data_set_name));
|
||||||
}
|
},
|
||||||
BluetoothRequest::SetRepresentedToNull(service_ids, characteristic_ids, descriptor_ids) => {
|
BluetoothRequest::SetRepresentedToNull(service_ids, characteristic_ids, descriptor_ids) => {
|
||||||
self.remove_ids_from_caches(service_ids, characteristic_ids, descriptor_ids)
|
self.remove_ids_from_caches(service_ids, characteristic_ids, descriptor_ids)
|
||||||
}
|
},
|
||||||
BluetoothRequest::IsRepresentedDeviceNull(id, sender) => {
|
BluetoothRequest::IsRepresentedDeviceNull(id, sender) => {
|
||||||
let _ = sender.send(!self.device_is_cached(&id));
|
let _ = sender.send(!self.device_is_cached(&id));
|
||||||
}
|
},
|
||||||
|
BluetoothRequest::GetAvailability(sender) => {
|
||||||
|
let _ = sender.send(self.get_availability());
|
||||||
|
},
|
||||||
BluetoothRequest::Exit => {
|
BluetoothRequest::Exit => {
|
||||||
break
|
break
|
||||||
},
|
},
|
||||||
|
@ -924,4 +927,9 @@ impl BluetoothManager {
|
||||||
// TODO: Implement this when supported in lower level
|
// TODO: Implement this when supported in lower level
|
||||||
return Err(BluetoothError::NotSupported);
|
return Err(BluetoothError::NotSupported);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-getavailability
|
||||||
|
fn get_availability(&mut self) -> BluetoothResponseResult {
|
||||||
|
Ok(BluetoothResponse::GetAvailability(self.get_adapter().is_ok()))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -91,6 +91,7 @@ pub enum BluetoothRequest {
|
||||||
WatchAdvertisements(String, IpcSender<BluetoothResponseResult>),
|
WatchAdvertisements(String, IpcSender<BluetoothResponseResult>),
|
||||||
SetRepresentedToNull(Vec<String>, Vec<String>, Vec<String>),
|
SetRepresentedToNull(Vec<String>, Vec<String>, Vec<String>),
|
||||||
IsRepresentedDeviceNull(String, IpcSender<bool>),
|
IsRepresentedDeviceNull(String, IpcSender<bool>),
|
||||||
|
GetAvailability(IpcSender<BluetoothResponseResult>),
|
||||||
Test(String, IpcSender<BluetoothResult<()>>),
|
Test(String, IpcSender<BluetoothResult<()>>),
|
||||||
Exit,
|
Exit,
|
||||||
}
|
}
|
||||||
|
@ -107,4 +108,5 @@ pub enum BluetoothResponse {
|
||||||
WriteValue(Vec<u8>),
|
WriteValue(Vec<u8>),
|
||||||
EnableNotification(()),
|
EnableNotification(()),
|
||||||
WatchAdvertisements(()),
|
WatchAdvertisements(()),
|
||||||
|
GetAvailability(bool),
|
||||||
}
|
}
|
||||||
|
|
|
@ -443,6 +443,18 @@ impl BluetoothMethods for Bluetooth {
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[allow(unrooted_must_root)]
|
||||||
|
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-getavailability
|
||||||
|
fn GetAvailability(&self) -> Rc<Promise> {
|
||||||
|
let p = Promise::new(&self.global());
|
||||||
|
// Step 1. We did not override the method
|
||||||
|
// Step 2 - 3. in handle_response
|
||||||
|
let sender = response_async(&p, self);
|
||||||
|
self.get_bluetooth_thread().send(
|
||||||
|
BluetoothRequest::GetAvailability(sender)).unwrap();
|
||||||
|
p
|
||||||
|
}
|
||||||
|
|
||||||
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-onavailabilitychanged
|
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-onavailabilitychanged
|
||||||
event_handler!(availabilitychanged, GetOnavailabilitychanged, SetOnavailabilitychanged);
|
event_handler!(availabilitychanged, GetOnavailabilitychanged, SetOnavailabilitychanged);
|
||||||
}
|
}
|
||||||
|
@ -466,6 +478,11 @@ impl AsyncBluetoothListener for Bluetooth {
|
||||||
// Step 5.
|
// Step 5.
|
||||||
promise.resolve_native(promise_cx, &bt_device);
|
promise.resolve_native(promise_cx, &bt_device);
|
||||||
},
|
},
|
||||||
|
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-getavailability
|
||||||
|
// Step 2 - 3.
|
||||||
|
BluetoothResponse::GetAvailability(is_available) => {
|
||||||
|
promise.resolve_native(promise_cx, &is_available);
|
||||||
|
}
|
||||||
_ => promise.reject_error(promise_cx, Error::Type("Something went wrong...".to_owned())),
|
_ => promise.reject_error(promise_cx, Error::Type("Something went wrong...".to_owned())),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,8 @@ dictionary RequestDeviceOptions {
|
||||||
|
|
||||||
[Pref="dom.bluetooth.enabled"]
|
[Pref="dom.bluetooth.enabled"]
|
||||||
interface Bluetooth : EventTarget {
|
interface Bluetooth : EventTarget {
|
||||||
// [SecureContext]
|
[SecureContext]
|
||||||
// Promise<boolean> getAvailability();
|
Promise<boolean> getAvailability();
|
||||||
[SecureContext]
|
[SecureContext]
|
||||||
attribute EventHandler onavailabilitychanged;
|
attribute EventHandler onavailabilitychanged;
|
||||||
// [SecureContext, SameObject]
|
// [SecureContext, SameObject]
|
||||||
|
|
|
@ -11443,6 +11443,24 @@
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
"mozilla/bluetooth/getAvailability/adapter-not-present.html": [
|
||||||
|
[
|
||||||
|
"/_mozilla/mozilla/bluetooth/getAvailability/adapter-not-present.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"mozilla/bluetooth/getAvailability/adapter-off.html": [
|
||||||
|
[
|
||||||
|
"/_mozilla/mozilla/bluetooth/getAvailability/adapter-off.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
|
"mozilla/bluetooth/getAvailability/adapter-on.html": [
|
||||||
|
[
|
||||||
|
"/_mozilla/mozilla/bluetooth/getAvailability/adapter-on.html",
|
||||||
|
{}
|
||||||
|
]
|
||||||
|
],
|
||||||
"mozilla/bluetooth/getCharacteristic/blocklisted-characteristic.html": [
|
"mozilla/bluetooth/getCharacteristic/blocklisted-characteristic.html": [
|
||||||
[
|
[
|
||||||
"/_mozilla/mozilla/bluetooth/getCharacteristic/blocklisted-characteristic.html",
|
"/_mozilla/mozilla/bluetooth/getCharacteristic/blocklisted-characteristic.html",
|
||||||
|
@ -24372,6 +24390,18 @@
|
||||||
"6bba458074ce7d8067b6420d4326cbb133e35304",
|
"6bba458074ce7d8067b6420d4326cbb133e35304",
|
||||||
"testharness"
|
"testharness"
|
||||||
],
|
],
|
||||||
|
"mozilla/bluetooth/getAvailability/adapter-not-present.html": [
|
||||||
|
"e4d5e516bee397ecefee1ef679f48f11b5dabe78",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"mozilla/bluetooth/getAvailability/adapter-off.html": [
|
||||||
|
"0e3d7824d57ba676ae52c775fa21d8e6ec6d7073",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
|
"mozilla/bluetooth/getAvailability/adapter-on.html": [
|
||||||
|
"7e37c1b939712f5920b607e27a82f34573ca40fd",
|
||||||
|
"testharness"
|
||||||
|
],
|
||||||
"mozilla/bluetooth/getCharacteristic/blocklisted-characteristic.html": [
|
"mozilla/bluetooth/getCharacteristic/blocklisted-characteristic.html": [
|
||||||
"c75429728dedbc5059aa7c3cc72554bb6a9bbbcb",
|
"c75429728dedbc5059aa7c3cc72554bb6a9bbbcb",
|
||||||
"testharness"
|
"testharness"
|
||||||
|
|
|
@ -30,9 +30,6 @@
|
||||||
[Bluetooth interface: attribute onserviceremoved]
|
[Bluetooth interface: attribute onserviceremoved]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Bluetooth interface: window.navigator.bluetooth must inherit property "getAvailability" with the proper type (0)]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[Bluetooth interface: window.navigator.bluetooth must inherit property "referringDevice" with the proper type (2)]
|
[Bluetooth interface: window.navigator.bluetooth must inherit property "referringDevice" with the proper type (2)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -431,4 +428,3 @@
|
||||||
|
|
||||||
[BluetoothRemoteGATTDescriptor interface: calling writeValue(BufferSource) on bluetooth_descriptor with too few arguments must throw TypeError]
|
[BluetoothRemoteGATTDescriptor interface: calling writeValue(BufferSource) on bluetooth_descriptor with too few arguments must throw TypeError]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
<!doctype html>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/_mozilla/mozilla/bluetooth/bluetooth-helpers.js"></script>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
promise_test(() => {
|
||||||
|
window.testRunner.setBluetoothMockDataSet(adapter_type.not_present);
|
||||||
|
return window.navigator.bluetooth.getAvailability()
|
||||||
|
.then(isAvailable => assert_equals(isAvailable, false));
|
||||||
|
}, 'GetAvailability is false if the adapter is not present.');
|
||||||
|
</script>
|
|
@ -0,0 +1,12 @@
|
||||||
|
<!doctype html>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/_mozilla/mozilla/bluetooth/bluetooth-helpers.js"></script>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
promise_test(() => {
|
||||||
|
window.testRunner.setBluetoothMockDataSet(adapter_type.not_powered);
|
||||||
|
return window.navigator.bluetooth.getAvailability()
|
||||||
|
.then(isAvailable => assert_equals(isAvailable, false));
|
||||||
|
}, 'GetAvailability is false if the adapter is off.');
|
||||||
|
</script>
|
|
@ -0,0 +1,12 @@
|
||||||
|
<!doctype html>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/_mozilla/mozilla/bluetooth/bluetooth-helpers.js"></script>
|
||||||
|
<script>
|
||||||
|
'use strict';
|
||||||
|
promise_test(() => {
|
||||||
|
window.testRunner.setBluetoothMockDataSet(adapter_type.empty);
|
||||||
|
return window.navigator.bluetooth.getAvailability()
|
||||||
|
.then(isAvailable => assert_equals(isAvailable, true));
|
||||||
|
}, 'GetAvailability is true if the adapter is present.');
|
||||||
|
</script>
|
Loading…
Add table
Add a link
Reference in a new issue