From eebeb27495d797587b4bcbbdd2b78c34b19e6212 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Wed, 3 Jul 2013 14:10:52 -0700 Subject: [PATCH 1/8] Bug 889526 - Improve reportError so that it will add a stack trace if one is available; r=past --- toolkit/devtools/server/actors/script.js | 25 ++++++++++++------------ 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/toolkit/devtools/server/actors/script.js b/toolkit/devtools/server/actors/script.js index cc914bba6dc3..89f794998b6e 100644 --- a/toolkit/devtools/server/actors/script.js +++ b/toolkit/devtools/server/actors/script.js @@ -280,10 +280,7 @@ ThreadActor.prototype = { resolve(onPacket(packet)).then(this.conn.send.bind(this.conn)); return this._nest(); } catch(e) { - let msg = "Got an exception during TA__pauseAndRespond: " + e + - ": " + e.stack; - Cu.reportError(msg); - dumpn(msg); + reportError(e, "Got an exception during TA__pauseAndRespond: "); return undefined; } }, @@ -1241,8 +1238,7 @@ ThreadActor.prototype = { this.conn.send(packet); return this._nest(); } catch(e) { - Cu.reportError("Got an exception during TA_onExceptionUnwind: " + e + - ": " + e.stack); + reportError(e, "Got an exception during TA_onExceptionUnwind: "); return undefined; } }, @@ -1490,10 +1486,7 @@ SourceActor.prototype = { source: aSourceGrip }; }, (aError) => { - let msg = "Got an exception during SA_onSource: " + aError + - "\n" + aError.stack; - Cu.reportError(msg); - dumpn(msg); + reportError(aError, "Got an exception during SA_onSource: "); return { "from": this.actorID, "error": "loadSourceError", @@ -2924,8 +2917,14 @@ function convertToUnicode(aString, aCharset=null) { /** * Report the given error in the error console and to stdout. + * + * @param Error aError + * The error object you wish to report. + * @param String aPrefix + * An optional prefix for the reported error message. */ -function reportError(aError) { - Cu.reportError(aError); - dumpn(aError.message + ":\n" + aError.stack); +function reportError(aError, aPrefix="") { + let msg = prefix + aError.message + ":\n" + aError.stack; + Cu.reportError(msg); + dumpn(msg); } From 6666eafa4376f515aeba8f4ae91afe3763d22342 Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Thu, 4 Jul 2013 12:56:22 +0200 Subject: [PATCH 2/8] Bug 890112 - [OS.File] DirectoryIterator should correctly implement iterator interface; r=yoric --- toolkit/components/osfile/osfile_async_front.jsm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/toolkit/components/osfile/osfile_async_front.jsm b/toolkit/components/osfile/osfile_async_front.jsm index 2bd02d6abd59..d2d51bea82e8 100644 --- a/toolkit/components/osfile/osfile_async_front.jsm +++ b/toolkit/components/osfile/osfile_async_front.jsm @@ -718,6 +718,9 @@ let DirectoryIterator = function DirectoryIterator(path, options) { this._isClosed = false; }; DirectoryIterator.prototype = { + iterator: function () this, + __iterator__: function () this, + /** * Determine whether the directory exists. * From 734d371c3b3bc33fa7662364dedcfd9a0373b3fb Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Thu, 4 Jul 2013 12:56:22 +0200 Subject: [PATCH 3/8] Bug 886057 - Make sure frame tree is up-to-date before nsIDOMWindowUtils dispatches events via PresShell; r=smaug --- dom/base/nsDOMWindowUtils.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dom/base/nsDOMWindowUtils.cpp b/dom/base/nsDOMWindowUtils.cpp index ad7df4fcb6c3..267bc5b78ead 100644 --- a/dom/base/nsDOMWindowUtils.cpp +++ b/dom/base/nsDOMWindowUtils.cpp @@ -1746,6 +1746,8 @@ nsDOMWindowUtils::DispatchDOMEventViaPresShell(nsIDOMNode* aTarget, nsRefPtr targetShell = targetDoc->GetShell(); NS_ENSURE_STATE(targetShell); + targetDoc->FlushPendingNotifications(Flush_Layout); + nsEventStatus status = nsEventStatus_eIgnore; targetShell->HandleEventWithTarget(internalEvent, nullptr, content, &status); *aRetVal = (status != nsEventStatus_eConsumeNoDefault); From b781d179b5609639c25bcd0e3a6024eeabe83100 Mon Sep 17 00:00:00 2001 From: Tim Taubert Date: Thu, 4 Jul 2013 15:19:55 +0200 Subject: [PATCH 4/8] Backed out changeset 95e83b0f7cb2 (bug 888986) --- .../components/sessionstore/src/SessionStore.jsm | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/browser/components/sessionstore/src/SessionStore.jsm b/browser/components/sessionstore/src/SessionStore.jsm index 2fc6ba2c97ae..11932edd82a9 100644 --- a/browser/components/sessionstore/src/SessionStore.jsm +++ b/browser/components/sessionstore/src/SessionStore.jsm @@ -125,12 +125,6 @@ function debug(aMsg) { Services.console.logStringMessage(aMsg); } -function notifyAsync(aTopic) { - Services.tm.mainThread.dispatch(() => { - Services.obs.notifyObservers(null, aTopic, ""); - }, Ci.nsIThread.DISPATCH_NORMAL); -} - this.SessionStore = { get promiseInitialized() { return SessionStoreInternal.promiseInitialized.promise; @@ -770,7 +764,7 @@ let SessionStoreInternal = { this._initialState = null; // Nothing to restore now, notify observers things are complete. - notifyAsync(NOTIFY_WINDOWS_RESTORED); + Services.obs.notifyObservers(null, NOTIFY_WINDOWS_RESTORED, ""); } else { TelemetryTimestamps.add("sessionRestoreRestoring"); // make sure that the restored tabs are first in the window @@ -788,7 +782,7 @@ let SessionStoreInternal = { } else { // Nothing to restore, notify observers things are complete. - notifyAsync(NOTIFY_WINDOWS_RESTORED); + Services.obs.notifyObservers(null, NOTIFY_WINDOWS_RESTORED, ""); // the next delayed save request should execute immediately this._lastSaveTime -= this._interval; @@ -4323,8 +4317,9 @@ let SessionStoreInternal = { return; // This was the last window restored at startup, notify observers. - notifyAsync(this._browserSetState ? NOTIFY_BROWSER_STATE_RESTORED : - NOTIFY_WINDOWS_RESTORED); + Services.obs.notifyObservers(null, + this._browserSetState ? NOTIFY_BROWSER_STATE_RESTORED : NOTIFY_WINDOWS_RESTORED, + ""); this._browserSetState = false; this._restoreCount = -1; From d47beba39d9dfd7694d72eef37eb7f6f55c8c712 Mon Sep 17 00:00:00 2001 From: Girish Sharma Date: Sun, 30 Jun 2013 04:32:16 +0530 Subject: [PATCH 5/8] Bug 887256 - Show the 'Restart Now' link only once and reduce paddings and margins from Options Panel, r=jwalker --- browser/devtools/framework/toolbox-options.js | 12 ++++-------- browser/themes/linux/devtools/toolbox.css | 11 ++++++++--- browser/themes/osx/devtools/toolbox.css | 11 ++++++++--- browser/themes/windows/devtools/toolbox.css | 11 ++++++++--- 4 files changed, 28 insertions(+), 17 deletions(-) diff --git a/browser/devtools/framework/toolbox-options.js b/browser/devtools/framework/toolbox-options.js index 845c33d01b48..64ca2f242879 100644 --- a/browser/devtools/framework/toolbox-options.js +++ b/browser/devtools/framework/toolbox-options.js @@ -181,19 +181,15 @@ OptionsPanel.prototype = { }, /** - * Hides any label in a box with class "hidden-labels-box" at page load. The - * labels are shown again when the user click on the checkbox in the box. + * Handles checkbox click inside hbox with class "hidden-labels-box". The + * labels inside the hbox are shown again when the user click on the checkbox + * in the box. */ prepareRestartPreferences: function() { - let labels = this.panelDoc.querySelectorAll(".hidden-labels-box > label"); - for (let label of labels) { - label.style.display = "none"; - } let checkboxes = this.panelDoc.querySelectorAll(".hidden-labels-box > checkbox"); for (let checkbox of checkboxes) { checkbox.addEventListener("command", function(target) { - target.nextSibling.style.display = ""; - target.nextSibling.nextSibling.style.display = ""; + target.parentNode.classList.toggle("visible"); }.bind(null, checkbox)); } }, diff --git a/browser/themes/linux/devtools/toolbox.css b/browser/themes/linux/devtools/toolbox.css index 535998ff909c..5843f48a480d 100644 --- a/browser/themes/linux/devtools/toolbox.css +++ b/browser/themes/linux/devtools/toolbox.css @@ -253,20 +253,20 @@ } .options-vertical-pane { - margin: 15px; + margin: 5px; width: calc(50% - 30px); min-width: 400px; -moz-padding-start: 5px; } .options-vertical-pane > label { - padding: 5px 0; + padding: 2px 0; font-size: 1.4rem; } .options-groupbox { -moz-margin-start: 15px; - padding: 4px; + padding: 2px; } .options-groupbox > * { @@ -285,3 +285,8 @@ padding: 3px 0 0 !important; /* To align it with the checkbox */ font-style: italic; } + +.hidden-labels-box:not(.visible) > label, +.hidden-labels-box.visible ~ .hidden-labels-box > label:last-child { + display: none; +} diff --git a/browser/themes/osx/devtools/toolbox.css b/browser/themes/osx/devtools/toolbox.css index 52bf0751268f..779efdef23be 100644 --- a/browser/themes/osx/devtools/toolbox.css +++ b/browser/themes/osx/devtools/toolbox.css @@ -239,20 +239,20 @@ } .options-vertical-pane { - margin: 15px; + margin: 5px; width: calc(50% - 30px); min-width: 400px; -moz-padding-start: 5px; } .options-vertical-pane > label { - padding: 5px 0; + padding: 2px 0; font-size: 1.4rem; } .options-groupbox { -moz-margin-start: 15px; - padding: 4px; + padding: 2px; } .options-groupbox > * { @@ -271,3 +271,8 @@ padding: 3px 0 0 !important; /* To align it with the checkbox */ font-style: italic; } + +.hidden-labels-box:not(.visible) > label, +.hidden-labels-box.visible ~ .hidden-labels-box > label:last-child { + display: none; +} diff --git a/browser/themes/windows/devtools/toolbox.css b/browser/themes/windows/devtools/toolbox.css index ef71b811a07d..77a8e082a118 100644 --- a/browser/themes/windows/devtools/toolbox.css +++ b/browser/themes/windows/devtools/toolbox.css @@ -248,20 +248,20 @@ } .options-vertical-pane { - margin: 15px; + margin: 5px; width: calc(50% - 30px); min-width: 400px; -moz-padding-start: 5px; } .options-vertical-pane > label { - padding: 5px 0; + padding: 2px 0; font-size: 1.4rem; } .options-groupbox { -moz-margin-start: 15px; - padding: 4px; + padding: 2px; } .options-groupbox > * { @@ -280,3 +280,8 @@ padding: 3px 0 0 !important; /* To align it with the checkbox */ font-style: italic; } + +.hidden-labels-box:not(.visible) > label, +.hidden-labels-box.visible ~ .hidden-labels-box > label:last-child { + display: none; +} From 5d133b86f8519cfcd5f213f997123afaa0ebd6a9 Mon Sep 17 00:00:00 2001 From: Michael Ratcliffe Date: Mon, 1 Jul 2013 11:59:28 +0100 Subject: [PATCH 6/8] Bug 852996 - MarkupView leaks the whole Inspector after being closed r=dcamp --- browser/devtools/markupview/markup-view.js | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/browser/devtools/markupview/markup-view.js b/browser/devtools/markupview/markup-view.js index 6f1888d3b152..bc59d3416b86 100644 --- a/browser/devtools/markupview/markup-view.js +++ b/browser/devtools/markupview/markup-view.js @@ -312,11 +312,13 @@ MarkupView.prototype = { } else { var container = new RootContainer(this, aNode); this._elt.appendChild(container.elt); + + if (this._rootNode) { + this._rootNode.removeEventListener("load", this, true); + } + this._rootNode = aNode; - aNode.addEventListener("load", function MP_watch_contentLoaded(aEvent) { - // Fake a childList mutation here. - this._mutationObserver([{target: aEvent.target, type: "childList"}]); - }.bind(this), true); + aNode.addEventListener("load", this, true); } this._containers.set(aNode, container); @@ -334,6 +336,11 @@ MarkupView.prototype = { return container; }, + handleEvent: function MT_handleEvent(aEvent) { + // Fake a childList mutation here. + this._mutationObserver([{target: aEvent.target, type: "childList"}]); + }, + /** * Mutation observer used for included nodes. */ @@ -648,7 +655,7 @@ MarkupView.prototype = { this._frame.contentWindow.removeEventListener("underflow", this._boundResizePreview, true); delete this._boundUpdatePreview; - this._frame.contentWindow.removeEventListener("keydown", this._boundKeyDown, true); + this._frame.contentWindow.removeEventListener("keydown", this._boundKeyDown, false); delete this._boundKeyDown; this._inspector.selection.off("new-node", this._boundOnNewSelection); @@ -659,6 +666,11 @@ MarkupView.prototype = { delete this._containers; this._observer.disconnect(); delete this._observer; + + if (this._rootNode) { + this._rootNode.removeEventListener("load", this, true); + delete this._rootNode; + } }, /** From 78e0f9671f45c6e20a51e0e9bdcfb13194d10a8a Mon Sep 17 00:00:00 2001 From: Paul Rouget Date: Wed, 3 Jul 2013 06:49:00 +0200 Subject: [PATCH 7/8] Bug 851296 - Intermittent devtools/responsivedesign/test/browser_responsiveui.js. r=jwalker --- .../responsivedesign/test/browser_responsiveui.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/browser/devtools/responsivedesign/test/browser_responsiveui.js b/browser/devtools/responsivedesign/test/browser_responsiveui.js index 6068d1b08b9e..9d88fa37154c 100644 --- a/browser/devtools/responsivedesign/test/browser_responsiveui.js +++ b/browser/devtools/responsivedesign/test/browser_responsiveui.js @@ -121,11 +121,17 @@ function test() { widthBeforeClose = content.innerWidth; heightBeforeClose = content.innerHeight; - mgr.once("off", function() {executeSoon(restart)}); + info("XXX BUG 851296: instance.closing: " + !!instance.closing); + + mgr.once("off", function() { + info("XXX BUG 851296: 'off' received."); + executeSoon(restart); + }); EventUtils.synthesizeKey("VK_ESCAPE", {}); } function restart() { + info("XXX BUG 851296: restarting."); mgr.once("on", function() {executeSoon(onUIOpen2)}); synthesizeKeyFromKeyTag("key_responsiveUI"); } From 1be74f5364bb38f79f2cbf874db12637f3a4fba7 Mon Sep 17 00:00:00 2001 From: Cameron Paul Date: Wed, 3 Jul 2013 14:58:00 +0200 Subject: [PATCH 8/8] Bug 840241 - Changed inspect button to toggle highlighter between locked/unlocked states. r=paul --- browser/devtools/inspector/highlighter.js | 16 +++++++++++++- browser/devtools/inspector/inspector.xul | 2 +- .../test/browser_inspector_highlighter.js | 21 +++++++++++++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/browser/devtools/inspector/highlighter.js b/browser/devtools/inspector/highlighter.js index dfba4a03facd..35850cdcc139 100644 --- a/browser/devtools/inspector/highlighter.js +++ b/browser/devtools/inspector/highlighter.js @@ -95,6 +95,7 @@ Highlighter.prototype = { _init: function Highlighter__init() { + this.toggleLockState = this.toggleLockState.bind(this); this.unlockAndFocus = this.unlockAndFocus.bind(this); this.updateInfobar = this.updateInfobar.bind(this); this.highlight = this.highlight.bind(this); @@ -318,6 +319,19 @@ Highlighter.prototype = { this.emit("unlocked"); }, + /** + * Toggle between locked and unlocked + */ + toggleLockState: function() { + if (this.locked) { + this.startNode = this.selection.node; + this.unlockAndFocus(); + } else { + this.selection.setNode(this.startNode); + this.lock(); + } + }, + /** * Focus the browser before unlocking. */ @@ -417,7 +431,7 @@ Highlighter.prototype = { this.inspectButton.className = "highlighter-nodeinfobar-button highlighter-nodeinfobar-inspectbutton" let toolbarInspectButton = this.inspector.panelDoc.getElementById("inspector-inspect-toolbutton"); this.inspectButton.setAttribute("tooltiptext", toolbarInspectButton.getAttribute("tooltiptext")); - this.inspectButton.addEventListener("command", this.unlockAndFocus); + this.inspectButton.addEventListener("command", this.toggleLockState); let nodemenu = this.chromeDoc.createElement("toolbarbutton"); nodemenu.setAttribute("type", "menu"); diff --git a/browser/devtools/inspector/inspector.xul b/browser/devtools/inspector/inspector.xul index 130f1b75bbb1..aaad67530a09 100644 --- a/browser/devtools/inspector/inspector.xul +++ b/browser/devtools/inspector/inspector.xul @@ -72,7 +72,7 @@ tooltiptext="&inspector.selectButton.tooltip;" class="devtools-toolbarbutton" hidden="true" - oncommand="inspector.highlighter.unlockAndFocus()"/> + oncommand="inspector.highlighter.toggleLockState()"/>