aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bluetoothuuid.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-12-06 17:30:40 -0800
committerGitHub <noreply@github.com>2016-12-06 17:30:40 -0800
commitb54cfc9f259e72ea26e68ec8a7b1d617cf0812d3 (patch)
tree8cbb69aaa762b597146109183747afe31f08d913 /components/script/dom/bluetoothuuid.rs
parente2d956eb62f35e6646501b058296da33ca96fe00 (diff)
parent1cb694b947d07505f8abf5dd54c5e69f72c2a7a0 (diff)
downloadservo-b54cfc9f259e72ea26e68ec8a7b1d617cf0812d3.tar.gz
servo-b54cfc9f259e72ea26e68ec8a7b1d617cf0812d3.zip
Auto merge of #14429 - szeged:syntax-to-type-error, r=jdm
Replace Syntax with TypeError in bluetoothuuid.rs <!-- Please describe your changes on the following line: --> 1. Replacing `SyntaxError` with `TypeError` in `bluetoothuuid.rs` due to the specification change. This indicates changes in the existing tests. The error strings are from the chromium implementation. 2. We missed out a `$` character from the end of the `VALID_UUID_REGEX` global variable. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors <!-- Either: --> - [x] There are tests for these changes OR <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14429) <!-- Reviewable:end -->
Diffstat (limited to 'components/script/dom/bluetoothuuid.rs')
-rw-r--r--components/script/dom/bluetoothuuid.rs37
1 files changed, 31 insertions, 6 deletions
diff --git a/components/script/dom/bluetoothuuid.rs b/components/script/dom/bluetoothuuid.rs
index bf8774650ba..e16d8141e50 100644
--- a/components/script/dom/bluetoothuuid.rs
+++ b/components/script/dom/bluetoothuuid.rs
@@ -3,7 +3,7 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
use dom::bindings::codegen::UnionTypes::StringOrUnsignedLong;
-use dom::bindings::error::Error::Syntax;
+use dom::bindings::error::Error::Type;
use dom::bindings::error::Fallible;
use dom::bindings::reflector::Reflector;
use dom::bindings::str::DOMString;
@@ -267,7 +267,19 @@ const BASE_UUID: &'static str = "-0000-1000-8000-00805f9b34fb";
const SERVICE_PREFIX: &'static str = "org.bluetooth.service";
const CHARACTERISTIC_PREFIX: &'static str = "org.bluetooth.characteristic";
const DESCRIPTOR_PREFIX: &'static str = "org.bluetooth.descriptor";
-const VALID_UUID_REGEX: &'static str = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
+const VALID_UUID_REGEX: &'static str = "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$";
+// https://cs.chromium.org/chromium/src/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.cpp?l=314
+const UUID_ERROR_MESSAGE: &'static str = "It must be a valid UUID alias (e.g. 0x1234), \
+ UUID (lowercase hex characters e.g. '00001234-0000-1000-8000-00805f9b34fb'),\nor recognized standard name from";
+// https://cs.chromium.org/chromium/src/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.cpp?l=321
+const SERVICES_ERROR_MESSAGE: &'static str = "https://developer.bluetooth.org/gatt/services/Pages/ServicesHome.aspx\
+ \ne.g. 'alert_notification'.";
+// https://cs.chromium.org/chromium/src/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.cpp?l=327
+const CHARACTERISTIC_ERROR_MESSAGE: &'static str = "https://developer.bluetooth.org/gatt/characteristics/Pages/\
+ CharacteristicsHome.aspx\ne.g. 'aerobic_heart_rate_lower_limit'.";
+// https://cs.chromium.org/chromium/src/third_party/WebKit/Source/modules/bluetooth/BluetoothUUID.cpp?l=333
+const DESCRIPTOR_ERROR_MESSAGE: &'static str = "https://developer.bluetooth.org/gatt/descriptors/Pages/\
+ DescriptorsHomePage.aspx\ne.g. 'gatt.characteristic_presentation_format'.";
impl BluetoothUUID {
// https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothuuid-canonicaluuid
@@ -325,22 +337,35 @@ fn resolve_uuid_name(
prefix: &str)
-> Fallible<DOMString> {
match name {
- // Step 1
+ // Step 1.
StringOrUnsignedLong::UnsignedLong(unsigned32) => {
Ok(canonical_uuid(unsigned32))
},
StringOrUnsignedLong::String(dstring) => {
- // Step 2
+ // Step 2.
let regex = Regex::new(VALID_UUID_REGEX).unwrap();
if regex.is_match(&*dstring) {
Ok(dstring)
} else {
- // Step 3
+ // Step 3.
let concatenated = format!("{}.{}", prefix, dstring);
let is_in_table = assigned_numbers_table.iter().find(|p| p.0 == concatenated);
match is_in_table {
Some(&(_, alias)) => Ok(canonical_uuid(alias)),
- None => Err(Syntax),
+ None => {
+ let (attribute_type, error_url_message) = match prefix {
+ SERVICE_PREFIX => ("Service", SERVICES_ERROR_MESSAGE),
+ CHARACTERISTIC_PREFIX => ("Characteristic", CHARACTERISTIC_ERROR_MESSAGE),
+ DESCRIPTOR_PREFIX => ("Descriptor", DESCRIPTOR_ERROR_MESSAGE),
+ _ => unreachable!(),
+ };
+ // Step 4.
+ return Err(Type(format!("Invalid {} name : '{}'.\n{} {}",
+ attribute_type,
+ dstring,
+ UUID_ERROR_MESSAGE,
+ error_url_message)));
+ },
}
}
},