| Index: content/renderer/bluetooth/web_bluetooth_impl.cc
|
| diff --git a/content/renderer/bluetooth/web_bluetooth_impl.cc b/content/renderer/bluetooth/web_bluetooth_impl.cc
|
| deleted file mode 100644
|
| index c518ef6720c4f7172be312ab724807fe63a2881d..0000000000000000000000000000000000000000
|
| --- a/content/renderer/bluetooth/web_bluetooth_impl.cc
|
| +++ /dev/null
|
| @@ -1,330 +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/renderer/bluetooth/web_bluetooth_impl.h"
|
| -
|
| -#include <memory>
|
| -#include <utility>
|
| -#include <vector>
|
| -
|
| -#include "base/memory/ptr_util.h"
|
| -#include "base/optional.h"
|
| -#include "content/child/mojo/type_converters.h"
|
| -#include "content/child/thread_safe_sender.h"
|
| -#include "content/common/bluetooth/web_bluetooth_device_id.h"
|
| -#include "content/renderer/bluetooth/bluetooth_type_converters.h"
|
| -#include "ipc/ipc_message.h"
|
| -#include "mojo/public/cpp/bindings/array.h"
|
| -#include "services/service_manager/public/cpp/interface_provider.h"
|
| -#include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothDevice.h"
|
| -#include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothDeviceInit.h"
|
| -#include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemoteGATTCharacteristic.h"
|
| -#include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemoteGATTCharacteristicInit.h"
|
| -#include "third_party/WebKit/public/platform/modules/bluetooth/WebBluetoothRemoteGATTService.h"
|
| -#include "third_party/WebKit/public/platform/modules/bluetooth/WebRequestDeviceOptions.h"
|
| -
|
| -namespace content {
|
| -
|
| -namespace {
|
| -
|
| -// Blink can't use non-blink mojo enums like blink::mojom::WebBluetoothResult,
|
| -// so we pass it as an int32 across the boundary.
|
| -int32_t ToInt32(blink::mojom::WebBluetoothResult result) {
|
| - return static_cast<int32_t>(result);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -WebBluetoothImpl::WebBluetoothImpl(
|
| - service_manager::InterfaceProvider* remote_interfaces)
|
| - : remote_interfaces_(remote_interfaces), binding_(this) {}
|
| -
|
| -WebBluetoothImpl::~WebBluetoothImpl() {
|
| -}
|
| -
|
| -void WebBluetoothImpl::requestDevice(
|
| - const blink::WebRequestDeviceOptions& options,
|
| - blink::WebBluetoothRequestDeviceCallbacks* callbacks) {
|
| - GetWebBluetoothService().RequestDevice(
|
| - blink::mojom::WebBluetoothRequestDeviceOptions::From(options),
|
| - base::Bind(&WebBluetoothImpl::OnRequestDeviceComplete,
|
| - base::Unretained(this),
|
| - base::Passed(base::WrapUnique(callbacks))));
|
| -}
|
| -
|
| -void WebBluetoothImpl::connect(
|
| - const blink::WebString& device_id,
|
| - blink::WebBluetoothDevice* device,
|
| - blink::WebBluetoothRemoteGATTServerConnectCallbacks* callbacks) {
|
| - // TODO(crbug.com/495270): After the Bluetooth Tree is implemented, there will
|
| - // only be one object per device. But for now we replace the previous object.
|
| - WebBluetoothDeviceId device_id_obj = WebBluetoothDeviceId(device_id.utf8());
|
| - connected_devices_[device_id_obj] = device;
|
| -
|
| - GetWebBluetoothService().RemoteServerConnect(
|
| - std::move(device_id_obj),
|
| - base::Bind(&WebBluetoothImpl::OnConnectComplete, base::Unretained(this),
|
| - base::Passed(base::WrapUnique(callbacks))));
|
| -}
|
| -
|
| -void WebBluetoothImpl::disconnect(const blink::WebString& device_id) {
|
| - WebBluetoothDeviceId device_id_obj = WebBluetoothDeviceId(device_id.utf8());
|
| - connected_devices_.erase(device_id_obj);
|
| -
|
| - GetWebBluetoothService().RemoteServerDisconnect(std::move(device_id_obj));
|
| -}
|
| -
|
| -void WebBluetoothImpl::getPrimaryServices(
|
| - const blink::WebString& device_id,
|
| - int32_t quantity,
|
| - const blink::WebString& services_uuid,
|
| - blink::WebBluetoothGetPrimaryServicesCallbacks* callbacks) {
|
| - DCHECK(blink::mojom::IsKnownEnumValue(
|
| - static_cast<blink::mojom::WebBluetoothGATTQueryQuantity>(quantity)));
|
| - GetWebBluetoothService().RemoteServerGetPrimaryServices(
|
| - WebBluetoothDeviceId(device_id.utf8()),
|
| - static_cast<blink::mojom::WebBluetoothGATTQueryQuantity>(quantity),
|
| - services_uuid.isEmpty()
|
| - ? base::nullopt
|
| - : base::make_optional(device::BluetoothUUID(services_uuid.utf8())),
|
| - base::Bind(&WebBluetoothImpl::OnGetPrimaryServicesComplete,
|
| - base::Unretained(this), device_id,
|
| - base::Passed(base::WrapUnique(callbacks))));
|
| -}
|
| -
|
| -void WebBluetoothImpl::getCharacteristics(
|
| - const blink::WebString& service_instance_id,
|
| - int32_t quantity,
|
| - const blink::WebString& characteristics_uuid,
|
| - blink::WebBluetoothGetCharacteristicsCallbacks* callbacks) {
|
| - DCHECK(blink::mojom::IsKnownEnumValue(
|
| - static_cast<blink::mojom::WebBluetoothGATTQueryQuantity>(quantity)));
|
| - GetWebBluetoothService().RemoteServiceGetCharacteristics(
|
| - mojo::String::From(service_instance_id),
|
| - static_cast<blink::mojom::WebBluetoothGATTQueryQuantity>(quantity),
|
| - characteristics_uuid.isEmpty()
|
| - ? base::nullopt
|
| - : base::make_optional(
|
| - device::BluetoothUUID(characteristics_uuid.utf8())),
|
| - base::Bind(&WebBluetoothImpl::OnGetCharacteristicsComplete,
|
| - base::Unretained(this), service_instance_id,
|
| - base::Passed(base::WrapUnique(callbacks))));
|
| -}
|
| -
|
| -void WebBluetoothImpl::readValue(
|
| - const blink::WebString& characteristic_instance_id,
|
| - blink::WebBluetoothReadValueCallbacks* callbacks) {
|
| - GetWebBluetoothService().RemoteCharacteristicReadValue(
|
| - mojo::String::From(characteristic_instance_id),
|
| - base::Bind(&WebBluetoothImpl::OnReadValueComplete, base::Unretained(this),
|
| - base::Passed(base::WrapUnique(callbacks))));
|
| -}
|
| -
|
| -void WebBluetoothImpl::writeValue(
|
| - const blink::WebString& characteristic_instance_id,
|
| - const blink::WebVector<uint8_t>& value,
|
| - blink::WebBluetoothWriteValueCallbacks* callbacks) {
|
| - GetWebBluetoothService().RemoteCharacteristicWriteValue(
|
| - mojo::String::From(characteristic_instance_id),
|
| - mojo::Array<uint8_t>::From(value),
|
| - base::Bind(&WebBluetoothImpl::OnWriteValueComplete,
|
| - base::Unretained(this), value,
|
| - base::Passed(base::WrapUnique(callbacks))));
|
| -}
|
| -
|
| -void WebBluetoothImpl::startNotifications(
|
| - const blink::WebString& characteristic_instance_id,
|
| - blink::WebBluetoothNotificationsCallbacks* callbacks) {
|
| - GetWebBluetoothService().RemoteCharacteristicStartNotifications(
|
| - mojo::String::From(characteristic_instance_id),
|
| - base::Bind(&WebBluetoothImpl::OnStartNotificationsComplete,
|
| - base::Unretained(this),
|
| - base::Passed(base::WrapUnique(callbacks))));
|
| -}
|
| -
|
| -void WebBluetoothImpl::stopNotifications(
|
| - const blink::WebString& characteristic_instance_id,
|
| - blink::WebBluetoothNotificationsCallbacks* callbacks) {
|
| - GetWebBluetoothService().RemoteCharacteristicStopNotifications(
|
| - mojo::String::From(characteristic_instance_id),
|
| - base::Bind(&WebBluetoothImpl::OnStopNotificationsComplete,
|
| - base::Unretained(this),
|
| - base::Passed(base::WrapUnique(callbacks))));
|
| -}
|
| -
|
| -void WebBluetoothImpl::characteristicObjectRemoved(
|
| - const blink::WebString& characteristic_instance_id,
|
| - blink::WebBluetoothRemoteGATTCharacteristic* characteristic) {
|
| - active_characteristics_.erase(characteristic_instance_id.utf8());
|
| -}
|
| -
|
| -void WebBluetoothImpl::registerCharacteristicObject(
|
| - const blink::WebString& characteristic_instance_id,
|
| - blink::WebBluetoothRemoteGATTCharacteristic* characteristic) {
|
| - // TODO(ortuno): After the Bluetooth Tree is implemented, there will
|
| - // only be one object per characteristic. But for now we replace
|
| - // the previous object.
|
| - // https://crbug.com/495270
|
| - active_characteristics_[characteristic_instance_id.utf8()] = characteristic;
|
| -}
|
| -
|
| -void WebBluetoothImpl::RemoteCharacteristicValueChanged(
|
| - const std::string& characteristic_instance_id,
|
| - const std::vector<uint8_t>& value) {
|
| - // We post a task so that the event is fired after any pending promises have
|
| - // resolved.
|
| - base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&WebBluetoothImpl::DispatchCharacteristicValueChanged,
|
| - base::Unretained(this), characteristic_instance_id, value));
|
| -}
|
| -
|
| -void WebBluetoothImpl::OnRequestDeviceComplete(
|
| - std::unique_ptr<blink::WebBluetoothRequestDeviceCallbacks> callbacks,
|
| - const blink::mojom::WebBluetoothResult result,
|
| - blink::mojom::WebBluetoothDevicePtr device) {
|
| - if (result == blink::mojom::WebBluetoothResult::SUCCESS) {
|
| - callbacks->onSuccess(base::MakeUnique<blink::WebBluetoothDeviceInit>(
|
| - blink::WebString::fromUTF8(device->id.str()),
|
| - device->name ? blink::WebString::fromUTF8(device->name.value())
|
| - : blink::WebString()));
|
| - } else {
|
| - callbacks->onError(ToInt32(result));
|
| - }
|
| -}
|
| -
|
| -void WebBluetoothImpl::GattServerDisconnected(
|
| - const WebBluetoothDeviceId& device_id) {
|
| - auto device_iter = connected_devices_.find(device_id);
|
| - if (device_iter != connected_devices_.end()) {
|
| - // Remove device from the map before calling dispatchGattServerDisconnected
|
| - // to avoid removing a device the gattserverdisconnected event handler might
|
| - // have re-connected.
|
| - blink::WebBluetoothDevice* device = device_iter->second;
|
| - connected_devices_.erase(device_iter);
|
| - device->dispatchGattServerDisconnected();
|
| - }
|
| -}
|
| -
|
| -void WebBluetoothImpl::OnConnectComplete(
|
| - std::unique_ptr<blink::WebBluetoothRemoteGATTServerConnectCallbacks>
|
| - callbacks,
|
| - blink::mojom::WebBluetoothResult result) {
|
| - if (result == blink::mojom::WebBluetoothResult::SUCCESS) {
|
| - callbacks->onSuccess();
|
| - } else {
|
| - callbacks->onError(ToInt32(result));
|
| - }
|
| -}
|
| -
|
| -void WebBluetoothImpl::OnGetPrimaryServicesComplete(
|
| - const blink::WebString& device_id,
|
| - std::unique_ptr<blink::WebBluetoothGetPrimaryServicesCallbacks> callbacks,
|
| - blink::mojom::WebBluetoothResult result,
|
| - base::Optional<std::vector<blink::mojom::WebBluetoothRemoteGATTServicePtr>>
|
| - services) {
|
| - if (result == blink::mojom::WebBluetoothResult::SUCCESS) {
|
| - DCHECK(services);
|
| - // TODO(dcheng): This WebVector should use smart pointers.
|
| - blink::WebVector<blink::WebBluetoothRemoteGATTService*> promise_services(
|
| - services->size());
|
| - for (size_t i = 0; i < services->size(); i++) {
|
| - promise_services[i] = new blink::WebBluetoothRemoteGATTService(
|
| - blink::WebString::fromUTF8(services.value()[i]->instance_id),
|
| - blink::WebString::fromUTF8(services.value()[i]->uuid),
|
| - true /* isPrimary */, device_id);
|
| - }
|
| - callbacks->onSuccess(promise_services);
|
| - } else {
|
| - callbacks->onError(ToInt32(result));
|
| - }
|
| -}
|
| -
|
| -void WebBluetoothImpl::OnGetCharacteristicsComplete(
|
| - const blink::WebString& service_instance_id,
|
| - std::unique_ptr<blink::WebBluetoothGetCharacteristicsCallbacks> callbacks,
|
| - blink::mojom::WebBluetoothResult result,
|
| - base::Optional<
|
| - std::vector<blink::mojom::WebBluetoothRemoteGATTCharacteristicPtr>>
|
| - characteristics) {
|
| - if (result == blink::mojom::WebBluetoothResult::SUCCESS) {
|
| - DCHECK(characteristics);
|
| - // TODO(dcheng): This WebVector should use smart pointers.
|
| - blink::WebVector<blink::WebBluetoothRemoteGATTCharacteristicInit*>
|
| - promise_characteristics(characteristics->size());
|
| - for (size_t i = 0; i < characteristics->size(); i++) {
|
| - promise_characteristics[i] =
|
| - new blink::WebBluetoothRemoteGATTCharacteristicInit(
|
| - service_instance_id, blink::WebString::fromUTF8(
|
| - characteristics.value()[i]->instance_id),
|
| - blink::WebString::fromUTF8(characteristics.value()[i]->uuid),
|
| - characteristics.value()[i]->properties);
|
| - }
|
| - callbacks->onSuccess(promise_characteristics);
|
| - } else {
|
| - callbacks->onError(ToInt32(result));
|
| - }
|
| -}
|
| -
|
| -void WebBluetoothImpl::OnReadValueComplete(
|
| - std::unique_ptr<blink::WebBluetoothReadValueCallbacks> callbacks,
|
| - blink::mojom::WebBluetoothResult result,
|
| - const base::Optional<std::vector<uint8_t>>& value) {
|
| - if (result == blink::mojom::WebBluetoothResult::SUCCESS) {
|
| - DCHECK(value);
|
| - callbacks->onSuccess(value.value());
|
| - } else {
|
| - callbacks->onError(ToInt32(result));
|
| - }
|
| -}
|
| -
|
| -void WebBluetoothImpl::OnWriteValueComplete(
|
| - const blink::WebVector<uint8_t>& value,
|
| - std::unique_ptr<blink::WebBluetoothWriteValueCallbacks> callbacks,
|
| - blink::mojom::WebBluetoothResult result) {
|
| - if (result == blink::mojom::WebBluetoothResult::SUCCESS) {
|
| - callbacks->onSuccess(value);
|
| - } else {
|
| - callbacks->onError(ToInt32(result));
|
| - }
|
| -}
|
| -
|
| -void WebBluetoothImpl::OnStartNotificationsComplete(
|
| - std::unique_ptr<blink::WebBluetoothNotificationsCallbacks> callbacks,
|
| - blink::mojom::WebBluetoothResult result) {
|
| - if (result == blink::mojom::WebBluetoothResult::SUCCESS) {
|
| - callbacks->onSuccess();
|
| - } else {
|
| - callbacks->onError(ToInt32(result));
|
| - }
|
| -}
|
| -
|
| -void WebBluetoothImpl::OnStopNotificationsComplete(
|
| - std::unique_ptr<blink::WebBluetoothNotificationsCallbacks> callbacks) {
|
| - callbacks->onSuccess();
|
| -}
|
| -
|
| -void WebBluetoothImpl::DispatchCharacteristicValueChanged(
|
| - const std::string& characteristic_instance_id,
|
| - const std::vector<uint8_t>& value) {
|
| - auto active_iter = active_characteristics_.find(characteristic_instance_id);
|
| - if (active_iter != active_characteristics_.end()) {
|
| - active_iter->second->dispatchCharacteristicValueChanged(value);
|
| - }
|
| -}
|
| -
|
| -blink::mojom::WebBluetoothService& WebBluetoothImpl::GetWebBluetoothService() {
|
| - if (!web_bluetooth_service_) {
|
| - remote_interfaces_->GetInterface(
|
| - mojo::MakeRequest(&web_bluetooth_service_));
|
| - // Create an associated interface ptr and pass it to the WebBluetoothService
|
| - // so that it can send us events without us prompting.
|
| - blink::mojom::WebBluetoothServiceClientAssociatedPtrInfo ptr_info;
|
| - binding_.Bind(&ptr_info, web_bluetooth_service_.associated_group());
|
| - web_bluetooth_service_->SetClient(std::move(ptr_info));
|
| - }
|
| - return *web_bluetooth_service_;
|
| -}
|
| -
|
| -} // namespace content
|
|
|