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

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

Issue 1861013005: bluetooth: Move GetCharacteristic(s) over to Mojo (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth-separate-tests-read-value
Patch Set: Merge Created 4 years, 8 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/BluetoothRemoteGATTService.cpp
diff --git a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
index 721686281ebb400495580c620e3e57acee9f1781..b94c2bf45d5703e3ddff8f9fb249f598e98ebeb5 100644
--- a/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
+++ b/third_party/WebKit/Source/modules/bluetooth/BluetoothRemoteGATTService.cpp
@@ -30,25 +30,51 @@ BluetoothRemoteGATTService* BluetoothRemoteGATTService::take(ScriptPromiseResolv
return new BluetoothRemoteGATTService(webService);
}
-ScriptPromise BluetoothRemoteGATTService::getCharacteristic(ScriptState* scriptState,
- const StringOrUnsignedLong& characteristic, ExceptionState& exceptionState)
-{
- WebBluetooth* webbluetooth = BluetoothSupplement::fromScriptState(scriptState);
+// Class that allows us to resolve the promise with a single Characteristic or
+// with a vector owning the characteristics.
+class GetCharacteristicsCallback : public WebBluetoothGetCharacteristicsCallbacks {
Jeffrey Yasskin 2016/04/22 01:16:38 Are you sure the extra complexity in this class is
ortuno 2016/04/25 15:29:45 Thinking this through: Right now the reason we us
Jeffrey Yasskin 2016/04/25 17:26:10 Ok, sounds good to keep it. Thanks for explaining
+public:
+ GetCharacteristicsCallback(bool singleCharacteristic, ScriptPromiseResolver* resolver)
+ : m_resolver(resolver)
+ , m_singleCharacteristic(singleCharacteristic) {}
- String characteristicUUID = BluetoothUUID::getCharacteristic(characteristic, exceptionState);
- if (exceptionState.hadException())
- return exceptionState.reject(scriptState);
+ void onSuccess(const WebVector<WebBluetoothRemoteGATTCharacteristicInit*>& webCharacteristics) override
+ {
+ if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
+ return;
- ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
- ScriptPromise promise = resolver->promise();
- webbluetooth->getCharacteristic(m_webService->serviceInstanceID, characteristicUUID, new CallbackPromiseAdapter<BluetoothRemoteGATTCharacteristic, BluetoothError>(resolver));
+ if (m_singleCharacteristic) {
+ DCHECK_EQ(1u, webCharacteristics.size());
+ m_resolver->resolve(BluetoothRemoteGATTCharacteristic::take(m_resolver, adoptPtr(webCharacteristics[0])));
+ return;
+ }
- return promise;
-}
+ HeapVector<Member<BluetoothRemoteGATTCharacteristic>> characteristics;
+ characteristics.reserveInitialCapacity(webCharacteristics.size());
+ for (WebBluetoothRemoteGATTCharacteristicInit* webCharacteristic : webCharacteristics) {
+ characteristics.append(BluetoothRemoteGATTCharacteristic::take(m_resolver, adoptPtr(webCharacteristic)));
+ }
+ m_resolver->resolve(characteristics);
+ }
-ScriptPromise BluetoothRemoteGATTService::getCharacteristics(ScriptState* scriptState, ExceptionState&)
+ void onError(const WebBluetoothError& e) override
+ {
+ if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContext()->activeDOMObjectsAreStopped())
+ return;
+ m_resolver->reject(BluetoothError::take(m_resolver, e));
+ }
+private:
+ Persistent<ScriptPromiseResolver> m_resolver;
+ bool m_singleCharacteristic;
+};
+
+ScriptPromise BluetoothRemoteGATTService::getCharacteristic(ScriptState* scriptState, const StringOrUnsignedLong& characteristic, ExceptionState& exceptionState)
{
- return getCharacteristicsImpl(scriptState, String());
+ String characteristicUUID = BluetoothUUID::getCharacteristic(characteristic, exceptionState);
+ if (exceptionState.hadException())
+ return exceptionState.reject(scriptState);
+
+ return getCharacteristicsImpl(scriptState, true /* single_characteristic */, characteristicUUID);
}
ScriptPromise BluetoothRemoteGATTService::getCharacteristics(ScriptState* scriptState, const StringOrUnsignedLong& characteristic, ExceptionState& exceptionState)
@@ -57,33 +83,21 @@ ScriptPromise BluetoothRemoteGATTService::getCharacteristics(ScriptState* script
if (exceptionState.hadException())
return exceptionState.reject(scriptState);
- return getCharacteristicsImpl(scriptState, characteristicUUID);
+ return getCharacteristicsImpl(scriptState, false /* single_characteristic */, characteristicUUID);
}
-// Class that allows us to use CallbackPromiseAdapter to resolve a promise with a
-// vector owning BluetoothRemoteGATTCharacteristics.
-class RemoteCharacteristicArray {
- STATIC_ONLY(RemoteCharacteristicArray);
-public:
- using WebType = OwnPtr<WebVector<WebBluetoothRemoteGATTCharacteristicInit*>>;
- static HeapVector<Member<BluetoothRemoteGATTCharacteristic>> take(ScriptPromiseResolver* resolver, PassOwnPtr<WebVector<WebBluetoothRemoteGATTCharacteristicInit*>> webCharacteristics)
- {
- HeapVector<Member<BluetoothRemoteGATTCharacteristic>> characteristics;
- characteristics.reserveInitialCapacity(webCharacteristics->size());
- for (WebBluetoothRemoteGATTCharacteristicInit* webCharacteristic : *webCharacteristics) {
- characteristics.append(BluetoothRemoteGATTCharacteristic::take(resolver, adoptPtr(webCharacteristic)));
- }
- return characteristics;
- }
-};
+ScriptPromise BluetoothRemoteGATTService::getCharacteristics(ScriptState* scriptState, ExceptionState&)
+{
+ return getCharacteristicsImpl(scriptState, false /* single_characteristic */);
+}
-ScriptPromise BluetoothRemoteGATTService::getCharacteristicsImpl(ScriptState* scriptState, String characteristicsUUID)
+ScriptPromise BluetoothRemoteGATTService::getCharacteristicsImpl(ScriptState* scriptState, bool singleCharacteristic, String characteristicsUUID)
{
ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState);
ScriptPromise promise = resolver->promise();
WebBluetooth* webbluetooth = BluetoothSupplement::fromScriptState(scriptState);
- webbluetooth->getCharacteristics(m_webService->serviceInstanceID, characteristicsUUID, new CallbackPromiseAdapter<RemoteCharacteristicArray, BluetoothError>(resolver));
+ webbluetooth->getCharacteristics(m_webService->serviceInstanceID, singleCharacteristic, characteristicsUUID, new GetCharacteristicsCallback(singleCharacteristic, resolver));
return promise;
}

Powered by Google App Engine
This is Rietveld 408576698