forked from mirrors/gecko-dev
Differential Revision: https://phabricator.services.mozilla.com/D65332 --HG-- extra : moz-landing-system : lando
101 lines
3.7 KiB
JavaScript
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);
|
|
});
|
|
});
|
|
}
|