Chromium Code Reviews| 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 |
| index 2df80b3ad7421d2ef0dc55b3a12fa2c0ff923dba..7665e8079a2c7a22bc79275db8301dc1974eb6ef 100644 |
| --- a/content/renderer/bluetooth/web_bluetooth_impl.cc |
| +++ b/content/renderer/bluetooth/web_bluetooth_impl.cc |
| @@ -4,18 +4,20 @@ |
| #include "content/renderer/bluetooth/web_bluetooth_impl.h" |
| +#include "content/child/mojo/type_converters.h" |
| #include "content/child/thread_safe_sender.h" |
| +#include "content/public/common/service_registry.h" |
| #include "content/renderer/bluetooth/bluetooth_dispatcher.h" |
| #include "ipc/ipc_message.h" |
| +#include "mojo/public/cpp/bindings/array.h" |
| namespace content { |
| -WebBluetoothImpl::WebBluetoothImpl(ThreadSafeSender* thread_safe_sender) |
| - : WebBluetoothImpl(thread_safe_sender, MSG_ROUTING_NONE) {} |
| - |
| -WebBluetoothImpl::WebBluetoothImpl(ThreadSafeSender* thread_safe_sender, |
| +WebBluetoothImpl::WebBluetoothImpl(ServiceRegistry* service_registry, |
| + ThreadSafeSender* thread_safe_sender, |
| int frame_routing_id) |
| - : thread_safe_sender_(thread_safe_sender), |
| + : service_registry_(service_registry), |
| + thread_safe_sender_(thread_safe_sender), |
| frame_routing_id_(frame_routing_id) {} |
| WebBluetoothImpl::~WebBluetoothImpl() { |
| @@ -72,8 +74,12 @@ void WebBluetoothImpl::writeValue( |
| const blink::WebString& characteristic_instance_id, |
| const blink::WebVector<uint8_t>& value, |
| blink::WebBluetoothWriteValueCallbacks* callbacks) { |
| - GetDispatcher()->writeValue(frame_routing_id_, characteristic_instance_id, |
| - value, callbacks); |
| + GetWebBluetoothService().RemoteCharacteristicWriteValue( |
| + mojo::String::From(characteristic_instance_id), |
| + mojo::Array<uint8_t>::From(value), |
| + base::Bind(&WebBluetoothImpl::OnWriteValueComplete, |
| + base::Unretained(this), value, |
|
scheib
2016/03/31 04:17:51
Unretained always makes a reader wonder, "Is it cl
ortuno
2016/03/31 16:56:44
I asked the same thing in patchset #3 bluetooth_di
|
| + base::Passed(make_scoped_ptr(callbacks)))); |
| } |
| void WebBluetoothImpl::startNotifications( |
| @@ -106,9 +112,28 @@ void WebBluetoothImpl::registerCharacteristicObject( |
| frame_routing_id_, characteristic_instance_id, characteristic); |
| } |
| +void WebBluetoothImpl::OnWriteValueComplete( |
| + const blink::WebVector<uint8_t>& value, |
| + scoped_ptr<blink::WebBluetoothWriteValueCallbacks> callbacks, |
| + blink::mojom::WebBluetoothError error) { |
| + if (error == blink::mojom::WebBluetoothError::SUCCESS) { |
| + callbacks->onSuccess(value); |
| + } else { |
| + callbacks->onError(error); |
| + } |
| +} |
| + |
| BluetoothDispatcher* WebBluetoothImpl::GetDispatcher() { |
| return BluetoothDispatcher::GetOrCreateThreadSpecificInstance( |
| thread_safe_sender_.get()); |
| } |
| +blink::mojom::WebBluetoothService& WebBluetoothImpl::GetWebBluetoothService() { |
| + if (!web_bluetooth_service_) { |
| + service_registry_->ConnectToRemoteService( |
| + mojo::GetProxy(&web_bluetooth_service_)); |
| + } |
| + return *web_bluetooth_service_; |
| +} |
| + |
| } // namespace content |