Skip to content

Commit 2883baf

Browse files
committed
Firefox: fixing sendKeys throwing "cross-process JS call failed " in FF45
1 parent 65dbe9a commit 2883baf

File tree

3 files changed

+22
-19
lines changed

3 files changed

+22
-19
lines changed

javascript/firefox-driver/js/firefoxDriver.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1184,7 +1184,7 @@ FirefoxDriver.prototype.sendKeysToActiveElement = function(respond, parameters)
11841184
useElement = useElement.ownerDocument.getElementsByTagName('html')[0];
11851185
}
11861186

1187-
Utils.type(respond.session.getDocument(), useElement, parameters.value.join(''),
1187+
Utils.type(respond.session, useElement, parameters.value.join(''),
11881188
this.jsTimer, false /*release modifiers*/, this.modifierKeysState);
11891189

11901190
respond.send();

javascript/firefox-driver/js/utils.js

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,10 @@ Utils.initWebLoadingListener = function(respond, opt_window) {
167167
}, respond.session.getPageLoadTimeout(), window);
168168
};
169169

170-
Utils.type = function(doc, element, text, jsTimer, releaseModifiers,
170+
Utils.type = function(session, element, text, jsTimer, releaseModifiers,
171171
opt_keysState) {
172172

173+
var doc = session.getDocument();
173174
// For consistency between native and synthesized events, convert common
174175
// escape sequences to their Key enum aliases.
175176
text = text.replace(/[\b]/g, '\uE003'). // DOM_VK_BACK_SPACE
@@ -200,25 +201,25 @@ Utils.type = function(doc, element, text, jsTimer, releaseModifiers,
200201
if (c == '\uE000') {
201202
if (controlKey) {
202203
var kCode = Components.interfaces.nsIDOMKeyEvent.DOM_VK_CONTROL;
203-
Utils.keyEvent(doc, element, 'keyup', kCode, 0,
204+
Utils.keyEvent(session, element, 'keyup', kCode, 0,
204205
controlKey = false, shiftKey, altKey, metaKey);
205206
}
206207

207208
if (shiftKey) {
208209
var kCode = Components.interfaces.nsIDOMKeyEvent.DOM_VK_SHIFT;
209-
Utils.keyEvent(doc, element, 'keyup', kCode, 0,
210+
Utils.keyEvent(session, element, 'keyup', kCode, 0,
210211
controlKey, shiftKey = false, altKey, metaKey);
211212
}
212213

213214
if (altKey) {
214215
var kCode = Components.interfaces.nsIDOMKeyEvent.DOM_VK_ALT;
215-
Utils.keyEvent(doc, element, 'keyup', kCode, 0,
216+
Utils.keyEvent(session, element, 'keyup', kCode, 0,
216217
controlKey, shiftKey, altKey = false, metaKey);
217218
}
218219

219220
if (metaKey) {
220221
var kCode = Components.interfaces.nsIDOMKeyEvent.DOM_VK_META;
221-
Utils.keyEvent(doc, element, 'keyup', kCode, 0,
222+
Utils.keyEvent(session, element, 'keyup', kCode, 0,
222223
controlKey, shiftKey, altKey, metaKey = false);
223224
}
224225

@@ -428,7 +429,7 @@ Utils.type = function(doc, element, text, jsTimer, releaseModifiers,
428429
// generate modifier key event if needed, and continue
429430

430431
if (modifierEvent) {
431-
Utils.keyEvent(doc, element, modifierEvent, keyCode, 0,
432+
Utils.keyEvent(session, element, modifierEvent, keyCode, 0,
432433
controlKey, shiftKey, altKey, metaKey);
433434
continue;
434435
}
@@ -442,7 +443,7 @@ Utils.type = function(doc, element, text, jsTimer, releaseModifiers,
442443

443444
if (needsShift && !shiftKey) {
444445
var kCode = Components.interfaces.nsIDOMKeyEvent.DOM_VK_SHIFT;
445-
Utils.keyEvent(doc, element, 'keydown', kCode, 0,
446+
Utils.keyEvent(session, element, 'keydown', kCode, 0,
446447
controlKey, true, altKey, metaKey);
447448
Utils.shiftCount += 1;
448449
}
@@ -473,22 +474,22 @@ Utils.type = function(doc, element, text, jsTimer, releaseModifiers,
473474
}
474475

475476
var accepted =
476-
Utils.keyEvent(doc, element, 'keydown', keyCode, 0,
477+
Utils.keyEvent(session, element, 'keydown', keyCode, 0,
477478
controlKey, needsShift || shiftKey, altKey, metaKey);
478479

479480
if (accepted) {
480-
Utils.keyEvent(doc, element, 'keypress', pressCode, charCode,
481+
Utils.keyEvent(session, element, 'keypress', pressCode, charCode,
481482
controlKey, needsShift || shiftKey, altKey, metaKey);
482483
}
483484

484-
Utils.keyEvent(doc, element, 'keyup', keyCode, 0,
485+
Utils.keyEvent(session, element, 'keyup', keyCode, 0,
485486
controlKey, needsShift || shiftKey, altKey, metaKey);
486487

487488
// shift up if needed
488489

489490
if (needsShift && !shiftKey) {
490491
var kCode = Components.interfaces.nsIDOMKeyEvent.DOM_VK_SHIFT;
491-
Utils.keyEvent(doc, element, 'keyup', kCode, 0,
492+
Utils.keyEvent(session, element, 'keyup', kCode, 0,
492493
controlKey, false, altKey, metaKey);
493494
}
494495
}
@@ -497,25 +498,25 @@ Utils.type = function(doc, element, text, jsTimer, releaseModifiers,
497498

498499
if (controlKey && releaseModifiers) {
499500
var kCode = Components.interfaces.nsIDOMKeyEvent.DOM_VK_CONTROL;
500-
Utils.keyEvent(doc, element, 'keyup', kCode, 0,
501+
Utils.keyEvent(session, element, 'keyup', kCode, 0,
501502
controlKey = false, shiftKey, altKey, metaKey);
502503
}
503504

504505
if (shiftKey && releaseModifiers) {
505506
var kCode = Components.interfaces.nsIDOMKeyEvent.DOM_VK_SHIFT;
506-
Utils.keyEvent(doc, element, 'keyup', kCode, 0,
507+
Utils.keyEvent(session, element, 'keyup', kCode, 0,
507508
controlKey, shiftKey = false, altKey, metaKey);
508509
}
509510

510511
if (altKey && releaseModifiers) {
511512
var kCode = Components.interfaces.nsIDOMKeyEvent.DOM_VK_ALT;
512-
Utils.keyEvent(doc, element, 'keyup', kCode, 0,
513+
Utils.keyEvent(session, element, 'keyup', kCode, 0,
513514
controlKey, shiftKey, altKey = false, metaKey);
514515
}
515516

516517
if (metaKey && releaseModifiers) {
517518
var kCode = Components.interfaces.nsIDOMKeyEvent.DOM_VK_META;
518-
Utils.keyEvent(doc, element, 'keyup', kCode, 0,
519+
Utils.keyEvent(session, element, 'keyup', kCode, 0,
519520
controlKey, shiftKey, altKey, metaKey = false);
520521
}
521522

@@ -528,8 +529,10 @@ Utils.type = function(doc, element, text, jsTimer, releaseModifiers,
528529
};
529530

530531

531-
Utils.keyEvent = function(doc, element, type, keyCode, charCode,
532+
Utils.keyEvent = function(session, element, type, keyCode, charCode,
532533
controlState, shiftState, altState, metaState) {
534+
535+
var doc = session.getDocument();
533536
// Silently bail out if the element is no longer attached to the DOM.
534537
var isAttachedToDom = goog.dom.getAncestor(element, function(node) {
535538
return node === element.ownerDocument.documentElement;
@@ -539,7 +542,7 @@ Utils.keyEvent = function(doc, element, type, keyCode, charCode,
539542
return false;
540543
}
541544

542-
var windowUtils = doc.defaultView
545+
var windowUtils = session.getChromeWindow()
543546
.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
544547
.getInterface(Components.interfaces.nsIDOMWindowUtils);
545548

javascript/firefox-driver/js/wrappedElement.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ WebElement.sendKeysToElement = function(respond, parameters) {
173173
}
174174

175175
try {
176-
Utils.type(respond.session.getDocument(), use, parameters.value.join(''),
176+
Utils.type(respond.session, use, parameters.value.join(''),
177177
originalDriver.jsTimer, true /*release modifiers*/);
178178
respond.send();
179179
} catch (ex) {

0 commit comments

Comments
 (0)