Chromium Code Reviews| Index: chrome/renderer/resources/extensions/experimental.usb_custom_bindings.js |
| diff --git a/chrome/renderer/resources/extensions/experimental.usb_custom_bindings.js b/chrome/renderer/resources/extensions/experimental.usb_custom_bindings.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..758af527709705aa86349caf55c90d90d45854cb |
| --- /dev/null |
| +++ b/chrome/renderer/resources/extensions/experimental.usb_custom_bindings.js |
| @@ -0,0 +1,46 @@ |
| +// Copyright (c) 2012 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. |
| + |
| +// TODO(gdk): This all looks very similar to the socket custom bindings, and for |
| +// a good reason, because they essentially do the same work. Refactor onEvent |
| +// bindings out of a per-extension mechanism into a generalized mechanism. |
|
asargent_no_longer_on_chrome
2012/04/26 21:21:45
Oh, I see you've got the same idea. =)
|
| + |
| + var experimentalUsbNatives = requireNative('experimental_usb'); |
| + var GetNextUsbEventId = experimentalUsbNatives.GetNextUsbEventId; |
| + |
| + var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); |
| + var sendRequest = require('sendRequest').sendRequest; |
| + var lazyBG = requireNative('lazy_background_page'); |
| + |
| + chromeHidden.registerCustomHook('experimental.usb', function(api) { |
| + var apiFunctions = api.apiFunctions; |
| + |
| + apiFunctions.setHandleRequest('findDevice', function() { |
| + var args = arguments; |
| + if (args[2] && args[2].onEvent) { |
| + var id = GetNextUsbEventId(); |
| + args[2].srcId = id; |
| + chromeHidden.usb.handlers[id] = args[2].onEvent; |
| + lazyBG.IncrementKeepaliveCount(); |
| + } |
| + sendRequest(this.name, args, this.definition.parameters); |
| + return id; |
| + }); |
| + |
| + chromeHidden.usb = {}; |
| + chromeHidden.usb.handlers = {}; |
| + chrome.experimental.usb.onEvent.addListener(function(event) { |
| + var eventHandler = chromeHidden.usb.handlers[event.srcId]; |
| + if (eventHandler) { |
| + switch (event.type) { |
| + case 'transferComplete': |
| + eventHandler({resultCode: event.resultCode, data: event.data}); |
| + break; |
| + default: |
| + console.error('Unexpected UsbEvent, type ' + event.type); |
| + break; |
| + } |
| + } |
| + }); |
| + }); |