| Index: chrome/renderer/resources/extensions/experimental.bluetooth_custom_bindings.js
|
| diff --git a/chrome/renderer/resources/extensions/experimental.bluetooth_custom_bindings.js b/chrome/renderer/resources/extensions/experimental.bluetooth_custom_bindings.js
|
| index 4763dd6381bc667186709dda19f31a076c1f3ed1..76f525b84bcfd31173dbe67144098689e0f7b685 100644
|
| --- a/chrome/renderer/resources/extensions/experimental.bluetooth_custom_bindings.js
|
| +++ b/chrome/renderer/resources/extensions/experimental.bluetooth_custom_bindings.js
|
| @@ -6,6 +6,7 @@
|
|
|
| var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
|
| var sendRequest = require('sendRequest').sendRequest;
|
| +var lastError = require('last_error');
|
|
|
| // Use custom bindings to create an undocumented event listener that will
|
| // receive events about device discovery and call the event listener that was
|
| @@ -14,26 +15,47 @@ chromeHidden.registerCustomHook('experimental.bluetooth', function(api) {
|
| var apiFunctions = api.apiFunctions;
|
|
|
| chromeHidden.bluetooth = {};
|
| - chromeHidden.bluetooth.handler = null;
|
| + chromeHidden.bluetooth.deviceDiscoveredHandler = null;
|
| chromeHidden.bluetooth.onDeviceDiscovered =
|
| new chrome.Event("experimental.bluetooth.onDeviceDiscovered");
|
|
|
| - function deviceDiscoveredListener(device) {
|
| - if (chromeHidden.bluetooth.handler != null)
|
| - chromeHidden.bluetooth.handler(device);
|
| + function clearDeviceDiscoveredHandler() {
|
| + chromeHidden.bluetooth.onDeviceDiscovered.removeListener(
|
| + chromeHidden.bluetooth.deviceDiscoveredHandler);
|
| + chromeHidden.bluetooth.deviceDiscoveredHandler = null;
|
| }
|
| - chromeHidden.bluetooth.onDeviceDiscovered.addListener(
|
| - deviceDiscoveredListener);
|
|
|
| - apiFunctions.setHandleRequest('startDiscovery', function() {
|
| - var args = arguments;
|
| - if (args.length > 0 && args[0] && args[0].deviceCallback) {
|
| - chromeHidden.bluetooth.handler = args[0].deviceCallback;
|
| - }
|
| - sendRequest(this.name, args, this.definition.parameters);
|
| - });
|
| - apiFunctions.setHandleRequest('stopDiscovery', function() {
|
| - chromeHidden.bluetooth.handler = null;
|
| - sendRequest(this.name, arguments, this.definition.parameters);
|
| - });
|
| + apiFunctions.setHandleRequest('startDiscovery',
|
| + function() {
|
| + var args = arguments;
|
| + if (args.length > 0 && args[0] && args[0].deviceCallback) {
|
| + chromeHidden.bluetooth.deviceDiscoveredHandler =
|
| + args[0].deviceCallback;
|
| + chromeHidden.bluetooth.onDeviceDiscovered.addListener(
|
| + chromeHidden.bluetooth.deviceDiscoveredHandler);
|
| + sendRequest(this.name,
|
| + args,
|
| + this.definition.parameters,
|
| + {customCallback:this.customCallback});
|
| + } else {
|
| + if (typeof(args[args.length-1]) == "function") {
|
| + var callback = args[args.length-1];
|
| + lastError.set("deviceCallback is required in the options object");
|
| + callback();
|
| + return;
|
| + }
|
| + }
|
| + });
|
| + apiFunctions.setCustomCallback('startDiscovery',
|
| + function(name, request, response) {
|
| + if (chrome.runtime.lastError) {
|
| + clearDeviceDiscoveredHandler();
|
| + return;
|
| + }
|
| + });
|
| + apiFunctions.setHandleRequest('stopDiscovery',
|
| + function() {
|
| + clearDeviceDiscoveredHandler();
|
| + sendRequest(this.name, arguments, this.definition.parameters);
|
| + });
|
| });
|
|
|