aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/bluetooth.rs73
-rw-r--r--components/script/dom/bluetoothremotegattcharacteristic.rs102
-rw-r--r--components/script/dom/bluetoothremotegattdescriptor.rs43
-rw-r--r--components/script/dom/bluetoothremotegattserver.rs83
-rw-r--r--components/script/dom/bluetoothremotegattservice.rs121
5 files changed, 138 insertions, 284 deletions
diff --git a/components/script/dom/bluetooth.rs b/components/script/dom/bluetooth.rs
index 46602b4bbf3..1e1ae3b147d 100644
--- a/components/script/dom/bluetooth.rs
+++ b/components/script/dom/bluetooth.rs
@@ -18,7 +18,7 @@ use dom::bluetoothuuid::BluetoothUUID;
use ipc_channel::ipc::{self, IpcSender};
use net_traits::bluetooth_scanfilter::{BluetoothScanfilter, BluetoothScanfilterSequence};
use net_traits::bluetooth_scanfilter::{RequestDeviceoptions, ServiceUUIDSequence};
-use net_traits::bluetooth_thread::{BluetoothMethodMsg, BluetoothObjectMsg};
+use net_traits::bluetooth_thread::BluetoothMethodMsg;
use util::str::DOMString;
const FILTER_EMPTY_ERROR: &'static str = "'filters' member must be non - empty to find any devices.";
@@ -133,51 +133,32 @@ impl BluetoothMethods for Bluetooth {
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetooth-requestdevice
fn RequestDevice(&self, option: &RequestDeviceOptions) -> Fallible<Root<BluetoothDevice>> {
let (sender, receiver) = ipc::channel().unwrap();
- match try!(convert_request_device_options(option, self.global().r())) {
- option => {
- self.get_bluetooth_thread().send(
- BluetoothMethodMsg::RequestDevice(option, sender)).unwrap();
- let device = receiver.recv().unwrap();
- match device {
- BluetoothObjectMsg::BluetoothDevice {
- id,
- name,
- device_class,
- vendor_id_source,
- vendor_id,
- product_id,
- product_version,
- appearance,
- tx_power,
- rssi,
- } => {
- let ad_data = &BluetoothAdvertisingData::new(self.global().r(),
- appearance,
- tx_power,
- rssi);
- let vendor_id_source = vendor_id_source.map(|vid| match vid.as_str() {
- "bluetooth" => VendorIDSource::Bluetooth,
- "usb" => VendorIDSource::Usb,
- _ => VendorIDSource::Unknown,
- });
- let name = name.map(DOMString::from);
- Ok(BluetoothDevice::new(self.global().r(),
- DOMString::from(id),
- name,
- ad_data,
- device_class,
- vendor_id_source,
- vendor_id,
- product_id,
- product_version))
- },
- BluetoothObjectMsg::Error {
- error
- } => {
- Err(Type(error))
- },
- _ => unreachable!()
- }
+ let option = try!(convert_request_device_options(option, self.global().r()));
+ self.get_bluetooth_thread().send(BluetoothMethodMsg::RequestDevice(option, sender)).unwrap();
+ let device = receiver.recv().unwrap();
+ match device {
+ Ok(device) => {
+ let ad_data = BluetoothAdvertisingData::new(self.global().r(),
+ device.appearance,
+ device.tx_power,
+ device.rssi);
+ let vendor_id_source = device.vendor_id_source.map(|vid| match vid.as_str() {
+ "bluetooth" => VendorIDSource::Bluetooth,
+ "usb" => VendorIDSource::Usb,
+ _ => VendorIDSource::Unknown,
+ });
+ Ok(BluetoothDevice::new(self.global().r(),
+ DOMString::from(device.id),
+ device.name.map(DOMString::from),
+ &ad_data,
+ device.device_class,
+ vendor_id_source,
+ device.vendor_id,
+ device.product_id,
+ device.product_version))
+ },
+ Err(error) => {
+ Err(Type(error))
},
}
}
diff --git a/components/script/dom/bluetoothremotegattcharacteristic.rs b/components/script/dom/bluetoothremotegattcharacteristic.rs
index 1a0e9c02010..9ae6c6596ba 100644
--- a/components/script/dom/bluetoothremotegattcharacteristic.rs
+++ b/components/script/dom/bluetoothremotegattcharacteristic.rs
@@ -20,7 +20,7 @@ use dom::bluetoothremotegattdescriptor::BluetoothRemoteGATTDescriptor;
use dom::bluetoothremotegattservice::BluetoothRemoteGATTService;
use dom::bluetoothuuid::{BluetoothDescriptorUUID, BluetoothUUID};
use ipc_channel::ipc::{self, IpcSender};
-use net_traits::bluetooth_thread::{BluetoothMethodMsg, BluetoothObjectMsg};
+use net_traits::bluetooth_thread::BluetoothMethodMsg;
use util::str::DOMString;
// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattcharacteristic
@@ -94,30 +94,21 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-getdescriptor
fn GetDescriptor(&self, descriptor: BluetoothDescriptorUUID) -> Fallible<Root<BluetoothRemoteGATTDescriptor>> {
- let uuid: String = match BluetoothUUID::GetDescriptor(self.global().r(), descriptor.clone()) {
- Ok(domstring) => domstring.to_string(),
- Err(error) => return Err(error),
- };
+ let uuid = try!(BluetoothUUID::GetDescriptor(self.global().r(), descriptor)).to_string();
let (sender, receiver) = ipc::channel().unwrap();
self.get_bluetooth_thread().send(
BluetoothMethodMsg::GetDescriptor(self.get_instance_id(), uuid, sender)).unwrap();
let descriptor = receiver.recv().unwrap();
match descriptor {
- BluetoothObjectMsg::BluetoothDescriptor {
- uuid,
- instance_id
- } => {
+ Ok(descriptor) => {
Ok(BluetoothRemoteGATTDescriptor::new(self.global().r(),
- &self,
- DOMString::from(uuid),
- instance_id))
+ self,
+ DOMString::from(descriptor.uuid),
+ descriptor.instance_id))
},
- BluetoothObjectMsg::Error {
- error
- } => {
+ Err(error) => {
Err(Type(error))
},
- _ => unreachable!()
}
}
@@ -126,43 +117,25 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
descriptor: Option<BluetoothDescriptorUUID>)
-> Fallible<Vec<Root<BluetoothRemoteGATTDescriptor>>> {
let mut uuid: Option<String> = None;
- if let Some(d)= descriptor {
- match BluetoothUUID::GetCharacteristic(self.global().r(), d.clone()) {
- Ok(domstring) => uuid = Some(domstring.to_string()),
- Err(error) => return Err(error),
- }
+ if let Some(d) = descriptor {
+ uuid = Some(try!(BluetoothUUID::GetDescriptor(self.global().r(), d)).to_string())
};
let (sender, receiver) = ipc::channel().unwrap();
- let mut descriptors: Vec<Root<BluetoothRemoteGATTDescriptor>> = vec!();
self.get_bluetooth_thread().send(
BluetoothMethodMsg::GetDescriptors(self.get_instance_id(), uuid, sender)).unwrap();
let descriptors_vec = receiver.recv().unwrap();
match descriptors_vec {
- BluetoothObjectMsg::BluetoothDescriptors {
- descriptors_vec
- } => {
- for d in descriptors_vec {
- match d {
- BluetoothObjectMsg::BluetoothDescriptor {
- uuid,
- instance_id,
- } => {
- descriptors.push(BluetoothRemoteGATTDescriptor::new(self.global().r(),
- &self,
- DOMString::from(uuid),
- instance_id));
- },
- _ => unreachable!(),
- }
- }
- Ok(descriptors)
+ Ok(descriptor_vec) => {
+ Ok(descriptor_vec.into_iter()
+ .map(|desc| BluetoothRemoteGATTDescriptor::new(self.global().r(),
+ self,
+ DOMString::from(desc.uuid),
+ desc.instance_id))
+ .collect())
},
- BluetoothObjectMsg::Error {
- error
- } => {
+ Err(error) => {
Err(Type(error))
},
- _ => unreachable!(),
}
}
@@ -175,27 +148,21 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
fn ReadValue(&self) -> Fallible<ByteString> {
let (sender, receiver) = ipc::channel().unwrap();
if !self.Service().Device().Gatt().Connected() {
- Err(Network)
- } else {
- self.get_bluetooth_thread().send(
- BluetoothMethodMsg::ReadValue(self.get_instance_id(), sender)).unwrap();
- let result = receiver.recv().unwrap();
- let value = match result {
- BluetoothObjectMsg::BluetoothReadValue {
- value
- } => {
- Some(ByteString::new(value))
- },
- BluetoothObjectMsg::Error {
- error
- } => {
- return Err(Type(error))
- },
- _ => unreachable!()
- };
- *self.value.borrow_mut() = value;
- Ok(self.GetValue().unwrap())
+ return Err(Network)
}
+ self.get_bluetooth_thread().send(
+ BluetoothMethodMsg::ReadValue(self.get_instance_id(), sender)).unwrap();
+ let result = receiver.recv().unwrap();
+ let value = match result {
+ Ok(val) => {
+ ByteString::new(val)
+ },
+ Err(error) => {
+ return Err(Type(error))
+ },
+ };
+ *self.value.borrow_mut() = Some(value.clone());
+ Ok(value)
}
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattcharacteristic-writevalue
@@ -205,13 +172,10 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris
BluetoothMethodMsg::WriteValue(self.get_instance_id(), value, sender)).unwrap();
let result = receiver.recv().unwrap();
match result {
- BluetoothObjectMsg::BluetoothWriteValue => Ok(()),
- BluetoothObjectMsg::Error {
- error
- } => {
+ Ok(_) => Ok(()),
+ Err(error) => {
Err(Type(error))
},
- _ => unreachable!()
}
}
}
diff --git a/components/script/dom/bluetoothremotegattdescriptor.rs b/components/script/dom/bluetoothremotegattdescriptor.rs
index edbc61f9e3a..8e5a106cd05 100644
--- a/components/script/dom/bluetoothremotegattdescriptor.rs
+++ b/components/script/dom/bluetoothremotegattdescriptor.rs
@@ -18,7 +18,7 @@ use dom::bindings::reflector::{Reflectable, Reflector, reflect_dom_object};
use dom::bindings::str::ByteString;
use dom::bluetoothremotegattcharacteristic::BluetoothRemoteGATTCharacteristic;
use ipc_channel::ipc::{self, IpcSender};
-use net_traits::bluetooth_thread::{BluetoothMethodMsg, BluetoothObjectMsg};
+use net_traits::bluetooth_thread::BluetoothMethodMsg;
use util::str::DOMString;
// http://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattdescriptor
@@ -89,27 +89,21 @@ impl BluetoothRemoteGATTDescriptorMethods for BluetoothRemoteGATTDescriptor {
fn ReadValue(&self) -> Fallible<ByteString> {
let (sender, receiver) = ipc::channel().unwrap();
if !self.Characteristic().Service().Device().Gatt().Connected() {
- Err(Network)
- } else {
- self.get_bluetooth_thread().send(
- BluetoothMethodMsg::ReadValue(self.get_instance_id(), sender)).unwrap();
- let result = receiver.recv().unwrap();
- let value = match result {
- BluetoothObjectMsg::BluetoothReadValue {
- value
- } => {
- Some(ByteString::new(value))
- },
- BluetoothObjectMsg::Error {
- error
- } => {
- return Err(Type(error))
- },
- _ => unreachable!()
- };
- *self.value.borrow_mut() = value;
- Ok(self.GetValue().unwrap())
+ return Err(Network)
}
+ self.get_bluetooth_thread().send(
+ BluetoothMethodMsg::ReadValue(self.get_instance_id(), sender)).unwrap();
+ let result = receiver.recv().unwrap();
+ let value = match result {
+ Ok(val) => {
+ ByteString::new(val)
+ },
+ Err(error) => {
+ return Err(Type(error))
+ },
+ };
+ *self.value.borrow_mut() = Some(value.clone());
+ Ok(value)
}
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattdescriptor-writevalue
@@ -119,13 +113,10 @@ impl BluetoothRemoteGATTDescriptorMethods for BluetoothRemoteGATTDescriptor {
BluetoothMethodMsg::WriteValue(self.get_instance_id(), value, sender)).unwrap();
let result = receiver.recv().unwrap();
match result {
- BluetoothObjectMsg::BluetoothWriteValue => Ok(()),
- BluetoothObjectMsg::Error {
- error
- } => {
+ Ok(_) => Ok(()),
+ Err(error) => {
Err(Type(error))
},
- _ => unreachable!()
}
}
}
diff --git a/components/script/dom/bluetoothremotegattserver.rs b/components/script/dom/bluetoothremotegattserver.rs
index f34261eb54b..e4f4b20a9dc 100644
--- a/components/script/dom/bluetoothremotegattserver.rs
+++ b/components/script/dom/bluetoothremotegattserver.rs
@@ -14,7 +14,7 @@ use dom::bluetoothdevice::BluetoothDevice;
use dom::bluetoothremotegattservice::BluetoothRemoteGATTService;
use dom::bluetoothuuid::{BluetoothServiceUUID, BluetoothUUID};
use ipc_channel::ipc::{self, IpcSender};
-use net_traits::bluetooth_thread::{BluetoothMethodMsg, BluetoothObjectMsg};
+use net_traits::bluetooth_thread::BluetoothMethodMsg;
use std::cell::Cell;
use util::str::DOMString;
@@ -67,18 +67,13 @@ impl BluetoothRemoteGATTServerMethods for BluetoothRemoteGATTServer {
BluetoothMethodMsg::GATTServerConnect(String::from(self.Device().Id()), sender)).unwrap();
let server = receiver.recv().unwrap();
match server {
- BluetoothObjectMsg::BluetoothServer {
- connected
- } => {
+ Ok(connected) => {
self.connected.set(connected);
Ok(Root::from_ref(self))
},
- BluetoothObjectMsg::Error {
- error
- } => {
+ Err(error) => {
Err(Type(error))
},
- _ => unreachable!()
}
}
@@ -89,49 +84,34 @@ impl BluetoothRemoteGATTServerMethods for BluetoothRemoteGATTServer {
BluetoothMethodMsg::GATTServerDisconnect(String::from(self.Device().Id()), sender)).unwrap();
let server = receiver.recv().unwrap();
match server {
- BluetoothObjectMsg::BluetoothServer {
- connected
- } => {
+ Ok(connected) => {
self.connected.set(connected);
Ok(())
},
- BluetoothObjectMsg::Error {
- error
- } => {
+ Err(error) => {
Err(Type(error))
},
- _ => unreachable!()
}
}
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattserver-getprimaryservice
fn GetPrimaryService(&self, service: BluetoothServiceUUID) -> Fallible<Root<BluetoothRemoteGATTService>> {
- let uuid: String = match BluetoothUUID::GetService(self.global().r(), service.clone()) {
- Ok(domstring) => domstring.to_string(),
- Err(error) => return Err(error),
- };
+ let uuid = try!(BluetoothUUID::GetService(self.global().r(), service)).to_string();
let (sender, receiver) = ipc::channel().unwrap();
self.get_bluetooth_thread().send(
BluetoothMethodMsg::GetPrimaryService(String::from(self.Device().Id()), uuid, sender)).unwrap();
let service = receiver.recv().unwrap();
match service {
- BluetoothObjectMsg::BluetoothService {
- uuid,
- is_primary,
- instance_id,
- } => {
+ Ok(service) => {
Ok(BluetoothRemoteGATTService::new(self.global().r(),
&self.device.get(),
- DOMString::from(uuid),
- is_primary,
- instance_id))
+ DOMString::from(service.uuid),
+ service.is_primary,
+ service.instance_id))
},
- BluetoothObjectMsg::Error {
- error
- } => {
+ Err(error) => {
Err(Type(error))
},
- _ => unreachable!(),
}
}
@@ -140,45 +120,26 @@ impl BluetoothRemoteGATTServerMethods for BluetoothRemoteGATTServer {
service: Option<BluetoothServiceUUID>)
-> Fallible<Vec<Root<BluetoothRemoteGATTService>>> {
let mut uuid: Option<String> = None;
- if let Some(s)= service {
- match BluetoothUUID::GetService(self.global().r(), s.clone()) {
- Ok(domstring) => uuid = Some(domstring.to_string()),
- Err(error) => return Err(error),
- }
+ if let Some(s) = service {
+ uuid = Some(try!(BluetoothUUID::GetService(self.global().r(), s)).to_string())
};
- let mut services: Vec<Root<BluetoothRemoteGATTService>> = vec!();
let (sender, receiver) = ipc::channel().unwrap();
self.get_bluetooth_thread().send(
BluetoothMethodMsg::GetPrimaryServices(String::from(self.Device().Id()), uuid, sender)).unwrap();
let services_vec = receiver.recv().unwrap();
match services_vec {
- BluetoothObjectMsg::BluetoothServices {
- services_vec
- } => {
- for s in services_vec {
- match s {
- BluetoothObjectMsg::BluetoothService {
- uuid,
- is_primary,
- instance_id,
- } => {
- services.push(BluetoothRemoteGATTService::new(self.global().r(),
- &self.device.get(),
- DOMString::from(uuid),
- is_primary,
- instance_id));
- },
- _ => unreachable!(),
- }
- }
- Ok(services)
+ Ok(service_vec) => {
+ Ok(service_vec.into_iter()
+ .map(|service| BluetoothRemoteGATTService::new(self.global().r(),
+ &self.device.get(),
+ DOMString::from(service.uuid),
+ service.is_primary,
+ service.instance_id))
+ .collect())
},
- BluetoothObjectMsg::Error {
- error
- } => {
+ Err(error) => {
Err(Type(error))
},
- _ => unreachable!(),
}
}
}
diff --git a/components/script/dom/bluetoothremotegattservice.rs b/components/script/dom/bluetoothremotegattservice.rs
index c8d46c29904..92a5edc2f28 100644
--- a/components/script/dom/bluetoothremotegattservice.rs
+++ b/components/script/dom/bluetoothremotegattservice.rs
@@ -14,7 +14,7 @@ use dom::bluetoothdevice::BluetoothDevice;
use dom::bluetoothremotegattcharacteristic::BluetoothRemoteGATTCharacteristic;
use dom::bluetoothuuid::{BluetoothCharacteristicUUID, BluetoothUUID};
use ipc_channel::ipc::{self, IpcSender};
-use net_traits::bluetooth_thread::{BluetoothMethodMsg, BluetoothObjectMsg};
+use net_traits::bluetooth_thread::BluetoothMethodMsg;
use util::str::DOMString;
// https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattservice
@@ -87,50 +87,32 @@ impl BluetoothRemoteGATTServiceMethods for BluetoothRemoteGATTService {
fn GetCharacteristic(&self,
characteristic: BluetoothCharacteristicUUID)
-> Fallible<Root<BluetoothRemoteGATTCharacteristic>> {
- let uuid: String = match BluetoothUUID::GetCharacteristic(self.global().r(), characteristic.clone()) {
- Ok(domstring) => domstring.to_string(),
- Err(error) => return Err(error),
- };
+ let uuid = try!(BluetoothUUID::GetCharacteristic(self.global().r(), characteristic)).to_string();
let (sender, receiver) = ipc::channel().unwrap();
self.get_bluetooth_thread().send(
BluetoothMethodMsg::GetCharacteristic(self.get_instance_id(), uuid, sender)).unwrap();
let characteristic = receiver.recv().unwrap();
match characteristic {
- BluetoothObjectMsg::BluetoothCharacteristic {
- uuid,
- instance_id,
- broadcast,
- read,
- write_without_response,
- write,
- notify,
- indicate,
- authenticated_signed_writes,
- reliable_write,
- writable_auxiliaries,
- } => {
- let properties = &BluetoothCharacteristicProperties::new(self.global().r(),
- broadcast,
- read,
- write_without_response,
- write,
- notify,
- indicate,
- authenticated_signed_writes,
- reliable_write,
- writable_auxiliaries);
+ Ok(characteristic) => {
+ let properties = BluetoothCharacteristicProperties::new(self.global().r(),
+ characteristic.broadcast,
+ characteristic.read,
+ characteristic.write_without_response,
+ characteristic.write,
+ characteristic.notify,
+ characteristic.indicate,
+ characteristic.authenticated_signed_writes,
+ characteristic.reliable_write,
+ characteristic.writable_auxiliaries);
Ok(BluetoothRemoteGATTCharacteristic::new(self.global().r(),
- &self,
- DOMString::from(uuid),
- properties,
- instance_id))
+ self,
+ DOMString::from(characteristic.uuid),
+ &properties,
+ characteristic.instance_id))
},
- BluetoothObjectMsg::Error {
- error
- } => {
+ Err(error) => {
Err(Type(error))
},
- _ => unreachable!(),
}
}
@@ -139,63 +121,38 @@ impl BluetoothRemoteGATTServiceMethods for BluetoothRemoteGATTService {
characteristic: Option<BluetoothCharacteristicUUID>)
-> Fallible<Vec<Root<BluetoothRemoteGATTCharacteristic>>> {
let mut uuid: Option<String> = None;
- if let Some(c)= characteristic {
- match BluetoothUUID::GetCharacteristic(self.global().r(), c.clone()) {
- Ok(domstring) => uuid = Some(domstring.to_string()),
- Err(error) => return Err(error),
- }
+ if let Some(c) = characteristic {
+ uuid = Some(try!(BluetoothUUID::GetCharacteristic(self.global().r(), c)).to_string())
};
- let mut characteristics: Vec<Root<BluetoothRemoteGATTCharacteristic>> = vec!();
+ let mut characteristics = vec!();
let (sender, receiver) = ipc::channel().unwrap();
self.get_bluetooth_thread().send(
BluetoothMethodMsg::GetCharacteristics(self.get_instance_id(), uuid, sender)).unwrap();
let characteristics_vec = receiver.recv().unwrap();
match characteristics_vec {
- BluetoothObjectMsg::BluetoothCharacteristics {
- characteristics_vec
- } => {
- for characteristic in characteristics_vec {
- match characteristic {
- BluetoothObjectMsg::BluetoothCharacteristic {
- uuid,
- instance_id,
- broadcast,
- read,
- write_without_response,
- write,
- notify,
- indicate,
- authenticated_signed_writes,
- reliable_write,
- writable_auxiliaries,
- } => {
- let properties = &BluetoothCharacteristicProperties::new(self.global().r(),
- broadcast,
- read,
- write_without_response,
- write,
- notify,
- indicate,
- authenticated_signed_writes,
- reliable_write,
- writable_auxiliaries);
- characteristics.push(BluetoothRemoteGATTCharacteristic::new(self.global().r(),
- &self,
- DOMString::from(uuid),
- properties,
- instance_id));
- },
- _ => unreachable!(),
- }
+ Ok(characteristic_vec) => {
+ for characteristic in characteristic_vec {
+ let properties = BluetoothCharacteristicProperties::new(self.global().r(),
+ characteristic.broadcast,
+ characteristic.read,
+ characteristic.write_without_response,
+ characteristic.write,
+ characteristic.notify,
+ characteristic.indicate,
+ characteristic.authenticated_signed_writes,
+ characteristic.reliable_write,
+ characteristic.writable_auxiliaries);
+ characteristics.push(BluetoothRemoteGATTCharacteristic::new(self.global().r(),
+ self,
+ DOMString::from(characteristic.uuid),
+ &properties,
+ characteristic.instance_id));
}
Ok(characteristics)
},
- BluetoothObjectMsg::Error {
- error
- } => {
+ Err(error) => {
Err(Type(error))
},
- _ => unreachable!(),
}
}
}