diff options
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/bluetooth.rs | 73 | ||||
-rw-r--r-- | components/script/dom/bluetoothremotegattcharacteristic.rs | 102 | ||||
-rw-r--r-- | components/script/dom/bluetoothremotegattdescriptor.rs | 43 | ||||
-rw-r--r-- | components/script/dom/bluetoothremotegattserver.rs | 83 | ||||
-rw-r--r-- | components/script/dom/bluetoothremotegattservice.rs | 121 |
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!(), } } } |