author | Brian Grinstead <bgrinstead@mozilla.com> |
Fri, 15 Aug 2014 07:52:08 -0500 | |
changeset 199811 | e57fe9c190ae5910b3ab7972c355484cabc1ea12 |
parent 199810 | b4ea3496213fbcc9705e9f0ce5d2f99b19d5f400 |
child 199812 | e0ffa340816c390ca8be43da8a0a5657b5c89435 |
push id | 27320 |
push user | ryanvm@gmail.com |
push date | Fri, 15 Aug 2014 20:23:01 +0000 |
treeherder | mozilla-central@b9da9928d061 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jwalker |
bugs | 1050442 |
milestone | 34.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/browser/devtools/framework/toolbox.js +++ b/browser/devtools/framework/toolbox.js @@ -259,26 +259,29 @@ Toolbox.prototype = { this._loadInitialZoom(); this.webconsolePanel = this.doc.querySelector("#toolbox-panel-webconsole"); this.webconsolePanel.height = Services.prefs.getIntPref(SPLITCONSOLE_HEIGHT_PREF); this.webconsolePanel.addEventListener("resize", this._saveSplitConsoleHeight); - let splitConsolePromise = promise.resolve(); - if (Services.prefs.getBoolPref(SPLITCONSOLE_ENABLED_PREF)) { - splitConsolePromise = this.openSplitConsole(); - } - let buttonsPromise = this._buildButtons(); this._telemetry.toolOpened("toolbox"); this.selectTool(this._defaultToolId).then(panel => { + + // Wait until the original tool is selected so that the split + // console input will receive focus. + let splitConsolePromise = promise.resolve(); + if (Services.prefs.getBoolPref(SPLITCONSOLE_ENABLED_PREF)) { + splitConsolePromise = this.openSplitConsole(); + } + promise.all([ splitConsolePromise, buttonsPromise ]).then(() => { this.emit("ready"); deferred.resolve(); }, deferred.reject); }); @@ -974,19 +977,19 @@ Toolbox.prototype = { let iframe = this.doc.getElementById("toolbox-panel-iframe-" + id); iframe.focus(); }, /** * Focus split console's input line */ focusConsoleInput: function() { - let hud = this.getPanel("webconsole").hud; - if (hud && hud.jsterm) { - hud.jsterm.inputNode.focus(); + let consolePanel = this.getPanel("webconsole"); + if (consolePanel) { + consolePanel.focusInput(); } }, /** * If the console is split and we are focusing an element outside * of the console, then store the newly focused element, so that * it can be restored once the split console closes. */
--- a/browser/devtools/webconsole/test/browser_webconsole_split_persist.js +++ b/browser/devtools/webconsole/test/browser_webconsole_split_persist.js @@ -30,16 +30,22 @@ function test() { info("Opening a tab while there is a true user setting on split console pref"); let {tab} = yield loadTab(TEST_URI); let target = TargetFactory.forTab(tab); toolbox = yield gDevTools.showToolbox(target, "inspector"); ok(toolbox.splitConsole, "Split console is visible by default."); is(getHeightPrefValue(), 200, "Height is set based on panel height after closing"); + // Use the binding element since jsterm.inputNode is a XUL textarea element. + let activeElement = getActiveElement(toolbox.doc); + activeElement = activeElement.ownerDocument.getBindingParent(activeElement); + let inputNode = toolbox.getPanel("webconsole").hud.jsterm.inputNode; + is(activeElement, inputNode, "Split console input is focused by default"); + toolbox.webconsolePanel.height = 1; ok (toolbox.webconsolePanel.clientHeight > 1, "The actual height of the console is bound with a min height"); toolbox.webconsolePanel.height = 10000; ok (toolbox.webconsolePanel.clientHeight < 10000, "The actual height of the console is bound with a max height"); @@ -58,16 +64,24 @@ function test() { toolbox = yield gDevTools.showToolbox(target, "inspector"); ok(!toolbox.splitConsole, "Split console is hidden by default."); ok(!getVisiblePrefValue(), "Visibility pref is false"); yield toolbox.destroy(); } + function getActiveElement(doc) { + let activeElement = doc.activeElement; + while (activeElement && activeElement.contentDocument) { + activeElement = activeElement.contentDocument.activeElement; + } + return activeElement; + } + function getVisiblePrefValue() { return Services.prefs.getBoolPref("devtools.toolbox.splitconsoleEnabled"); } function getHeightPrefValue() { return Services.prefs.getIntPref("devtools.toolbox.splitconsoleHeight"); }