diff -r 000000000000 -r 6474c204b198 browser/devtools/scratchpad/test/browser_scratchpad_browser_last_window_closing.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/scratchpad/test/browser_scratchpad_browser_last_window_closing.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,79 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +const BUTTON_POSITION_CANCEL = 1; +const BUTTON_POSITION_DONT_SAVE = 2; + + +function test() +{ + waitForExplicitFinish(); + + // Observer must be attached *before* Scratchpad is opened. + CloseObserver.init(); + + gBrowser.selectedTab = gBrowser.addTab(); + gBrowser.selectedBrowser.addEventListener("load", function onTabLoad() { + gBrowser.selectedBrowser.removeEventListener("load", onTabLoad, true); + openScratchpad(runTests); + }, true); + + content.location = "data:text/html;charset=utf8,
test browser last window closing
"; +} + + + +function runTests({ Scratchpad }) +{ + let browser = Services.wm.getEnumerator("navigator:browser").getNext(); + let oldPrompt = Services.prompt; + let button; + + Services.prompt = { + confirmEx: () => button + }; + + + Scratchpad.dirty = true; + + // Test canceling close. + button = BUTTON_POSITION_CANCEL; + CloseObserver.expectedValue = true; + browser.BrowserTryToCloseWindow(); + + // Test accepting close. + button = BUTTON_POSITION_DONT_SAVE; + CloseObserver.expectedValue = false; + browser.BrowserTryToCloseWindow(); + + // Test closing without prompt needed. + Scratchpad.dirty = false; + browser.BrowserTryToCloseWindow(); + + Services.prompt = oldPrompt; + CloseObserver.uninit(); + finish(); +} + + +let CloseObserver = { + expectedValue: null, + init: function() + { + Services.obs.addObserver(this, "browser-lastwindow-close-requested", false); + }, + + observe: function(aSubject) + { + aSubject.QueryInterface(Ci.nsISupportsPRBool); + let message = this.expectedValue ? "close" : "stay open"; + ok(this.expectedValue === aSubject.data, "Expected browser to " + message); + aSubject.data = true; + }, + + uninit: function() + { + Services.obs.removeObserver(this, "browser-lastwindow-close-requested", false); + }, +};