fune/browser/base/content/test/general/browser_windowactivation.js

101 lines
3.7 KiB
JavaScript

/*
* This test checks that window activation state is set properly with multiple tabs.
*/
/* eslint-env mozilla/frame-script */
const testPage = getRootDirectory(gTestPath) + "file_window_activation.html";
const testPage2 = getRootDirectory(gTestPath) + "file_window_activation2.html";
add_task(async function reallyRunTests() {
let tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser, testPage);
let browser1 = tab1.linkedBrowser;
// This can't use openNewForegroundTab because if we focus tab2 now, we
// won't send a focus event during test 6, further down in this file.
let tab2 = BrowserTestUtils.addTab(gBrowser, testPage);
let browser2 = tab2.linkedBrowser;
await BrowserTestUtils.browserLoaded(browser2);
function failTest() {
ok(false, "Test received unexpected activate/deactivate event");
}
// The content should not receive activate or deactivate events. If it
// does, fail the test.
BrowserTestUtils.waitForContentEvent(browser1, "activate", true).then(
failTest
);
BrowserTestUtils.waitForContentEvent(browser2, "activate", true).then(
failTest
);
BrowserTestUtils.waitForContentEvent(browser1, "deactivate", true).then(
failTest
);
BrowserTestUtils.waitForContentEvent(browser2, "deactivate", true).then(
failTest
);
gURLBar.focus();
gBrowser.selectedTab = tab1;
// 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.
// Step 1 - check the initial state
let colorBrowser1 = await getBackgroundColor(browser1, true);
let colorBrowser2 = await getBackgroundColor(browser2, true);
is(colorBrowser1, "rgba(0, 0, 0, 0)", "first window initial");
is(colorBrowser2, "rgba(0, 0, 0, 0)", "second window initial");
// Step 2 - open and focus another window
let otherWindow = window.open(testPage2, "", "chrome");
await SimpleTest.promiseFocus(otherWindow);
colorBrowser1 = await getBackgroundColor(browser1, true);
colorBrowser2 = await getBackgroundColor(browser2, true);
is(colorBrowser1, "rgb(255, 0, 0)", "first window lowered");
is(colorBrowser2, "rgb(255, 0, 0)", "second window lowered");
// Step 3 - close the other window again
otherWindow.close();
colorBrowser1 = await getBackgroundColor(browser1, true);
colorBrowser2 = await getBackgroundColor(browser2, true);
is(colorBrowser1, "rgba(0, 0, 0, 0)", "first window raised");
is(colorBrowser2, "rgba(0, 0, 0, 0)", "second window raised");
// Step 4 - switch to the second tab
gBrowser.selectedTab = tab2;
colorBrowser1 = await getBackgroundColor(browser1, false);
colorBrowser2 = await getBackgroundColor(browser2, false);
is(colorBrowser1, "rgba(0, 0, 0, 0)", "first window after tab switch");
is(colorBrowser2, "rgba(0, 0, 0, 0)", "second window after tab switch");
BrowserTestUtils.removeTab(tab1);
BrowserTestUtils.removeTab(tab2);
otherWindow = null;
});
function getBackgroundColor(browser, ifChanged) {
return SpecialPowers.spawn(browser, [], () => {
return new Promise(resolve => {
let oldColor = null;
let timer = content.setInterval(() => {
let area = content.document.getElementById("area");
if (!area) {
return; /* hasn't loaded yet */
}
let color = content.getComputedStyle(area).backgroundColor;
if (oldColor != color || !ifChanged) {
content.clearInterval(timer);
oldColor = color;
resolve(color);
}
}, 20);
});
});
}