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, |
+ 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 |