Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(628)

Unified Diff: chrome/renderer/resources/extensions/input.ime_custom_bindings.js

Issue 2945493002: [Extensions Bindings] Update IME custom bindings (Closed)
Patch Set: s/Dispatch/dispatch() Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/resources/extensions/input.ime_custom_bindings.js
diff --git a/chrome/renderer/resources/extensions/input.ime_custom_bindings.js b/chrome/renderer/resources/extensions/input.ime_custom_bindings.js
index 512c4e848abf5d6e0f485631536fc8d53f4dc75f..f3daa9c4bc1aca7c565665de2dfb50ef27826cdd 100644
--- a/chrome/renderer/resources/extensions/input.ime_custom_bindings.js
+++ b/chrome/renderer/resources/extensions/input.ime_custom_bindings.js
@@ -5,41 +5,48 @@
// Custom binding for the input ime API. Only injected into the
// v8 contexts for extensions which have permission for the API.
-var binding = require('binding').Binding.create('input.ime');
+var binding = apiBridge || require('binding').Binding.create('input.ime');
+var appWindowNatives = requireNative('app_window_natives');
+var registerArgumentMassager = bindingUtil ?
+ $Function.bind(bindingUtil.registerEventArgumentMassager, bindingUtil) :
+ require('event_bindings').registerArgumentMassager;
-var Event = require('event_bindings').Event;
+// TODO(crbug.com/733825): These bindings have some issues.
-var appWindowNatives = requireNative('app_window_natives');
+var inputIme;
+registerArgumentMassager('input.ime.onKeyEvent',
+ function(args, dispatch) {
+ var keyData = args[1];
+ var result = false;
+ try {
+ // dispatch() is weird - it returns an object {results: array<results>} iff
+ // there is at least one result value that !== undefined. Since onKeyEvent
+ // has a maximum of one listener, we know that any result we find is the one
+ // we're interested in.
+ var dispatchResult = dispatch(args);
+ if (dispatchResult && dispatchResult.results)
+ result = dispatchResult.results[0];
+ } catch (e) {
+ console.error('Error in event handler for onKeyEvent: ' + e.stack);
+ }
+ if (!inputIme.onKeyEvent.async)
+ inputIme.keyEventHandled(keyData.requestId, result);
+});
binding.registerCustomHook(function(api) {
- var input_ime = api.compiledApi;
-
- input_ime.onKeyEvent.dispatchToListener = function(callback, args) {
- var engineID = args[0];
- var keyData = args[1];
-
- var result = false;
- try {
- result = $Function.call(Event.prototype.dispatchToListener,
- this, callback, args);
- } catch (e) {
- console.error('Error in event handler for onKeyEvent: ' + e.stack);
- }
- if (!input_ime.onKeyEvent.async) {
- input_ime.keyEventHandled(keyData.requestId, result);
- }
- };
+ inputIme = api.compiledApi;
- input_ime.onKeyEvent.addListener = function(cb, opt_extraInfo) {
- input_ime.onKeyEvent.async = false;
+ var originalAddListener = inputIme.onKeyEvent.addListener;
+ inputIme.onKeyEvent.addListener = function(cb, opt_extraInfo) {
+ inputIme.onKeyEvent.async = false;
if (opt_extraInfo instanceof Array) {
for (var i = 0; i < opt_extraInfo.length; ++i) {
- if (opt_extraInfo[i] == "async") {
- input_ime.onKeyEvent.async = true;
+ if (opt_extraInfo[i] == 'async') {
+ inputIme.onKeyEvent.async = true;
}
}
}
- $Function.call(Event.prototype.addListener, this, cb);
+ $Function.call(originalAddListener, this, cb);
};
api.apiFunctions.setCustomCallback('createWindow',
@@ -57,4 +64,5 @@ binding.registerCustomHook(function(api) {
});
});
-exports.$set('binding', binding.generate());
+if (!apiBridge)
+ exports.$set('binding', binding.generate());
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698