diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /browser/base/content/test/general/browser_windowactivation.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'browser/base/content/test/general/browser_windowactivation.js')
-rw-r--r-- | browser/base/content/test/general/browser_windowactivation.js | 183 |
1 files changed, 183 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_windowactivation.js b/browser/base/content/test/general/browser_windowactivation.js new file mode 100644 index 000000000..ae4ba75dc --- /dev/null +++ b/browser/base/content/test/general/browser_windowactivation.js @@ -0,0 +1,183 @@ +/* + * This test checks that window activation state is set properly with multiple tabs. + */ + +var testPage = "data:text/html,<body><style>:-moz-window-inactive { background-color: red; }</style><div id='area'></div></body>"; + +var colorChangeNotifications = 0; +var otherWindow; + +var browser1, browser2; + +function test() { + waitForExplicitFinish(); + waitForFocus(reallyRunTests); +} + +function reallyRunTests() { + + let tab1 = gBrowser.addTab(); + let tab2 = gBrowser.addTab(); + browser1 = gBrowser.getBrowserForTab(tab1); + browser2 = gBrowser.getBrowserForTab(tab2); + + gURLBar.focus(); + + var loadCount = 0; + function check() + { + // wait for both tabs to load + if (++loadCount != 2) { + return; + } + + browser1.removeEventListener("load", check, true); + browser2.removeEventListener("load", check, true); + + sendGetBackgroundRequest(true); + } + + // The test performs four checks, using -moz-window-inactive on two child tabs. + // First, the initial state should be transparent. The second check is done + // while another window is focused. The third check is done after that window + // is closed and the main window focused again. The fourth check is done after + // switching to the second tab. + window.messageManager.addMessageListener("Test:BackgroundColorChanged", function(message) { + colorChangeNotifications++; + + switch (colorChangeNotifications) { + case 1: + is(message.data.color, "transparent", "first window initial"); + break; + case 2: + is(message.data.color, "transparent", "second window initial"); + runOtherWindowTests(); + break; + case 3: + is(message.data.color, "rgb(255, 0, 0)", "first window lowered"); + break; + case 4: + is(message.data.color, "rgb(255, 0, 0)", "second window lowered"); + sendGetBackgroundRequest(true); + otherWindow.close(); + break; + case 5: + is(message.data.color, "transparent", "first window raised"); + break; + case 6: + is(message.data.color, "transparent", "second window raised"); + gBrowser.selectedTab = tab2; + break; + case 7: + is(message.data.color, "transparent", "first window after tab switch"); + break; + case 8: + is(message.data.color, "transparent", "second window after tab switch"); + finishTest(); + break; + case 9: + ok(false, "too many color change notifications"); + break; + } + }); + + window.messageManager.addMessageListener("Test:FocusReceived", function(message) { + // No color change should occur after a tab switch. + if (colorChangeNotifications == 6) { + sendGetBackgroundRequest(false); + } + }); + + window.messageManager.addMessageListener("Test:ActivateEvent", function(message) { + ok(message.data.ok, "Test:ActivateEvent"); + }); + + window.messageManager.addMessageListener("Test:DeactivateEvent", function(message) { + ok(message.data.ok, "Test:DeactivateEvent"); + }); + + browser1.addEventListener("load", check, true); + browser2.addEventListener("load", check, true); + browser1.contentWindow.location = testPage; + browser2.contentWindow.location = testPage; + + browser1.messageManager.loadFrameScript("data:,(" + childFunction.toString() + ")();", true); + browser2.messageManager.loadFrameScript("data:,(" + childFunction.toString() + ")();", true); + + gBrowser.selectedTab = tab1; +} + +function sendGetBackgroundRequest(ifChanged) +{ + browser1.messageManager.sendAsyncMessage("Test:GetBackgroundColor", { ifChanged: ifChanged }); + browser2.messageManager.sendAsyncMessage("Test:GetBackgroundColor", { ifChanged: ifChanged }); +} + +function runOtherWindowTests() { + otherWindow = window.open("data:text/html,<body>Hi</body>", "", "chrome"); + waitForFocus(function () { + sendGetBackgroundRequest(true); + }, otherWindow); +} + +function finishTest() +{ + gBrowser.removeCurrentTab(); + gBrowser.removeCurrentTab(); + otherWindow = null; + finish(); +} + +function childFunction() +{ + let oldColor = null; + + let expectingResponse = false; + let ifChanged = true; + + addMessageListener("Test:GetBackgroundColor", function(message) { + expectingResponse = true; + ifChanged = message.data.ifChanged; + }); + + content.addEventListener("focus", function () { + sendAsyncMessage("Test:FocusReceived", { }); + }, false); + + var windowGotActivate = false; + var windowGotDeactivate = false; + addEventListener("activate", function() { + sendAsyncMessage("Test:ActivateEvent", { ok: !windowGotActivate }); + windowGotActivate = false; + }); + + addEventListener("deactivate", function() { + sendAsyncMessage("Test:DeactivateEvent", { ok: !windowGotDeactivate }); + windowGotDeactivate = false; + }); + content.addEventListener("activate", function() { + windowGotActivate = true; + }); + + content.addEventListener("deactivate", function() { + windowGotDeactivate = true; + }); + + content.setInterval(function () { + if (!expectingResponse) { + return; + } + + let area = content.document.getElementById("area"); + if (!area) { + return; /* hasn't loaded yet */ + } + + let color = content.getComputedStyle(area, "").backgroundColor; + if (oldColor != color || !ifChanged) { + expectingResponse = false; + oldColor = color; + sendAsyncMessage("Test:BackgroundColorChanged", { color: color }); + } + }, 20); +} |