From 554fcdf77ccc8c0a994ecc0c7821fa97a288bb6a Mon Sep 17 00:00:00 2001 From: Ovidio Henriquez Date: Fri, 23 Mar 2018 15:36:46 -0700 Subject: [PATCH] bluetooth: FakeBluetoothChooser impl. Implements the interfaces that FakeBluetoothChooser overrides. The mojom::FakeBluetoothChooser overrides are implemented by running |event_handler_| with the appropriate arguments. The BluetoothChooser overrides do nothing at the moment, since the base class is only meant to update the chooser user interface. This change also begins to partially convert a Bluetooth chooser test to test the interface and deletes the temporary tests that were created to test this API. BUG=719827 Change-Id: I56a04e6bdb2de38d9163d7bc350db578deeb9ba3 --- bluetooth/resources/bluetooth-helpers.js | 9 + .../chromium/fake_bluetooth_chooser.mojom.js | 194 +++--------------- resources/chromium/web-bluetooth-test.js | 15 ++ 3 files changed, 50 insertions(+), 168 deletions(-) diff --git a/bluetooth/resources/bluetooth-helpers.js b/bluetooth/resources/bluetooth-helpers.js index 7b23742fc4c9a3..c1efad45c7e414 100644 --- a/bluetooth/resources/bluetooth-helpers.js +++ b/bluetooth/resources/bluetooth-helpers.js @@ -477,6 +477,15 @@ function setUpPreconnectedDevice({ })); } +const health_thermometer_ad_packet = { + deviceAddress: '09:09:09:09:09:09', + rssi: 100, + scanRecord: { + name: 'Health Thermometer', + uuids: [health_thermometer.uuid], + }, +}; + // Returns a FakePeripheral that corresponds to a simulated pre-connected device // called 'Health Thermometer'. The device has two known serviceUUIDs: // 'generic_access' and 'health_thermometer'. diff --git a/resources/chromium/fake_bluetooth_chooser.mojom.js b/resources/chromium/fake_bluetooth_chooser.mojom.js index 535a90a4ab5c79..10f22c55ad83cc 100644 --- a/resources/chromium/fake_bluetooth_chooser.mojom.js +++ b/resources/chromium/fake_bluetooth_chooser.mojom.js @@ -305,52 +305,6 @@ encoder.writeUint32(0); encoder.encodeStruct(codec.String, val.peripheralAddress); }; - function FakeBluetoothChooser_SelectPeripheral_ResponseParams(values) { - this.initDefaults_(); - this.initFields_(values); - } - - - FakeBluetoothChooser_SelectPeripheral_ResponseParams.prototype.initDefaults_ = function() { - }; - FakeBluetoothChooser_SelectPeripheral_ResponseParams.prototype.initFields_ = function(fields) { - for(var field in fields) { - if (this.hasOwnProperty(field)) - this[field] = fields[field]; - } - }; - - FakeBluetoothChooser_SelectPeripheral_ResponseParams.validate = function(messageValidator, offset) { - var err; - err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); - if (err !== validator.validationError.NONE) - return err; - - var kVersionSizes = [ - {version: 0, numBytes: 8} - ]; - err = messageValidator.validateStructVersion(offset, kVersionSizes); - if (err !== validator.validationError.NONE) - return err; - - return validator.validationError.NONE; - }; - - FakeBluetoothChooser_SelectPeripheral_ResponseParams.encodedSize = codec.kStructHeaderSize + 0; - - FakeBluetoothChooser_SelectPeripheral_ResponseParams.decode = function(decoder) { - var packed; - var val = new FakeBluetoothChooser_SelectPeripheral_ResponseParams(); - var numberOfBytes = decoder.readUint32(); - var version = decoder.readUint32(); - return val; - }; - - FakeBluetoothChooser_SelectPeripheral_ResponseParams.encode = function(encoder, val) { - var packed; - encoder.writeUint32(FakeBluetoothChooser_SelectPeripheral_ResponseParams.encodedSize); - encoder.writeUint32(0); - }; function FakeBluetoothChooser_Cancel_Params(values) { this.initDefaults_(); this.initFields_(values); @@ -397,52 +351,6 @@ encoder.writeUint32(FakeBluetoothChooser_Cancel_Params.encodedSize); encoder.writeUint32(0); }; - function FakeBluetoothChooser_Cancel_ResponseParams(values) { - this.initDefaults_(); - this.initFields_(values); - } - - - FakeBluetoothChooser_Cancel_ResponseParams.prototype.initDefaults_ = function() { - }; - FakeBluetoothChooser_Cancel_ResponseParams.prototype.initFields_ = function(fields) { - for(var field in fields) { - if (this.hasOwnProperty(field)) - this[field] = fields[field]; - } - }; - - FakeBluetoothChooser_Cancel_ResponseParams.validate = function(messageValidator, offset) { - var err; - err = messageValidator.validateStructHeader(offset, codec.kStructHeaderSize); - if (err !== validator.validationError.NONE) - return err; - - var kVersionSizes = [ - {version: 0, numBytes: 8} - ]; - err = messageValidator.validateStructVersion(offset, kVersionSizes); - if (err !== validator.validationError.NONE) - return err; - - return validator.validationError.NONE; - }; - - FakeBluetoothChooser_Cancel_ResponseParams.encodedSize = codec.kStructHeaderSize + 0; - - FakeBluetoothChooser_Cancel_ResponseParams.decode = function(decoder) { - var packed; - var val = new FakeBluetoothChooser_Cancel_ResponseParams(); - var numberOfBytes = decoder.readUint32(); - var version = decoder.readUint32(); - return val; - }; - - FakeBluetoothChooser_Cancel_ResponseParams.encode = function(encoder, val) { - var packed; - encoder.writeUint32(FakeBluetoothChooser_Cancel_ResponseParams.encodedSize); - encoder.writeUint32(0); - }; function FakeBluetoothChooser_Rescan_Params(values) { this.initDefaults_(); this.initFields_(values); @@ -535,10 +443,10 @@ encoder.writeUint32(FakeBluetoothChooser_Rescan_ResponseParams.encodedSize); encoder.writeUint32(0); }; - var kFakeBluetoothChooser_WaitForEvents_Name = 457051710; - var kFakeBluetoothChooser_SelectPeripheral_Name = 1924310743; - var kFakeBluetoothChooser_Cancel_Name = 1388880682; - var kFakeBluetoothChooser_Rescan_Name = 2112671529; + var kFakeBluetoothChooser_WaitForEvents_Name = 824870089; + var kFakeBluetoothChooser_SelectPeripheral_Name = 465681876; + var kFakeBluetoothChooser_Cancel_Name = 1100724513; + var kFakeBluetoothChooser_Rescan_Name = 1655369674; function FakeBluetoothChooserPtr(handleOrPtrInfo) { this.ptr = new bindings.InterfacePtrController(FakeBluetoothChooser, @@ -591,22 +499,12 @@ FakeBluetoothChooserProxy.prototype.selectPeripheral = function(peripheralAddress) { var params = new FakeBluetoothChooser_SelectPeripheral_Params(); params.peripheralAddress = peripheralAddress; - return new Promise(function(resolve, reject) { - var builder = new codec.MessageV1Builder( - kFakeBluetoothChooser_SelectPeripheral_Name, - codec.align(FakeBluetoothChooser_SelectPeripheral_Params.encodedSize), - codec.kMessageExpectsResponse, 0); - builder.encodeStruct(FakeBluetoothChooser_SelectPeripheral_Params, params); - var message = builder.finish(); - this.receiver_.acceptAndExpectResponse(message).then(function(message) { - var reader = new codec.MessageReader(message); - var responseParams = - reader.decodeStruct(FakeBluetoothChooser_SelectPeripheral_ResponseParams); - resolve(responseParams); - }).catch(function(result) { - reject(Error("Connection error: " + result)); - }); - }.bind(this)); + var builder = new codec.MessageV0Builder( + kFakeBluetoothChooser_SelectPeripheral_Name, + codec.align(FakeBluetoothChooser_SelectPeripheral_Params.encodedSize)); + builder.encodeStruct(FakeBluetoothChooser_SelectPeripheral_Params, params); + var message = builder.finish(); + this.receiver_.accept(message); }; FakeBluetoothChooserPtr.prototype.cancel = function() { return FakeBluetoothChooserProxy.prototype.cancel @@ -615,22 +513,12 @@ FakeBluetoothChooserProxy.prototype.cancel = function() { var params = new FakeBluetoothChooser_Cancel_Params(); - return new Promise(function(resolve, reject) { - var builder = new codec.MessageV1Builder( - kFakeBluetoothChooser_Cancel_Name, - codec.align(FakeBluetoothChooser_Cancel_Params.encodedSize), - codec.kMessageExpectsResponse, 0); - builder.encodeStruct(FakeBluetoothChooser_Cancel_Params, params); - var message = builder.finish(); - this.receiver_.acceptAndExpectResponse(message).then(function(message) { - var reader = new codec.MessageReader(message); - var responseParams = - reader.decodeStruct(FakeBluetoothChooser_Cancel_ResponseParams); - resolve(responseParams); - }).catch(function(result) { - reject(Error("Connection error: " + result)); - }); - }.bind(this)); + var builder = new codec.MessageV0Builder( + kFakeBluetoothChooser_Cancel_Name, + codec.align(FakeBluetoothChooser_Cancel_Params.encodedSize)); + builder.encodeStruct(FakeBluetoothChooser_Cancel_Params, params); + var message = builder.finish(); + this.receiver_.accept(message); }; FakeBluetoothChooserPtr.prototype.rescan = function() { return FakeBluetoothChooserProxy.prototype.rescan @@ -676,6 +564,14 @@ FakeBluetoothChooserStub.prototype.accept = function(message) { var reader = new codec.MessageReader(message); switch (reader.messageName) { + case kFakeBluetoothChooser_SelectPeripheral_Name: + var params = reader.decodeStruct(FakeBluetoothChooser_SelectPeripheral_Params); + this.selectPeripheral(params.peripheralAddress); + return true; + case kFakeBluetoothChooser_Cancel_Name: + var params = reader.decodeStruct(FakeBluetoothChooser_Cancel_Params); + this.cancel(); + return true; default: return false; } @@ -701,36 +597,6 @@ responder.accept(message); }); return true; - case kFakeBluetoothChooser_SelectPeripheral_Name: - var params = reader.decodeStruct(FakeBluetoothChooser_SelectPeripheral_Params); - this.selectPeripheral(params.peripheralAddress).then(function(response) { - var responseParams = - new FakeBluetoothChooser_SelectPeripheral_ResponseParams(); - var builder = new codec.MessageV1Builder( - kFakeBluetoothChooser_SelectPeripheral_Name, - codec.align(FakeBluetoothChooser_SelectPeripheral_ResponseParams.encodedSize), - codec.kMessageIsResponse, reader.requestID); - builder.encodeStruct(FakeBluetoothChooser_SelectPeripheral_ResponseParams, - responseParams); - var message = builder.finish(); - responder.accept(message); - }); - return true; - case kFakeBluetoothChooser_Cancel_Name: - var params = reader.decodeStruct(FakeBluetoothChooser_Cancel_Params); - this.cancel().then(function(response) { - var responseParams = - new FakeBluetoothChooser_Cancel_ResponseParams(); - var builder = new codec.MessageV1Builder( - kFakeBluetoothChooser_Cancel_Name, - codec.align(FakeBluetoothChooser_Cancel_ResponseParams.encodedSize), - codec.kMessageIsResponse, reader.requestID); - builder.encodeStruct(FakeBluetoothChooser_Cancel_ResponseParams, - responseParams); - var message = builder.finish(); - responder.accept(message); - }); - return true; case kFakeBluetoothChooser_Rescan_Name: var params = reader.decodeStruct(FakeBluetoothChooser_Rescan_Params); this.rescan().then(function(response) { @@ -760,11 +626,11 @@ paramsClass = FakeBluetoothChooser_WaitForEvents_Params; break; case kFakeBluetoothChooser_SelectPeripheral_Name: - if (message.expectsResponse()) + if (!message.expectsResponse() && !message.isResponse()) paramsClass = FakeBluetoothChooser_SelectPeripheral_Params; break; case kFakeBluetoothChooser_Cancel_Name: - if (message.expectsResponse()) + if (!message.expectsResponse() && !message.isResponse()) paramsClass = FakeBluetoothChooser_Cancel_Params; break; case kFakeBluetoothChooser_Rescan_Name: @@ -785,14 +651,6 @@ if (message.isResponse()) paramsClass = FakeBluetoothChooser_WaitForEvents_ResponseParams; break; - case kFakeBluetoothChooser_SelectPeripheral_Name: - if (message.isResponse()) - paramsClass = FakeBluetoothChooser_SelectPeripheral_ResponseParams; - break; - case kFakeBluetoothChooser_Cancel_Name: - if (message.isResponse()) - paramsClass = FakeBluetoothChooser_Cancel_ResponseParams; - break; case kFakeBluetoothChooser_Rescan_Name: if (message.isResponse()) paramsClass = FakeBluetoothChooser_Rescan_ResponseParams; diff --git a/resources/chromium/web-bluetooth-test.js b/resources/chromium/web-bluetooth-test.js index e08c8c4afa2e80..6dd176f4713b17 100644 --- a/resources/chromium/web-bluetooth-test.js +++ b/resources/chromium/web-bluetooth-test.js @@ -489,6 +489,21 @@ class FakeChooser { Mojo.bindInterface(content.mojom.FakeBluetoothChooser.name, mojo.makeRequest(this.fake_bluetooth_chooser_ptr_).handle, 'process'); } + + async selectPeripheral(peripheral) { + if (!(peripheral instanceof FakePeripheral)) { + throw '|peripheral| must be an instance of FakePeripheral'; + } + await this.fake_bluetooth_chooser_ptr_.selectPeripheral(peripheral.address); + } + + async cancel() { + await this.fake_bluetooth_chooser_ptr_.cancel(); + } + + async rescan() { + await this.fake_bluetooth_chooser_ptr_.rescan(); + } } // If this line fails, it means that current environment does not support the