Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Unified Diff: third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp

Issue 2680783002: bluetooth: show better error messages for services, characteristics and descriptors (Closed)
Patch Set: Added comment and changed to enum class. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
index c462463ac6a8bed03d4d50ec643c311a70d3615c..0088df16c6780168063af4f5f0230a209b6ed3f5 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTCharacteristic.cpp
@@ -6,6 +6,7 @@
#include "bindings/core/v8/ScriptPromise.h"
#include "bindings/core/v8/ScriptPromiseResolver.h"
+#include "core/dom/DOMException.h"
#include "core/events/Event.h"
#include "core/inspector/ConsoleMessage.h"
#include "modules/bluetooth/Bluetooth.h"
@@ -105,8 +106,8 @@ void BluetoothRemoteGATTCharacteristic::ReadValueCallback(
// If the device is disconnected, reject.
if (!getGatt()->RemoveFromActiveAlgorithms(resolver)) {
- resolver->reject(BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kGATTServerDisconnected));
+ resolver->reject(BluetoothError::createDOMException(
+ blink::mojom::WebBluetoothResult::GATT_SERVER_DISCONNECTED));
return;
}
@@ -117,7 +118,7 @@ void BluetoothRemoteGATTCharacteristic::ReadValueCallback(
setValue(domDataView);
resolver->resolve(domDataView);
} else {
- resolver->reject(BluetoothError::take(resolver, result));
+ resolver->reject(BluetoothError::createDOMException(result));
}
}
@@ -126,16 +127,14 @@ ScriptPromise BluetoothRemoteGATTCharacteristic::readValue(
if (!getGatt()->connected()) {
return ScriptPromise::rejectWithDOMException(
scriptState,
- BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kGATTServerNotConnected));
+ BluetoothError::createDOMException(
+ blink::mojom::WebBluetoothResult::GATT_SERVER_NOT_CONNECTED));
}
if (!getGatt()->device()->isValidCharacteristic(
m_characteristic->instance_id)) {
return ScriptPromise::rejectWithDOMException(
- scriptState,
- BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kInvalidCharacteristic));
+ scriptState, createInvalidCharacteristicError());
}
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
@@ -162,8 +161,8 @@ void BluetoothRemoteGATTCharacteristic::WriteValueCallback(
// If the device is disconnected, reject.
if (!getGatt()->RemoveFromActiveAlgorithms(resolver)) {
- resolver->reject(BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kGATTServerDisconnected));
+ resolver->reject(BluetoothError::createDOMException(
+ blink::mojom::WebBluetoothResult::GATT_SERVER_DISCONNECTED));
return;
}
@@ -171,7 +170,7 @@ void BluetoothRemoteGATTCharacteristic::WriteValueCallback(
setValue(BluetoothRemoteGATTUtils::ConvertWTFVectorToDataView(value));
resolver->resolve();
} else {
- resolver->reject(BluetoothError::take(resolver, result));
+ resolver->reject(BluetoothError::createDOMException(result));
}
}
@@ -181,16 +180,14 @@ ScriptPromise BluetoothRemoteGATTCharacteristic::writeValue(
if (!getGatt()->connected()) {
return ScriptPromise::rejectWithDOMException(
scriptState,
- BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kGATTServerNotConnected));
+ BluetoothError::createDOMException(
+ blink::mojom::WebBluetoothResult::GATT_SERVER_NOT_CONNECTED));
}
if (!getGatt()->device()->isValidCharacteristic(
m_characteristic->instance_id)) {
return ScriptPromise::rejectWithDOMException(
- scriptState,
- BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kInvalidCharacteristic));
+ scriptState, createInvalidCharacteristicError());
}
// Partial implementation of writeValue algorithm:
@@ -231,15 +228,15 @@ void BluetoothRemoteGATTCharacteristic::NotificationsCallback(
// If the device is disconnected, reject.
if (!getGatt()->RemoveFromActiveAlgorithms(resolver)) {
- resolver->reject(BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kGATTServerDisconnected));
+ resolver->reject(BluetoothError::createDOMException(
+ blink::mojom::WebBluetoothResult::GATT_SERVER_DISCONNECTED));
return;
}
if (result == mojom::blink::WebBluetoothResult::SUCCESS) {
resolver->resolve(this);
} else {
- resolver->reject(BluetoothError::take(resolver, result));
+ resolver->reject(BluetoothError::createDOMException(result));
}
}
@@ -248,16 +245,14 @@ ScriptPromise BluetoothRemoteGATTCharacteristic::startNotifications(
if (!getGatt()->connected()) {
return ScriptPromise::rejectWithDOMException(
scriptState,
- BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kGATTServerNotConnected));
+ BluetoothError::createDOMException(
+ blink::mojom::WebBluetoothResult::GATT_SERVER_NOT_CONNECTED));
}
if (!getGatt()->device()->isValidCharacteristic(
m_characteristic->instance_id)) {
return ScriptPromise::rejectWithDOMException(
- scriptState,
- BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kInvalidCharacteristic));
+ scriptState, createInvalidCharacteristicError());
}
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
@@ -279,16 +274,14 @@ ScriptPromise BluetoothRemoteGATTCharacteristic::stopNotifications(
if (!getGatt()->connected()) {
return ScriptPromise::rejectWithDOMException(
scriptState,
- BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kGATTServerNotConnected));
+ BluetoothError::createDOMException(
+ blink::mojom::WebBluetoothResult::GATT_SERVER_NOT_CONNECTED));
}
if (!getGatt()->device()->isValidCharacteristic(
m_characteristic->instance_id)) {
return ScriptPromise::rejectWithDOMException(
- scriptState,
- BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kInvalidCharacteristic));
+ scriptState, createInvalidCharacteristicError());
}
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
@@ -347,16 +340,14 @@ ScriptPromise BluetoothRemoteGATTCharacteristic::getDescriptorsImpl(
if (!getGatt()->connected()) {
return ScriptPromise::rejectWithDOMException(
scriptState,
- BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kGATTServerNotConnected));
+ BluetoothError::createDOMException(
+ blink::mojom::WebBluetoothResult::GATT_SERVER_NOT_CONNECTED));
}
if (!getGatt()->device()->isValidCharacteristic(
m_characteristic->instance_id)) {
return ScriptPromise::rejectWithDOMException(
- scriptState,
- BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kInvalidCharacteristic));
+ scriptState, createInvalidCharacteristicError());
}
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
@@ -366,10 +357,10 @@ ScriptPromise BluetoothRemoteGATTCharacteristic::getDescriptorsImpl(
mojom::blink::WebBluetoothService* service = m_device->bluetooth()->service();
service->RemoteCharacteristicGetDescriptors(
m_characteristic->instance_id, quantity, descriptorsUUID,
- convertToBaseCallback(
- WTF::bind(&BluetoothRemoteGATTCharacteristic::GetDescriptorsCallback,
- wrapPersistent(this), m_characteristic->instance_id,
- quantity, wrapPersistent(resolver))));
+ convertToBaseCallback(WTF::bind(
+ &BluetoothRemoteGATTCharacteristic::GetDescriptorsCallback,
+ wrapPersistent(this), descriptorsUUID, m_characteristic->instance_id,
+ quantity, wrapPersistent(resolver))));
return promise;
}
@@ -377,6 +368,7 @@ ScriptPromise BluetoothRemoteGATTCharacteristic::getDescriptorsImpl(
// Callback that allows us to resolve the promise with a single descriptor
// or with a vector owning the descriptors.
void BluetoothRemoteGATTCharacteristic::GetDescriptorsCallback(
+ const String& requestedDescriptorUUID,
const String& characteristicInstanceId,
mojom::blink::WebBluetoothGATTQueryQuantity quantity,
ScriptPromiseResolver* resolver,
@@ -389,8 +381,8 @@ void BluetoothRemoteGATTCharacteristic::GetDescriptorsCallback(
// If the device is disconnected, reject.
if (!service()->device()->gatt()->RemoveFromActiveAlgorithms(resolver)) {
- resolver->reject(BluetoothRemoteGATTUtils::CreateDOMException(
- BluetoothRemoteGATTUtils::ExceptionType::kGATTServerDisconnected));
+ resolver->reject(BluetoothError::createDOMException(
+ blink::mojom::WebBluetoothResult::GATT_SERVER_DISCONNECTED));
return;
}
@@ -414,10 +406,26 @@ void BluetoothRemoteGATTCharacteristic::GetDescriptorsCallback(
}
resolver->resolve(gattDescriptors);
} else {
- resolver->reject(BluetoothError::take(resolver, result));
+ if (result == mojom::blink::WebBluetoothResult::DESCRIPTOR_NOT_FOUND) {
+ resolver->reject(BluetoothError::createDOMException(
+ BluetoothErrorCode::DescriptorNotFound,
+ "No Descriptors matching UUID " + requestedDescriptorUUID +
+ " found in Characteristic with UUID " + uuid() + "."));
+ } else {
+ resolver->reject(BluetoothError::createDOMException(result));
+ }
}
}
+DOMException*
+BluetoothRemoteGATTCharacteristic::createInvalidCharacteristicError() {
+ return BluetoothError::createDOMException(
+ BluetoothErrorCode::InvalidCharacteristic,
+ "Characteristic with UUID " + uuid() +
+ " is no longer valid. Remember to retrieve the characteristic again "
+ "after reconnecting.");
+}
+
DEFINE_TRACE(BluetoothRemoteGATTCharacteristic) {
visitor->trace(m_service);
visitor->trace(m_properties);

Powered by Google App Engine
This is Rietveld 408576698