aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAttila Dusnoki <dati91@gmail.com>2017-02-03 15:31:24 +0100
committerAttila Dusnoki <dati91@gmail.com>2017-02-08 15:53:53 +0100
commitca7aa6bff85aceb6d2df2edfabd95b6d2e080514 (patch)
treeb1bcacecf709c1d5fd20b2cd204605912e2e2843
parent8ca1383c419dec9f5bcd23bb0caf87cb4774a7e6 (diff)
downloadservo-ca7aa6bff85aceb6d2df2edfabd95b6d2e080514.tar.gz
servo-ca7aa6bff85aceb6d2df2edfabd95b6d2e080514.zip
Implement GetAvailability for Bluetooth
-rw-r--r--components/bluetooth/lib.rs14
-rw-r--r--components/bluetooth_traits/lib.rs2
-rw-r--r--components/script/dom/bluetooth.rs17
-rw-r--r--components/script/dom/webidls/Bluetooth.webidl4
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json30
-rw-r--r--tests/wpt/mozilla/meta/mozilla/bluetooth/interfaces.html.ini4
-rw-r--r--tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-not-present.html12
-rw-r--r--tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-off.html12
-rw-r--r--tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-on.html12
9 files changed, 98 insertions, 9 deletions
diff --git a/components/bluetooth/lib.rs b/components/bluetooth/lib.rs
index bcfa1b9c4dc..1f3fe20493b 100644
--- a/components/bluetooth/lib.rs
+++ b/components/bluetooth/lib.rs
@@ -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()))
+ }
}
diff --git a/components/bluetooth_traits/lib.rs b/components/bluetooth_traits/lib.rs
index af2314817ef..85421990f71 100644
--- a/components/bluetooth_traits/lib.rs
+++ b/components/bluetooth_traits/lib.rs
@@ -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),
}
diff --git a/components/script/dom/bluetooth.rs b/components/script/dom/bluetooth.rs
index 82d455e5f4f..82c39782133 100644
--- a/components/script/dom/bluetooth.rs
+++ b/components/script/dom/bluetooth.rs
@@ -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())),
}
}
diff --git a/components/script/dom/webidls/Bluetooth.webidl b/components/script/dom/webidls/Bluetooth.webidl
index fe87d10aa81..6299e661474 100644
--- a/components/script/dom/webidls/Bluetooth.webidl
+++ b/components/script/dom/webidls/Bluetooth.webidl
@@ -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]
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index aca38c42228..6a5ba1ed563 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -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/mozilla/bluetooth/getCharacteristic/blocklisted-characteristic.html",
@@ -24372,6 +24390,18 @@
"6bba458074ce7d8067b6420d4326cbb133e35304",
"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": [
"c75429728dedbc5059aa7c3cc72554bb6a9bbbcb",
"testharness"
diff --git a/tests/wpt/mozilla/meta/mozilla/bluetooth/interfaces.html.ini b/tests/wpt/mozilla/meta/mozilla/bluetooth/interfaces.html.ini
index ef3081a42b3..372cbf3def3 100644
--- a/tests/wpt/mozilla/meta/mozilla/bluetooth/interfaces.html.ini
+++ b/tests/wpt/mozilla/meta/mozilla/bluetooth/interfaces.html.ini
@@ -30,9 +30,6 @@
[Bluetooth interface: attribute onserviceremoved]
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)]
expected: FAIL
@@ -431,4 +428,3 @@
[BluetoothRemoteGATTDescriptor interface: calling writeValue(BufferSource) on bluetooth_descriptor with too few arguments must throw TypeError]
expected: FAIL
-
diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-not-present.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-not-present.html
new file mode 100644
index 00000000000..d3c868056ff
--- /dev/null
+++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-not-present.html
@@ -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>
diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-off.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-off.html
new file mode 100644
index 00000000000..916259203ad
--- /dev/null
+++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-off.html
@@ -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>
diff --git a/tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-on.html b/tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-on.html
new file mode 100644
index 00000000000..591b5acf9e1
--- /dev/null
+++ b/tests/wpt/mozilla/tests/mozilla/bluetooth/getAvailability/adapter-on.html
@@ -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>