tenfourfox/browser/base/content/test/general/browser_windowactivation.js
Cameron Kaiser c9b2922b70 hello FPR
2017-04-19 00:56:45 -07:00

184 lines
5.3 KiB
JavaScript

/*
* 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);
}