author | Gijs Kruitbosch <gijskruitbosch@gmail.com> |
Fri, 18 Mar 2016 18:29:27 +0000 | |
changeset 289590 | 3169edcea9d93557be4168312fb784e86706d944 |
parent 289589 | 18fca568ae42914a5e3fe3bea594172e09a54070 |
child 289591 | 3dc5292ed66afbca801c33bff49c86154b3b3c24 |
push id | 30107 |
push user | cbook@mozilla.com |
push date | Tue, 22 Mar 2016 10:00:23 +0000 |
treeherder | mozilla-central@3587b25bae30 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | enndeakin |
bugs | 1254091 |
milestone | 48.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/testing/specialpowers/content/specialpowersAPI.js +++ b/testing/specialpowers/content/specialpowersAPI.js @@ -2,16 +2,18 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* This code is loaded in every child process that is started by mochitest in * order to be used as a replacement for UniversalXPConnect */ "use strict"; +var global = this; + var Ci = Components.interfaces; var Cc = Components.classes; var Cu = Components.utils; Cu.import("chrome://specialpowers/content/MockFilePicker.jsm"); Cu.import("chrome://specialpowers/content/MockColorPicker.jsm"); Cu.import("chrome://specialpowers/content/MockPermissionPrompt.jsm"); Cu.import("resource://gre/modules/Services.jsm"); @@ -1619,17 +1621,29 @@ SpecialPowersAPI.prototype = { return this.focusManager.focusedWindow; }, focus: function(aWindow) { // This is called inside TestRunner._makeIframe without aWindow, because of assertions in oop mochitests // With aWindow, it is called in SimpleTest.waitForFocus to allow popup window opener focus switching if (aWindow) aWindow.focus(); - sendAsyncMessage("SpecialPowers.Focus", {}); + var mm = global; + if (aWindow) { + try { + mm = aWindow.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDocShell) + .QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIContentFrameMessageManager); + } catch (ex) { + /* Ignore exceptions for e.g. XUL chrome windows from mochitest-chrome + * which won't have a message manager */ + } + } + mm.sendAsyncMessage("SpecialPowers.Focus", {}); }, getClipboardData: function(flavor, whichClipboard) { if (this._cb == null) this._cb = Components.classes["@mozilla.org/widget/clipboard;1"]. getService(Components.interfaces.nsIClipboard); if (whichClipboard === undefined) whichClipboard = this._cb.kGlobalClipboard;