| Index: content/child/bluetooth/bluetooth_dispatcher.cc
|
| diff --git a/content/child/bluetooth/bluetooth_dispatcher.cc b/content/child/bluetooth/bluetooth_dispatcher.cc
|
| deleted file mode 100644
|
| index 82a047e16522db2429471e64f53aeb30c847e8aa..0000000000000000000000000000000000000000
|
| --- a/content/child/bluetooth/bluetooth_dispatcher.cc
|
| +++ /dev/null
|
| @@ -1,387 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "content/child/bluetooth/bluetooth_dispatcher.h"
|
| -
|
| -#include "base/lazy_instance.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/thread_task_runner_handle.h"
|
| -#include "content/child/thread_safe_sender.h"
|
| -#include "content/common/bluetooth/bluetooth_messages.h"
|
| -#include "device/bluetooth/bluetooth_uuid.h"
|
| -#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/WebBluetoothGATTCharacteristic.h"
|
| -#include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothGATTRemoteServer.h"
|
| -#include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothGATTService.h"
|
| -#include "third_party/WebKit/public/platform/modules/bluetooth/WebRequestDeviceOptions.h"
|
| -
|
| -using blink::WebBluetoothConnectGATTCallbacks;
|
| -using blink::WebBluetoothDevice;
|
| -using blink::WebBluetoothError;
|
| -using blink::WebBluetoothGATTCharacteristic;
|
| -using blink::WebBluetoothGATTRemoteServer;
|
| -using blink::WebBluetoothGATTService;
|
| -using blink::WebBluetoothReadValueCallbacks;
|
| -using blink::WebBluetoothRequestDeviceCallbacks;
|
| -using blink::WebBluetoothScanFilter;
|
| -using blink::WebRequestDeviceOptions;
|
| -using blink::WebString;
|
| -using blink::WebVector;
|
| -
|
| -struct BluetoothPrimaryServiceRequest {
|
| - BluetoothPrimaryServiceRequest(
|
| - blink::WebString device_instance_id,
|
| - blink::WebString service_uuid,
|
| - blink::WebBluetoothGetPrimaryServiceCallbacks* callbacks)
|
| - : device_instance_id(device_instance_id),
|
| - service_uuid(service_uuid),
|
| - callbacks(callbacks) {}
|
| - ~BluetoothPrimaryServiceRequest() {}
|
| -
|
| - blink::WebString device_instance_id;
|
| - blink::WebString service_uuid;
|
| - scoped_ptr<blink::WebBluetoothGetPrimaryServiceCallbacks> callbacks;
|
| -};
|
| -
|
| -struct BluetoothCharacteristicRequest {
|
| - BluetoothCharacteristicRequest(
|
| - blink::WebString service_instance_id,
|
| - blink::WebString characteristic_uuid,
|
| - blink::WebBluetoothGetCharacteristicCallbacks* callbacks)
|
| - : service_instance_id(service_instance_id),
|
| - characteristic_uuid(characteristic_uuid),
|
| - callbacks(callbacks) {}
|
| - ~BluetoothCharacteristicRequest() {}
|
| -
|
| - blink::WebString service_instance_id;
|
| - blink::WebString characteristic_uuid;
|
| - scoped_ptr<blink::WebBluetoothGetCharacteristicCallbacks> callbacks;
|
| -};
|
| -
|
| -namespace content {
|
| -
|
| -namespace {
|
| -
|
| -base::LazyInstance<base::ThreadLocalPointer<BluetoothDispatcher>>::Leaky
|
| - g_dispatcher_tls = LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -BluetoothDispatcher* const kHasBeenDeleted =
|
| - reinterpret_cast<BluetoothDispatcher*>(0x1);
|
| -
|
| -int CurrentWorkerId() {
|
| - return WorkerTaskRunner::Instance()->CurrentWorkerId();
|
| -}
|
| -
|
| -WebBluetoothDevice::VendorIDSource GetWebVendorIdSource(
|
| - device::BluetoothDevice::VendorIDSource vendor_id_source) {
|
| - switch (vendor_id_source) {
|
| - case device::BluetoothDevice::VENDOR_ID_UNKNOWN:
|
| - return WebBluetoothDevice::VendorIDSource::Unknown;
|
| - case device::BluetoothDevice::VENDOR_ID_BLUETOOTH:
|
| - return WebBluetoothDevice::VendorIDSource::Bluetooth;
|
| - case device::BluetoothDevice::VENDOR_ID_USB:
|
| - return WebBluetoothDevice::VendorIDSource::USB;
|
| - }
|
| - NOTREACHED();
|
| - return WebBluetoothDevice::VendorIDSource::Unknown;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -BluetoothDispatcher::BluetoothDispatcher(ThreadSafeSender* sender)
|
| - : thread_safe_sender_(sender) {
|
| - g_dispatcher_tls.Pointer()->Set(this);
|
| -}
|
| -
|
| -BluetoothDispatcher::~BluetoothDispatcher() {
|
| - g_dispatcher_tls.Pointer()->Set(kHasBeenDeleted);
|
| -}
|
| -
|
| -BluetoothDispatcher* BluetoothDispatcher::GetOrCreateThreadSpecificInstance(
|
| - ThreadSafeSender* thread_safe_sender) {
|
| - if (g_dispatcher_tls.Pointer()->Get() == kHasBeenDeleted) {
|
| - NOTREACHED() << "Re-instantiating TLS BluetoothDispatcher.";
|
| - g_dispatcher_tls.Pointer()->Set(NULL);
|
| - }
|
| - if (g_dispatcher_tls.Pointer()->Get())
|
| - return g_dispatcher_tls.Pointer()->Get();
|
| -
|
| - BluetoothDispatcher* dispatcher = new BluetoothDispatcher(thread_safe_sender);
|
| - if (CurrentWorkerId())
|
| - WorkerTaskRunner::Instance()->AddStopObserver(dispatcher);
|
| - return dispatcher;
|
| -}
|
| -
|
| -bool BluetoothDispatcher::Send(IPC::Message* msg) {
|
| - return thread_safe_sender_->Send(msg);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnMessageReceived(const IPC::Message& msg) {
|
| - bool handled = true;
|
| - IPC_BEGIN_MESSAGE_MAP(BluetoothDispatcher, msg)
|
| - IPC_MESSAGE_HANDLER(BluetoothMsg_RequestDeviceSuccess,
|
| - OnRequestDeviceSuccess);
|
| - 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_HANDLER(BluetoothMsg_GetCharacteristicSuccess,
|
| - OnGetCharacteristicSuccess);
|
| - IPC_MESSAGE_HANDLER(BluetoothMsg_GetCharacteristicError,
|
| - OnGetCharacteristicError);
|
| - IPC_MESSAGE_HANDLER(BluetoothMsg_ReadCharacteristicValueSuccess,
|
| - OnReadValueSuccess);
|
| - IPC_MESSAGE_HANDLER(BluetoothMsg_ReadCharacteristicValueError,
|
| - OnReadValueError);
|
| - IPC_MESSAGE_HANDLER(BluetoothMsg_WriteCharacteristicValueSuccess,
|
| - OnWriteValueSuccess);
|
| - IPC_MESSAGE_HANDLER(BluetoothMsg_WriteCharacteristicValueError,
|
| - OnWriteValueError);
|
| - IPC_MESSAGE_UNHANDLED(handled = false)
|
| - IPC_END_MESSAGE_MAP()
|
| - DCHECK(handled) << "Unhandled message:" << msg.type();
|
| -}
|
| -
|
| -void BluetoothDispatcher::requestDevice(
|
| - const WebRequestDeviceOptions& options,
|
| - blink::WebBluetoothRequestDeviceCallbacks* callbacks) {
|
| - int request_id = pending_requests_.Add(callbacks);
|
| -
|
| - // Convert |options| to its IPC form.
|
| - std::vector<content::BluetoothScanFilter> filters(options.filters.size());
|
| - for (size_t i = 0; i < options.filters.size(); ++i) {
|
| - const WebBluetoothScanFilter& web_filter = options.filters[i];
|
| - BluetoothScanFilter& filter = filters[i];
|
| - filter.services.reserve(web_filter.services.size());
|
| - for (const WebString& service : web_filter.services) {
|
| - filter.services.push_back(device::BluetoothUUID(service.utf8()));
|
| - }
|
| - }
|
| - std::vector<device::BluetoothUUID> optional_services;
|
| - optional_services.reserve(options.optionalServices.size());
|
| - for (const WebString& optional_service : options.optionalServices) {
|
| - optional_services.push_back(device::BluetoothUUID(optional_service.utf8()));
|
| - }
|
| -
|
| - Send(new BluetoothHostMsg_RequestDevice(CurrentWorkerId(), request_id,
|
| - filters, optional_services));
|
| -}
|
| -
|
| -void BluetoothDispatcher::connectGATT(
|
| - const blink::WebString& device_instance_id,
|
| - blink::WebBluetoothConnectGATTCallbacks* callbacks) {
|
| - int request_id = pending_connect_requests_.Add(callbacks);
|
| - Send(new BluetoothHostMsg_ConnectGATT(CurrentWorkerId(), request_id,
|
| - device_instance_id.utf8()));
|
| -}
|
| -
|
| -void BluetoothDispatcher::getPrimaryService(
|
| - const blink::WebString& device_instance_id,
|
| - const blink::WebString& service_uuid,
|
| - blink::WebBluetoothGetPrimaryServiceCallbacks* callbacks) {
|
| - int request_id =
|
| - pending_primary_service_requests_.Add(new BluetoothPrimaryServiceRequest(
|
| - device_instance_id, service_uuid, callbacks));
|
| - Send(new BluetoothHostMsg_GetPrimaryService(CurrentWorkerId(), request_id,
|
| - device_instance_id.utf8(),
|
| - service_uuid.utf8()));
|
| -}
|
| -
|
| -void BluetoothDispatcher::getCharacteristic(
|
| - const blink::WebString& service_instance_id,
|
| - const blink::WebString& characteristic_uuid,
|
| - blink::WebBluetoothGetCharacteristicCallbacks* callbacks) {
|
| - int request_id =
|
| - pending_characteristic_requests_.Add(new BluetoothCharacteristicRequest(
|
| - service_instance_id, characteristic_uuid, callbacks));
|
| - Send(new BluetoothHostMsg_GetCharacteristic(CurrentWorkerId(), request_id,
|
| - service_instance_id.utf8(),
|
| - characteristic_uuid.utf8()));
|
| -}
|
| -
|
| -void BluetoothDispatcher::readValue(
|
| - const blink::WebString& characteristic_instance_id,
|
| - blink::WebBluetoothReadValueCallbacks* callbacks) {
|
| - int request_id = pending_read_value_requests_.Add(callbacks);
|
| - Send(new BluetoothHostMsg_ReadValue(CurrentWorkerId(), request_id,
|
| - characteristic_instance_id.utf8()));
|
| -}
|
| -
|
| -void BluetoothDispatcher::writeValue(
|
| - const blink::WebString& characteristic_instance_id,
|
| - const std::vector<uint8_t>& value,
|
| - blink::WebBluetoothWriteValueCallbacks* callbacks) {
|
| - int request_id = pending_write_value_requests_.Add(callbacks);
|
| -
|
| - Send(new BluetoothHostMsg_WriteValue(
|
| - CurrentWorkerId(), request_id, characteristic_instance_id.utf8(), value));
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnWorkerRunLoopStopped() {
|
| - delete this;
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnRequestDeviceSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - const BluetoothDevice& device) {
|
| - DCHECK(pending_requests_.Lookup(request_id)) << request_id;
|
| -
|
| - WebVector<WebString> uuids(device.uuids.size());
|
| - for (size_t i = 0; i < device.uuids.size(); ++i)
|
| - uuids[i] = WebString::fromUTF8(device.uuids[i].c_str());
|
| -
|
| - pending_requests_.Lookup(request_id)
|
| - ->onSuccess(new WebBluetoothDevice(
|
| - WebString::fromUTF8(device.instance_id), WebString(device.name),
|
| - device.device_class, GetWebVendorIdSource(device.vendor_id_source),
|
| - device.vendor_id, device.product_id, device.product_version,
|
| - device.paired, uuids));
|
| - pending_requests_.Remove(request_id);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnRequestDeviceError(int thread_id,
|
| - int request_id,
|
| - WebBluetoothError error) {
|
| - DCHECK(pending_requests_.Lookup(request_id)) << request_id;
|
| - pending_requests_.Lookup(request_id)->onError(new WebBluetoothError(error));
|
| - pending_requests_.Remove(request_id);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnConnectGATTSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - const std::string& device_instance_id) {
|
| - DCHECK(pending_connect_requests_.Lookup(request_id)) << request_id;
|
| - pending_connect_requests_.Lookup(request_id)
|
| - ->onSuccess(new WebBluetoothGATTRemoteServer(
|
| - WebString::fromUTF8(device_instance_id), true /* connected */));
|
| - pending_connect_requests_.Remove(request_id);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnConnectGATTError(int thread_id,
|
| - int request_id,
|
| - WebBluetoothError error) {
|
| - DCHECK(pending_connect_requests_.Lookup(request_id)) << request_id;
|
| - pending_connect_requests_.Lookup(request_id)
|
| - ->onError(new WebBluetoothError(error));
|
| - pending_connect_requests_.Remove(request_id);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnGetPrimaryServiceSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - const std::string& service_instance_id) {
|
| - DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id;
|
| - BluetoothPrimaryServiceRequest* request =
|
| - pending_primary_service_requests_.Lookup(request_id);
|
| - request->callbacks->onSuccess(new WebBluetoothGATTService(
|
| - WebString::fromUTF8(service_instance_id), request->service_uuid,
|
| - true /* isPrimary */, request->device_instance_id));
|
| - pending_primary_service_requests_.Remove(request_id);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnGetPrimaryServiceError(int thread_id,
|
| - int request_id,
|
| - WebBluetoothError error) {
|
| - DCHECK(pending_primary_service_requests_.Lookup(request_id)) << request_id;
|
| -
|
| - // Since we couldn't find the service return null. See Step 3 of
|
| - // getPrimaryService algorithm:
|
| - // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothgattremoteserver-getprimaryservice
|
| - if (error == WebBluetoothError::ServiceNotFound) {
|
| - pending_primary_service_requests_.Lookup(request_id)
|
| - ->callbacks->onSuccess(nullptr);
|
| - pending_primary_service_requests_.Remove(request_id);
|
| - return;
|
| - }
|
| -
|
| - pending_primary_service_requests_.Lookup(request_id)
|
| - ->callbacks->onError(new WebBluetoothError(error));
|
| - pending_primary_service_requests_.Remove(request_id);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnGetCharacteristicSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - const std::string& characteristic_instance_id) {
|
| - DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id;
|
| -
|
| - BluetoothCharacteristicRequest* request =
|
| - pending_characteristic_requests_.Lookup(request_id);
|
| - request->callbacks->onSuccess(new WebBluetoothGATTCharacteristic(
|
| - WebString::fromUTF8(characteristic_instance_id),
|
| - request->service_instance_id, request->characteristic_uuid));
|
| -
|
| - pending_characteristic_requests_.Remove(request_id);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnGetCharacteristicError(int thread_id,
|
| - int request_id,
|
| - WebBluetoothError error) {
|
| - DCHECK(pending_characteristic_requests_.Lookup(request_id)) << request_id;
|
| -
|
| - // Since we couldn't find the characteristic return null. See Step 3 of
|
| - // getCharacteristic algorithm:
|
| - // https://webbluetoothchrome.github.io/web-bluetooth/#dom-bluetoothgattservice-getcharacteristic
|
| - if (error == WebBluetoothError::CharacteristicNotFound) {
|
| - pending_characteristic_requests_.Lookup(request_id)
|
| - ->callbacks->onSuccess(nullptr);
|
| - } else {
|
| - pending_characteristic_requests_.Lookup(request_id)
|
| - ->callbacks->onError(new WebBluetoothError(error));
|
| - }
|
| - pending_characteristic_requests_.Remove(request_id);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnReadValueSuccess(
|
| - int thread_id,
|
| - int request_id,
|
| - const std::vector<uint8_t>& value) {
|
| - DCHECK(pending_read_value_requests_.Lookup(request_id)) << request_id;
|
| -
|
| - // WebArrayBuffer is not accessible from Source/modules so we pass a
|
| - // WebVector instead.
|
| - pending_read_value_requests_.Lookup(request_id)
|
| - ->onSuccess(new WebVector<uint8_t>(value));
|
| -
|
| - pending_read_value_requests_.Remove(request_id);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnReadValueError(int thread_id,
|
| - int request_id,
|
| - WebBluetoothError error) {
|
| - DCHECK(pending_read_value_requests_.Lookup(request_id)) << request_id;
|
| -
|
| - pending_read_value_requests_.Lookup(request_id)
|
| - ->onError(new WebBluetoothError(error));
|
| -
|
| - pending_read_value_requests_.Remove(request_id);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnWriteValueSuccess(int thread_id, int request_id) {
|
| - DCHECK(pending_write_value_requests_.Lookup(request_id)) << request_id;
|
| -
|
| - pending_write_value_requests_.Lookup(request_id)->onSuccess();
|
| -
|
| - pending_write_value_requests_.Remove(request_id);
|
| -}
|
| -
|
| -void BluetoothDispatcher::OnWriteValueError(int thread_id,
|
| - int request_id,
|
| - WebBluetoothError error) {
|
| - DCHECK(pending_write_value_requests_.Lookup(request_id)) << request_id;
|
| -
|
| - pending_write_value_requests_.Lookup(request_id)
|
| - ->onError(new WebBluetoothError(error));
|
| -
|
| - pending_write_value_requests_.Remove(request_id);
|
| -}
|
| -
|
| -} // namespace content
|
|
|