From 40235da2d3c6eb5b9e36f9b63b6f96698f2f64c3 Mon Sep 17 00:00:00 2001 From: Anthony Urena Date: Sat, 24 Mar 2018 10:53:48 -0400 Subject: [PATCH] Switches WriteValue to use BufferSource --- .../script/dom/bluetoothremotegattdescriptor.rs | 11 ++++++++--- .../dom/webidls/BluetoothRemoteGATTDescriptor.webidl | 5 ++--- .../writeValue/descriptor/write-updates-value.html | 4 ++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/components/script/dom/bluetoothremotegattdescriptor.rs b/components/script/dom/bluetoothremotegattdescriptor.rs index 94023d6ffa0..54a6b1142b3 100644 --- a/components/script/dom/bluetoothremotegattdescriptor.rs +++ b/components/script/dom/bluetoothremotegattdescriptor.rs @@ -11,6 +11,7 @@ use dom::bindings::codegen::Bindings::BluetoothRemoteGATTDescriptorBinding; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTDescriptorBinding::BluetoothRemoteGATTDescriptorMethods; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTServerBinding::BluetoothRemoteGATTServerMethods; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTServiceBinding::BluetoothRemoteGATTServiceMethods; +use dom::bindings::codegen::UnionTypes::ArrayBufferViewOrArrayBuffer; use dom::bindings::error::Error::{self, InvalidModification, Network, Security}; use dom::bindings::reflector::{DomObject, Reflector, reflect_dom_object}; use dom::bindings::root::{Dom, DomRoot}; @@ -114,7 +115,7 @@ impl BluetoothRemoteGATTDescriptorMethods for BluetoothRemoteGATTDescriptor { #[allow(unrooted_must_root)] // https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothremotegattdescriptor-writevalue - fn WriteValue(&self, value: Vec) -> Rc { + fn WriteValue(&self, value: ArrayBufferViewOrArrayBuffer) -> Rc { let p = Promise::new(&self.global()); // Step 1. @@ -124,7 +125,11 @@ impl BluetoothRemoteGATTDescriptorMethods for BluetoothRemoteGATTDescriptor { } // Step 2 - 3. - if value.len() > MAXIMUM_ATTRIBUTE_LENGTH { + let v = match value { + ArrayBufferViewOrArrayBuffer::ArrayBufferView(mut avb) => avb.to_vec(), + ArrayBufferViewOrArrayBuffer::ArrayBuffer(mut ab) => ab.to_vec(), + }; + if v.len() > MAXIMUM_ATTRIBUTE_LENGTH { p.reject_error(InvalidModification); return p; } @@ -140,7 +145,7 @@ impl BluetoothRemoteGATTDescriptorMethods for BluetoothRemoteGATTDescriptor { // in writeValue function and in handle_response function. let sender = response_async(&p, self); self.get_bluetooth_thread().send( - BluetoothRequest::WriteValue(self.get_instance_id(), value, sender)).unwrap(); + BluetoothRequest::WriteValue(self.get_instance_id(), v, sender)).unwrap(); return p; } } diff --git a/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl b/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl index a202975013c..82aa80cc580 100644 --- a/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl +++ b/components/script/dom/webidls/BluetoothRemoteGATTDescriptor.webidl @@ -11,7 +11,6 @@ interface BluetoothRemoteGATTDescriptor { readonly attribute DOMString uuid; readonly attribute ByteString? value; Promise readValue(); - //Promise readValue(); - Promise writeValue(sequence value); - //Promise writeValue(BufferSource value); + // Promise readValue(); + Promise writeValue(BufferSource value); }; diff --git a/tests/wpt/mozilla/tests/bluetooth/writeValue/descriptor/write-updates-value.html b/tests/wpt/mozilla/tests/bluetooth/writeValue/descriptor/write-updates-value.html index cfc2fde1c21..26ad0c4403d 100644 --- a/tests/wpt/mozilla/tests/bluetooth/writeValue/descriptor/write-updates-value.html +++ b/tests/wpt/mozilla/tests/bluetooth/writeValue/descriptor/write-updates-value.html @@ -16,8 +16,8 @@ promise_test(() => { .then(characteristic => characteristic.getDescriptor(number_of_digitals.name)) .then(descriptor => { assert_equals(descriptor.value, null); - return descriptor.writeValue(asciiToDecimal('foo')) - .then(() => assert_equals(descriptor.value, 'foo')); + return descriptor.writeValue(Uint8Array.of(1, 2)) + .then(() => assert_equals(descriptor.value, "\x01\x02")); }); }, 'A regular write request to a writable descriptor should update value.');