| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "modules/bluetooth/BluetoothRemoteGATTServer.h" | 5 #include "modules/bluetooth/BluetoothRemoteGATTServer.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/CallbackPromiseAdapter.h" | 7 #include "bindings/core/v8/CallbackPromiseAdapter.h" |
| 8 #include "bindings/core/v8/ScriptPromise.h" | 8 #include "bindings/core/v8/ScriptPromise.h" |
| 9 #include "bindings/core/v8/ScriptPromiseResolver.h" | 9 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 10 #include "core/dom/DOMException.h" | 10 #include "core/dom/DOMException.h" |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 , m_resolver(resolver) {} | 41 , m_resolver(resolver) {} |
| 42 | 42 |
| 43 void onSuccess() override | 43 void onSuccess() override |
| 44 { | 44 { |
| 45 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) | 45 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 46 return; | 46 return; |
| 47 m_device->gatt()->setConnected(true); | 47 m_device->gatt()->setConnected(true); |
| 48 m_resolver->resolve(m_device->gatt()); | 48 m_resolver->resolve(m_device->gatt()); |
| 49 } | 49 } |
| 50 | 50 |
| 51 void onError(const WebBluetoothError& e) override | 51 void onError(int32_t error /* Corresponds to WebBluetoothError in web_blueto
oth.mojom */) override |
| 52 { | 52 { |
| 53 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) | 53 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 54 return; | 54 return; |
| 55 m_resolver->reject(BluetoothError::take(m_resolver, e)); | 55 m_resolver->reject(BluetoothError::take(m_resolver, error)); |
| 56 } | 56 } |
| 57 private: | 57 private: |
| 58 Persistent<BluetoothDevice> m_device; | 58 Persistent<BluetoothDevice> m_device; |
| 59 Persistent<ScriptPromiseResolver> m_resolver; | 59 Persistent<ScriptPromiseResolver> m_resolver; |
| 60 }; | 60 }; |
| 61 | 61 |
| 62 ScriptPromise BluetoothRemoteGATTServer::connect(ScriptState* scriptState) | 62 ScriptPromise BluetoothRemoteGATTServer::connect(ScriptState* scriptState) |
| 63 { | 63 { |
| 64 WebBluetooth* webbluetooth = BluetoothSupplement::fromScriptState(scriptStat
e); | 64 WebBluetooth* webbluetooth = BluetoothSupplement::fromScriptState(scriptStat
e); |
| 65 if (!webbluetooth) | 65 if (!webbluetooth) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 78 m_connected = false; | 78 m_connected = false; |
| 79 WebBluetooth* webbluetooth = BluetoothSupplement::fromScriptState(scriptStat
e); | 79 WebBluetooth* webbluetooth = BluetoothSupplement::fromScriptState(scriptStat
e); |
| 80 webbluetooth->disconnect(device()->id()); | 80 webbluetooth->disconnect(device()->id()); |
| 81 device()->dispatchEvent(Event::createBubble(EventTypeNames::gattserverdiscon
nected)); | 81 device()->dispatchEvent(Event::createBubble(EventTypeNames::gattserverdiscon
nected)); |
| 82 } | 82 } |
| 83 | 83 |
| 84 // Class that allows us to resolve the promise with a single service or | 84 // Class that allows us to resolve the promise with a single service or |
| 85 // with a vector owning the services. | 85 // with a vector owning the services. |
| 86 class GetPrimaryServicesCallback : public WebBluetoothGetPrimaryServicesCallback
s { | 86 class GetPrimaryServicesCallback : public WebBluetoothGetPrimaryServicesCallback
s { |
| 87 public: | 87 public: |
| 88 GetPrimaryServicesCallback(BluetoothDevice* device, mojom::WebBluetoothGATTQ
ueryQuantity quantity, ScriptPromiseResolver* resolver) | 88 GetPrimaryServicesCallback(BluetoothDevice* device, mojom::blink::WebBluetoo
thGATTQueryQuantity quantity, ScriptPromiseResolver* resolver) |
| 89 : m_device(device) | 89 : m_device(device) |
| 90 , m_quantity(quantity) | 90 , m_quantity(quantity) |
| 91 , m_resolver(resolver) {} | 91 , m_resolver(resolver) {} |
| 92 | 92 |
| 93 void onSuccess(const WebVector<WebBluetoothRemoteGATTService*>& webServices)
override | 93 void onSuccess(const WebVector<WebBluetoothRemoteGATTService*>& webServices)
override |
| 94 { | 94 { |
| 95 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) | 95 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 96 return; | 96 return; |
| 97 | 97 |
| 98 if (m_quantity == mojom::WebBluetoothGATTQueryQuantity::SINGLE) { | 98 if (m_quantity == mojom::blink::WebBluetoothGATTQueryQuantity::SINGLE) { |
| 99 DCHECK_EQ(1u, webServices.size()); | 99 DCHECK_EQ(1u, webServices.size()); |
| 100 m_resolver->resolve(BluetoothRemoteGATTService::take(m_resolver, wra
pUnique(webServices[0]), m_device)); | 100 m_resolver->resolve(BluetoothRemoteGATTService::take(m_resolver, wra
pUnique(webServices[0]), m_device)); |
| 101 return; | 101 return; |
| 102 } | 102 } |
| 103 | 103 |
| 104 HeapVector<Member<BluetoothRemoteGATTService>> services; | 104 HeapVector<Member<BluetoothRemoteGATTService>> services; |
| 105 services.reserveInitialCapacity(webServices.size()); | 105 services.reserveInitialCapacity(webServices.size()); |
| 106 for (WebBluetoothRemoteGATTService* webService : webServices) { | 106 for (WebBluetoothRemoteGATTService* webService : webServices) { |
| 107 services.append(BluetoothRemoteGATTService::take(m_resolver, wrapUni
que(webService), m_device)); | 107 services.append(BluetoothRemoteGATTService::take(m_resolver, wrapUni
que(webService), m_device)); |
| 108 } | 108 } |
| 109 m_resolver->resolve(services); | 109 m_resolver->resolve(services); |
| 110 } | 110 } |
| 111 | 111 |
| 112 void onError(const WebBluetoothError& e) override | 112 void onError(int32_t error /* Corresponds to WebBluetoothError in web_blueto
oth.mojom */) override |
| 113 { | 113 { |
| 114 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) | 114 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
| 115 return; | 115 return; |
| 116 m_resolver->reject(BluetoothError::take(m_resolver, e)); | 116 m_resolver->reject(BluetoothError::take(m_resolver, error)); |
| 117 } | 117 } |
| 118 private: | 118 private: |
| 119 Persistent<BluetoothDevice> m_device; | 119 Persistent<BluetoothDevice> m_device; |
| 120 mojom::WebBluetoothGATTQueryQuantity m_quantity; | 120 mojom::blink::WebBluetoothGATTQueryQuantity m_quantity; |
| 121 Persistent<ScriptPromiseResolver> m_resolver; | 121 Persistent<ScriptPromiseResolver> m_resolver; |
| 122 }; | 122 }; |
| 123 | 123 |
| 124 ScriptPromise BluetoothRemoteGATTServer::getPrimaryService(ScriptState* scriptSt
ate, const StringOrUnsignedLong& service, ExceptionState& exceptionState) | 124 ScriptPromise BluetoothRemoteGATTServer::getPrimaryService(ScriptState* scriptSt
ate, const StringOrUnsignedLong& service, ExceptionState& exceptionState) |
| 125 { | 125 { |
| 126 String serviceUUID = BluetoothUUID::getService(service, exceptionState); | 126 String serviceUUID = BluetoothUUID::getService(service, exceptionState); |
| 127 if (exceptionState.hadException()) | 127 if (exceptionState.hadException()) |
| 128 return exceptionState.reject(scriptState); | 128 return exceptionState.reject(scriptState); |
| 129 | 129 |
| 130 return getPrimaryServicesImpl(scriptState, mojom::WebBluetoothGATTQueryQuant
ity::SINGLE, serviceUUID); | 130 return getPrimaryServicesImpl(scriptState, mojom::blink::WebBluetoothGATTQue
ryQuantity::SINGLE, serviceUUID); |
| 131 } | 131 } |
| 132 | 132 |
| 133 ScriptPromise BluetoothRemoteGATTServer::getPrimaryServices(ScriptState* scriptS
tate, const StringOrUnsignedLong& service, ExceptionState& exceptionState) | 133 ScriptPromise BluetoothRemoteGATTServer::getPrimaryServices(ScriptState* scriptS
tate, const StringOrUnsignedLong& service, ExceptionState& exceptionState) |
| 134 { | 134 { |
| 135 String serviceUUID = BluetoothUUID::getService(service, exceptionState); | 135 String serviceUUID = BluetoothUUID::getService(service, exceptionState); |
| 136 if (exceptionState.hadException()) | 136 if (exceptionState.hadException()) |
| 137 return exceptionState.reject(scriptState); | 137 return exceptionState.reject(scriptState); |
| 138 | 138 |
| 139 return getPrimaryServicesImpl(scriptState, mojom::WebBluetoothGATTQueryQuant
ity::MULTIPLE, serviceUUID); | 139 return getPrimaryServicesImpl(scriptState, mojom::blink::WebBluetoothGATTQue
ryQuantity::MULTIPLE, serviceUUID); |
| 140 } | 140 } |
| 141 | 141 |
| 142 ScriptPromise BluetoothRemoteGATTServer::getPrimaryServices(ScriptState* scriptS
tate, ExceptionState&) | 142 ScriptPromise BluetoothRemoteGATTServer::getPrimaryServices(ScriptState* scriptS
tate, ExceptionState&) |
| 143 { | 143 { |
| 144 return getPrimaryServicesImpl(scriptState, mojom::WebBluetoothGATTQueryQuant
ity::MULTIPLE); | 144 return getPrimaryServicesImpl(scriptState, mojom::blink::WebBluetoothGATTQue
ryQuantity::MULTIPLE); |
| 145 } | 145 } |
| 146 | 146 |
| 147 ScriptPromise BluetoothRemoteGATTServer::getPrimaryServicesImpl(ScriptState* scr
iptState, mojom::WebBluetoothGATTQueryQuantity quantity, String servicesUUID) | 147 ScriptPromise BluetoothRemoteGATTServer::getPrimaryServicesImpl(ScriptState* scr
iptState, mojom::blink::WebBluetoothGATTQueryQuantity quantity, String servicesU
UID) |
| 148 { | 148 { |
| 149 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 149 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
| 150 ScriptPromise promise = resolver->promise(); | 150 ScriptPromise promise = resolver->promise(); |
| 151 | 151 |
| 152 WebBluetooth* webbluetooth = BluetoothSupplement::fromScriptState(scriptStat
e); | 152 WebBluetooth* webbluetooth = BluetoothSupplement::fromScriptState(scriptStat
e); |
| 153 webbluetooth->getPrimaryServices(device()->id(), quantity, servicesUUID, new
GetPrimaryServicesCallback(device(), quantity, resolver)); | 153 webbluetooth->getPrimaryServices(device()->id(), static_cast<int32_t>(quanti
ty), servicesUUID, new GetPrimaryServicesCallback(device(), quantity, resolver))
; |
| 154 | 154 |
| 155 return promise; | 155 return promise; |
| 156 } | 156 } |
| 157 | 157 |
| 158 } // namespace blink | 158 } // namespace blink |
| OLD | NEW |