mirror of
https://github.com/servo/servo.git
synced 2025-08-07 06:25:32 +01:00
Auto merge of #15368 - szeged:get_availability, r=nox
Implement GetAvailability for Bluetooth <!-- Please describe your changes on the following line: --> This implements the [getAvailability](https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-getavailability) function from the spec. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [ ] These changes fix #__ (github issue number if applicable). <!-- Either: --> - [X] There are tests for these changes OR - [ ] These changes do not require tests because _____ <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15368) <!-- Reviewable:end -->
This commit is contained in:
commit
e394334739
9 changed files with 98 additions and 9 deletions
|
@ -246,13 +246,16 @@ impl BluetoothManager {
|
|||
},
|
||||
BluetoothRequest::Test(data_set_name, sender) => {
|
||||
let _ = sender.send(self.test(data_set_name));
|
||||
}
|
||||
},
|
||||
BluetoothRequest::SetRepresentedToNull(service_ids, characteristic_ids, descriptor_ids) => {
|
||||
self.remove_ids_from_caches(service_ids, characteristic_ids, descriptor_ids)
|
||||
}
|
||||
},
|
||||
BluetoothRequest::IsRepresentedDeviceNull(id, sender) => {
|
||||
let _ = sender.send(!self.device_is_cached(&id));
|
||||
}
|
||||
},
|
||||
BluetoothRequest::GetAvailability(sender) => {
|
||||
let _ = sender.send(self.get_availability());
|
||||
},
|
||||
BluetoothRequest::Exit => {
|
||||
break
|
||||
},
|
||||
|
@ -924,4 +927,9 @@ impl BluetoothManager {
|
|||
// TODO: Implement this when supported in lower level
|
||||
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>),
|
||||
SetRepresentedToNull(Vec<String>, Vec<String>, Vec<String>),
|
||||
IsRepresentedDeviceNull(String, IpcSender<bool>),
|
||||
GetAvailability(IpcSender<BluetoothResponseResult>),
|
||||
Test(String, IpcSender<BluetoothResult<()>>),
|
||||
Exit,
|
||||
}
|
||||
|
@ -107,4 +108,5 @@ pub enum BluetoothResponse {
|
|||
WriteValue(Vec<u8>),
|
||||
EnableNotification(()),
|
||||
WatchAdvertisements(()),
|
||||
GetAvailability(bool),
|
||||
}
|
||||
|
|
|
@ -443,6 +443,18 @@ impl BluetoothMethods for Bluetooth {
|
|||
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
|
||||
event_handler!(availabilitychanged, GetOnavailabilitychanged, SetOnavailabilitychanged);
|
||||
}
|
||||
|
@ -466,6 +478,11 @@ impl AsyncBluetoothListener for Bluetooth {
|
|||
// Step 5.
|
||||
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())),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,8 +29,8 @@ dictionary RequestDeviceOptions {
|
|||
|
||||
[Pref="dom.bluetooth.enabled"]
|
||||
interface Bluetooth : EventTarget {
|
||||
// [SecureContext]
|
||||
// Promise<boolean> getAvailability();
|
||||
[SecureContext]
|
||||
Promise<boolean> getAvailability();
|
||||
[SecureContext]
|
||||
attribute EventHandler onavailabilitychanged;
|
||||
// [SecureContext, SameObject]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue