aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bluetooth/testrunner.rs
diff options
context:
space:
mode:
authorJosh Matthews <josh@joshmatthews.net>2025-02-17 23:13:43 -0500
committerGitHub <noreply@github.com>2025-02-18 04:13:43 +0000
commit1d606bb85cd34c6d37ae8d022b7cb32adadb9b08 (patch)
tree3c1c70468394f3cd722117f22d84cbcb069cebec /components/script/dom/bluetooth/testrunner.rs
parent32f19c1eae3ead86987fa353f3f3e7e6fadb47eb (diff)
downloadservo-1d606bb85cd34c6d37ae8d022b7cb32adadb9b08.tar.gz
servo-1d606bb85cd34c6d37ae8d022b7cb32adadb9b08.zip
Make WebBluetooth an optional feature. (#35479)
Signed-off-by: Josh Matthews <josh@joshmatthews.net>
Diffstat (limited to 'components/script/dom/bluetooth/testrunner.rs')
-rw-r--r--components/script/dom/bluetooth/testrunner.rs54
1 files changed, 54 insertions, 0 deletions
diff --git a/components/script/dom/bluetooth/testrunner.rs b/components/script/dom/bluetooth/testrunner.rs
new file mode 100644
index 00000000000..d2d42131d08
--- /dev/null
+++ b/components/script/dom/bluetooth/testrunner.rs
@@ -0,0 +1,54 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use bluetooth_traits::BluetoothRequest;
+use dom_struct::dom_struct;
+use ipc_channel::ipc::IpcSender;
+use profile_traits::ipc;
+
+use crate::conversions::Convert;
+use crate::dom::bindings::codegen::Bindings::TestRunnerBinding::TestRunnerMethods;
+use crate::dom::bindings::error::ErrorResult;
+use crate::dom::bindings::reflector::{reflect_dom_object, DomGlobal, Reflector};
+use crate::dom::bindings::root::DomRoot;
+use crate::dom::bindings::str::DOMString;
+use crate::dom::globalscope::GlobalScope;
+use crate::script_runtime::CanGc;
+
+// https://webbluetoothcg.github.io/web-bluetooth/tests#test-runner
+#[dom_struct]
+pub(crate) struct TestRunner {
+ reflector_: Reflector,
+}
+
+impl TestRunner {
+ pub(crate) fn new_inherited() -> TestRunner {
+ TestRunner {
+ reflector_: Reflector::new(),
+ }
+ }
+
+ pub(crate) fn new(global: &GlobalScope) -> DomRoot<TestRunner> {
+ reflect_dom_object(Box::new(TestRunner::new_inherited()), global, CanGc::note())
+ }
+
+ fn get_bluetooth_thread(&self) -> IpcSender<BluetoothRequest> {
+ self.global().as_window().bluetooth_thread()
+ }
+}
+
+impl TestRunnerMethods<crate::DomTypeHolder> for TestRunner {
+ // https://webbluetoothcg.github.io/web-bluetooth/tests#setBluetoothMockDataSet
+ #[allow(non_snake_case)]
+ fn SetBluetoothMockDataSet(&self, dataSetName: DOMString) -> ErrorResult {
+ let (sender, receiver) = ipc::channel(self.global().time_profiler_chan().clone()).unwrap();
+ self.get_bluetooth_thread()
+ .send(BluetoothRequest::Test(String::from(dataSetName), sender))
+ .unwrap();
+ match receiver.recv().unwrap() {
+ Ok(()) => Ok(()),
+ Err(error) => Err(error.convert()),
+ }
+ }
+}