diff --git a/browser/components/preferences/in-content/subdialogs.js b/browser/components/preferences/in-content/subdialogs.js index 614d3319568..e0f06ac1819 100644 --- a/browser/components/preferences/in-content/subdialogs.js +++ b/browser/components/preferences/in-content/subdialogs.js @@ -37,6 +37,12 @@ let gSubDialog = { // Wait for the stylesheets injected during DOMContentLoaded to load before showing the dialog // otherwise there is a flicker of the stylesheet applying. this._frame.addEventListener("load", this._onLoad.bind(this)); + + chromeBrowser.addEventListener("unload", function(aEvent) { + if (aEvent.target.location.href != "about:blank") { + this.close(); + } + }.bind(this), true); }, uninit: function() { diff --git a/browser/components/preferences/in-content/tests/browser_subdialogs.js b/browser/components/preferences/in-content/tests/browser_subdialogs.js index cea481477b3..914a6273bfe 100644 --- a/browser/components/preferences/in-content/tests/browser_subdialogs.js +++ b/browser/components/preferences/in-content/tests/browser_subdialogs.js @@ -76,7 +76,7 @@ let gTests = [{ dialog.document.documentElement.cancelDialog(); let closingEvent = yield closingPromise; - ise(closingEvent.detail.button, "cancel", "closing event should indicate button was 'accept'"); + ise(closingEvent.detail.button, "cancel", "closing event should indicate button was 'cancel'"); yield deferredClose.promise; ise(rv.acceptCount, 0, "return value should NOT have been updated"); @@ -118,6 +118,22 @@ let gTests = [{ ise(rv.acceptCount, 0, "return value should NOT have been updated"); }, }, +{ + desc: "Check that 'back' navigation will close the dialog", + run: function* () { + let rv = { acceptCount: 0 }; + let deferredClose = Promise.defer(); + let dialogPromise = openAndLoadSubDialog(gDialogURL, null, rv, + (aEvent) => dialogClosingCallback(deferredClose, aEvent)); + let dialog = yield dialogPromise; + + info("cancelling the dialog"); + content.gSubDialog._frame.goBack(); + + yield deferredClose.promise; + ise(rv.acceptCount, 0, "return value should NOT have been updated"); + }, +}, { desc: "Hitting escape in the dialog", run: function* () {