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

Side by Side Diff: third_party/WebKit/Source/modules/bluetooth/Bluetooth.cpp

Issue 2718583002: Refactor WebBluetoothServiceClient in the web_bluetooth.mojom (Closed)
Patch Set: address comments from: https://codereview.chromium.org/2751293002/ Created 3 years, 9 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 unified diff | Download patch
OLDNEW
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/Bluetooth.h" 5 #include "modules/bluetooth/Bluetooth.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 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 options.optionalServices()) { 123 options.optionalServices()) {
124 const String& validatedOptionalService = 124 const String& validatedOptionalService =
125 BluetoothUUID::getService(optionalService, exceptionState); 125 BluetoothUUID::getService(optionalService, exceptionState);
126 if (exceptionState.hadException()) 126 if (exceptionState.hadException())
127 return; 127 return;
128 result->optional_services.push_back(validatedOptionalService); 128 result->optional_services.push_back(validatedOptionalService);
129 } 129 }
130 } 130 }
131 } 131 }
132 132
133 void Bluetooth::Dispose() {
134 // The pipe to this object must be closed when is marked unreachable to
135 // prevent messages from being dispatched before lazy sweeping.
136 if (m_clientBinding.is_bound())
137 m_clientBinding.Close();
138 }
139
140 void Bluetooth::RequestDeviceCallback( 133 void Bluetooth::RequestDeviceCallback(
141 ScriptPromiseResolver* resolver, 134 ScriptPromiseResolver* resolver,
142 mojom::blink::WebBluetoothResult result, 135 mojom::blink::WebBluetoothResult result,
143 mojom::blink::WebBluetoothDevicePtr device) { 136 mojom::blink::WebBluetoothDevicePtr device) {
144 if (!resolver->getExecutionContext() || 137 if (!resolver->getExecutionContext() ||
145 resolver->getExecutionContext()->isContextDestroyed()) 138 resolver->getExecutionContext()->isContextDestroyed())
146 return; 139 return;
147 140
148 if (result == mojom::blink::WebBluetoothResult::SUCCESS) { 141 if (result == mojom::blink::WebBluetoothResult::SUCCESS) {
149 BluetoothDevice* bluetoothDevice = 142 BluetoothDevice* bluetoothDevice =
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 if (!m_service) { 174 if (!m_service) {
182 InterfaceProvider* interfaceProvider = nullptr; 175 InterfaceProvider* interfaceProvider = nullptr;
183 if (context->isDocument()) { 176 if (context->isDocument()) {
184 Document* document = toDocument(context); 177 Document* document = toDocument(context);
185 if (document->frame()) 178 if (document->frame())
186 interfaceProvider = document->frame()->interfaceProvider(); 179 interfaceProvider = document->frame()->interfaceProvider();
187 } 180 }
188 181
189 if (interfaceProvider) 182 if (interfaceProvider)
190 interfaceProvider->getInterface(mojo::MakeRequest(&m_service)); 183 interfaceProvider->getInterface(mojo::MakeRequest(&m_service));
191
192 if (m_service) {
193 // Create an associated interface ptr and pass it to the
194 // WebBluetoothService so that it can send us events without us
195 // prompting.
196 mojom::blink::WebBluetoothServiceClientAssociatedPtrInfo ptrInfo;
197 m_clientBinding.Bind(&ptrInfo);
198 m_service->SetClient(std::move(ptrInfo));
199 }
200 } 184 }
201 185
202 if (!m_service) { 186 if (!m_service) {
203 return ScriptPromise::rejectWithDOMException( 187 return ScriptPromise::rejectWithDOMException(
204 scriptState, DOMException::create(NotSupportedError)); 188 scriptState, DOMException::create(NotSupportedError));
205 } 189 }
206 190
207 // In order to convert the arguments from service names and aliases to just 191 // In order to convert the arguments from service names and aliases to just
208 // UUIDs, do the following substeps: 192 // UUIDs, do the following substeps:
209 auto deviceOptions = mojom::blink::WebBluetoothRequestDeviceOptions::New(); 193 auto deviceOptions = mojom::blink::WebBluetoothRequestDeviceOptions::New();
(...skipping 12 matching lines...) Expand all
222 ScriptPromise promise = resolver->promise(); 206 ScriptPromise promise = resolver->promise();
223 207
224 m_service->RequestDevice( 208 m_service->RequestDevice(
225 std::move(deviceOptions), 209 std::move(deviceOptions),
226 convertToBaseCallback(WTF::bind(&Bluetooth::RequestDeviceCallback, 210 convertToBaseCallback(WTF::bind(&Bluetooth::RequestDeviceCallback,
227 wrapPersistent(this), 211 wrapPersistent(this),
228 wrapPersistent(resolver)))); 212 wrapPersistent(resolver))));
229 return promise; 213 return promise;
230 } 214 }
231 215
232 void Bluetooth::AddToConnectedDevicesMap(const String& deviceId,
233 BluetoothDevice* device) {
234 m_connectedDevices.insert(deviceId, device);
235 }
236
237 void Bluetooth::RemoveFromConnectedDevicesMap(const String& deviceId) {
238 m_connectedDevices.remove(deviceId);
239 }
240
241 void Bluetooth::RegisterCharacteristicObject(
242 const String& characteristicInstanceId,
243 BluetoothRemoteGATTCharacteristic* characteristic) {
244 m_activeCharacteristics.insert(characteristicInstanceId, characteristic);
245 }
246
247 void Bluetooth::CharacteristicObjectRemoved(
248 const String& characteristicInstanceId) {
249 m_activeCharacteristics.remove(characteristicInstanceId);
250 }
251
252 DEFINE_TRACE(Bluetooth) { 216 DEFINE_TRACE(Bluetooth) {
253 visitor->trace(m_deviceInstanceMap); 217 visitor->trace(m_deviceInstanceMap);
254 visitor->trace(m_activeCharacteristics);
255 visitor->trace(m_connectedDevices);
256 } 218 }
257 219
258 Bluetooth::Bluetooth() : m_clientBinding(this) {} 220 Bluetooth::Bluetooth() {}
259
260 void Bluetooth::RemoteCharacteristicValueChanged(
261 const WTF::String& characteristicInstanceId,
262 const WTF::Vector<uint8_t>& value) {
263 BluetoothRemoteGATTCharacteristic* characteristic =
264 m_activeCharacteristics.at(characteristicInstanceId);
265 if (characteristic)
266 characteristic->DispatchCharacteristicValueChanged(value);
267 }
268
269 void Bluetooth::GattServerDisconnected(const WTF::String& deviceId) {
270 BluetoothDevice* device = m_connectedDevices.at(deviceId);
271 if (device) {
272 // Remove device from the map before calling dispatchGattServerDisconnected
273 // to avoid removing a device the gattserverdisconnected event handler might
274 // have re-connected.
275 m_connectedDevices.remove(deviceId);
276 device->DispatchGattServerDisconnected();
277 }
278 }
279 221
280 BluetoothDevice* Bluetooth::GetBluetoothDeviceRepresentingDevice( 222 BluetoothDevice* Bluetooth::GetBluetoothDeviceRepresentingDevice(
281 mojom::blink::WebBluetoothDevicePtr devicePtr, 223 mojom::blink::WebBluetoothDevicePtr devicePtr,
282 ScriptPromiseResolver* resolver) { 224 ScriptPromiseResolver* resolver) {
283 WTF::String id = devicePtr->id; 225 WTF::String id = devicePtr->id;
284 BluetoothDevice* device = m_deviceInstanceMap.at(id); 226 BluetoothDevice* device = m_deviceInstanceMap.at(id);
285 if (!device) { 227 if (!device) {
286 device = BluetoothDevice::take(resolver, std::move(devicePtr), this); 228 device = BluetoothDevice::take(resolver, std::move(devicePtr), this);
287 auto result = m_deviceInstanceMap.insert(id, device); 229 auto result = m_deviceInstanceMap.insert(id, device);
288 DCHECK(result.isNewEntry); 230 DCHECK(result.isNewEntry);
289 } 231 }
290 return device; 232 return device;
291 } 233 }
292 234
293 } // namespace blink 235 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698