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; |
+ } |
+ } |
+ }); |
+ }); |