Chromium Code Reviews| Index: content/child/bluetooth/bluetooth_dispatcher.cc |
| diff --git a/content/child/bluetooth/bluetooth_dispatcher.cc b/content/child/bluetooth/bluetooth_dispatcher.cc |
| index 576fa8dde52826cdbcbe0235eba9cd41ade778e0..50a33579773e36cdbda19a4759f9e66c6c342bec 100644 |
| --- a/content/child/bluetooth/bluetooth_dispatcher.cc |
| +++ b/content/child/bluetooth/bluetooth_dispatcher.cc |
| @@ -13,11 +13,13 @@ |
| #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothDevice.h" |
| #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothError.h" |
| #include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothGATTRemoteServer.h" |
| +#include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothGATTService.h" |
| using blink::WebBluetoothConnectGATTCallbacks; |
| using blink::WebBluetoothDevice; |
| using blink::WebBluetoothError; |
| using blink::WebBluetoothGATTRemoteServer; |
| +using blink::WebBluetoothGATTService; |
| using blink::WebBluetoothRequestDeviceCallbacks; |
| using blink::WebString; |
| using blink::WebVector; |
| @@ -102,6 +104,10 @@ void BluetoothDispatcher::OnMessageReceived(const IPC::Message& msg) { |
| IPC_MESSAGE_HANDLER(BluetoothMsg_RequestDeviceError, OnRequestDeviceError); |
| IPC_MESSAGE_HANDLER(BluetoothMsg_ConnectGATTSuccess, OnConnectGATTSuccess); |
| IPC_MESSAGE_HANDLER(BluetoothMsg_ConnectGATTError, OnConnectGATTError); |
| + IPC_MESSAGE_HANDLER(BluetoothMsg_GetPrimaryServiceSuccess, |
| + OnGetPrimaryServiceSuccess); |
| + IPC_MESSAGE_HANDLER(BluetoothMsg_GetPrimaryServiceError, |
| + OnGetPrimaryServiceError); |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| DCHECK(handled) << "Unhandled message:" << msg.type(); |
| @@ -121,6 +127,17 @@ void BluetoothDispatcher::connectGATT( |
| device_instance_id.utf8())); |
| } |
| +void BluetoothDispatcher::getPrimaryService( |
| + const blink::WebString& device_instance_id, |
| + const blink::WebString& service_uuid, |
| + blink::WebBluetoothGetPrimaryServiceCallbacks* callbacks) { |
| + // TODO(ortuno): Check that service_uuid is a valid UUID. |
|
scheib
2015/05/28 23:09:16
UUIDs per spec should be verified by BluetoothUUID
ortuno
2015/05/29 17:53:54
Done.
|
| + int request_id = pending_primary_service_requests_.Add(callbacks); |
| + Send(new BluetoothHostMsg_GetPrimaryService(CurrentWorkerId(), request_id, |
| + device_instance_id.utf8(), |
| + service_uuid.utf8())); |
| +} |
| + |
| void BluetoothDispatcher::OnWorkerRunLoopStopped() { |
| delete this; |
| } |
| @@ -179,4 +196,40 @@ void BluetoothDispatcher::OnConnectGATTError(int thread_id, |
| pending_connect_requests_.Remove(request_id); |
| } |
| +void BluetoothDispatcher::OnGetPrimaryServiceSuccess( |
| + int thread_id, |
| + int request_id, |
| + const std::string& device_instance_id, |
| + const std::string& service_instance_id, |
| + const std::string& uuid) { |
| + DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; |
| + pending_primary_service_requests_.Lookup(request_id) |
| + ->onSuccess(new WebBluetoothGATTService( |
| + WebString::fromUTF8(service_instance_id), WebString::fromUTF8(uuid), |
| + true /* isPrimary */, WebString::fromUTF8(device_instance_id))); |
| + pending_primary_service_requests_.Remove(request_id); |
| +} |
| + |
| +void BluetoothDispatcher::OnGetPrimaryServiceError(int thread_id, |
| + int request_id, |
| + BluetoothError error_type) { |
| + DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id; |
| + |
| + // Since we couldn't find the service return null. See Step 3 of |
|
scheib
2015/05/28 23:09:16
Let's cross reference from https://github.com/WebB
ortuno
2015/05/29 17:53:55
Not sure what you mean. You want me to add a refer
scheib
2015/05/31 19:48:41
Sorry, more clearly:
Please add comments into the
|
| + // getPrimaryService algorithm: |
| + // https://webbluetoothcg.github.io/web-bluetooth/#dom-bluetoothgattremoteserver-getprimaryservice |
| + if (error_type == BluetoothError::NOT_FOUND) { |
| + pending_primary_service_requests_.Lookup(request_id)->onSuccess(nullptr); |
| + pending_primary_service_requests_.Remove(request_id); |
| + return; |
| + } |
| + |
| + pending_primary_service_requests_.Lookup(request_id) |
| + ->onError(new WebBluetoothError( |
| + // TODO(ortuno): Return more descriptive error messages. |
| + // http://crbug.com/490419 |
| + WebBluetoothErrorFromBluetoothError(error_type), "")); |
| + pending_primary_service_requests_.Remove(request_id); |
| +} |
| + |
| } // namespace content |