summaryrefslogtreecommitdiffstats
path: root/toolkit/components/translations/tests/browser/shared-head.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/translations/tests/browser/shared-head.js')
-rw-r--r--toolkit/components/translations/tests/browser/shared-head.js154
1 files changed, 98 insertions, 56 deletions
diff --git a/toolkit/components/translations/tests/browser/shared-head.js b/toolkit/components/translations/tests/browser/shared-head.js
index 82b3e783a7..afa060c8a3 100644
--- a/toolkit/components/translations/tests/browser/shared-head.js
+++ b/toolkit/components/translations/tests/browser/shared-head.js
@@ -9,6 +9,9 @@
const { EngineProcess } = ChromeUtils.importESModule(
"chrome://global/content/ml/EngineProcess.sys.mjs"
);
+const { TranslationsPanelShared } = ChromeUtils.importESModule(
+ "chrome://browser/content/translations/TranslationsPanelShared.sys.mjs"
+);
// Avoid about:blank's non-standard behavior.
const BLANK_PAGE =
@@ -32,6 +35,8 @@ const NO_LANGUAGE_URL =
URL_COM_PREFIX + DIR_PATH + "translations-tester-no-tag.html";
const EMPTY_PDF_URL =
URL_COM_PREFIX + DIR_PATH + "translations-tester-empty-pdf-file.pdf";
+const SELECT_TEST_PAGE_URL =
+ URL_COM_PREFIX + DIR_PATH + "translations-tester-select.html";
const PIVOT_LANGUAGE = "en";
const LANGUAGE_PAIRS = [
@@ -349,33 +354,37 @@ function getTranslationsParent() {
/**
* Closes all open panels and menu popups related to Translations.
+ *
+ * @param {ChromeWindow} [win]
*/
-async function closeAllOpenPanelsAndMenus() {
- await closeSettingsMenuIfOpen();
- await closeFullPageTranslationsPanelIfOpen();
- await closeSelectTranslationsPanelIfOpen();
- await closeContextMenuIfOpen();
+async function closeAllOpenPanelsAndMenus(win) {
+ await closeSettingsMenuIfOpen(win);
+ await closeFullPageTranslationsPanelIfOpen(win);
+ await closeSelectTranslationsPanelIfOpen(win);
+ await closeContextMenuIfOpen(win);
}
/**
* Closes the popup element with the given Id if it is open.
*
* @param {string} popupElementId
+ * @param {ChromeWindow} [win]
*/
-async function closePopupIfOpen(popupElementId) {
+async function closePopupIfOpen(popupElementId, win = window) {
await waitForCondition(async () => {
- const contextMenu = document.getElementById(popupElementId);
- if (!contextMenu) {
+ const popupElement = win.document.getElementById(popupElementId);
+ if (!popupElement) {
return true;
}
- if (contextMenu.state === "closed") {
+ if (popupElement.state === "closed") {
return true;
}
let popuphiddenPromise = BrowserTestUtils.waitForEvent(
- contextMenu,
+ popupElement,
"popuphidden"
);
- PanelMultiView.hidePopup(contextMenu);
+ popupElement.hidePopup();
+ PanelMultiView.hidePopup(popupElement);
await popuphiddenPromise;
return false;
});
@@ -383,30 +392,41 @@ async function closePopupIfOpen(popupElementId) {
/**
* Closes the context menu if it is open.
+ *
+ * @param {ChromeWindow} [win]
*/
-async function closeContextMenuIfOpen() {
- await closePopupIfOpen("contentAreaContextMenu");
+async function closeContextMenuIfOpen(win) {
+ await closePopupIfOpen("contentAreaContextMenu", win);
}
/**
* Closes the translations panel settings menu if it is open.
+ *
+ * @param {ChromeWindow} [win]
*/
-async function closeSettingsMenuIfOpen() {
- await closePopupIfOpen("full-page-translations-panel-settings-menupopup");
+async function closeSettingsMenuIfOpen(win) {
+ await closePopupIfOpen(
+ "full-page-translations-panel-settings-menupopup",
+ win
+ );
}
/**
* Closes the translations panel if it is open.
+ *
+ * @param {ChromeWindow} [win]
*/
-async function closeFullPageTranslationsPanelIfOpen() {
- await closePopupIfOpen("full-page-translations-panel");
+async function closeFullPageTranslationsPanelIfOpen(win) {
+ await closePopupIfOpen("full-page-translations-panel", win);
}
/**
* Closes the translations panel if it is open.
+ *
+ * @param {ChromeWindow} [win]
*/
-async function closeSelectTranslationsPanelIfOpen() {
- await closePopupIfOpen("select-translations-panel");
+async function closeSelectTranslationsPanelIfOpen(win) {
+ await closePopupIfOpen("select-translations-panel", win);
}
/**
@@ -471,6 +491,7 @@ async function createAndMockRemoteSettings({
// The TranslationsParent will pull the language pair values from the JSON dump
// of Remote Settings. Clear these before mocking the translations engine.
TranslationsParent.clearCache();
+ TranslationsPanelShared.clearCache();
TranslationsParent.mockTranslationsEngine(
remoteClients.translationModels.client,
@@ -485,6 +506,7 @@ async function createAndMockRemoteSettings({
TranslationsParent.unmockTranslationsEngine();
TranslationsParent.clearCache();
+ TranslationsPanelShared.clearCache();
},
remoteClients,
};
@@ -497,38 +519,56 @@ async function loadTestPage({
prefs,
autoOffer,
permissionsUrls,
+ win = window,
}) {
info(`Loading test page starting at url: ${page}`);
- // Ensure no engine is being carried over from a previous test.
- await EngineProcess.destroyTranslationsEngine();
- Services.fog.testResetFOG();
- await SpecialPowers.pushPrefEnv({
- set: [
- // Enabled by default.
- ["browser.translations.enable", true],
- ["browser.translations.logLevel", "All"],
- ["browser.translations.panelShown", true],
- ["browser.translations.automaticallyPopup", true],
- ["browser.translations.alwaysTranslateLanguages", ""],
- ["browser.translations.neverTranslateLanguages", ""],
- ...(prefs ?? []),
- ],
- });
- await SpecialPowers.pushPermissions(
- [
- ENGLISH_PAGE_URL,
- FRENCH_PAGE_URL,
- NO_LANGUAGE_URL,
- SPANISH_PAGE_URL,
- SPANISH_PAGE_URL_2,
- SPANISH_PAGE_URL_DOT_ORG,
- ...(permissionsUrls || []),
- ].map(url => ({
- type: TRANSLATIONS_PERMISSION,
- allow: true,
- context: url,
- }))
- );
+
+ // If there are multiple windows, only do the first time setup on the main window.
+ const isFirstTimeSetup = win === window;
+
+ let remoteClients = null;
+ let removeMocks = () => {};
+
+ if (isFirstTimeSetup) {
+ // Ensure no engine is being carried over from a previous test.
+ await EngineProcess.destroyTranslationsEngine();
+
+ Services.fog.testResetFOG();
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ // Enabled by default.
+ ["browser.translations.enable", true],
+ ["browser.translations.logLevel", "All"],
+ ["browser.translations.panelShown", true],
+ ["browser.translations.automaticallyPopup", true],
+ ["browser.translations.alwaysTranslateLanguages", ""],
+ ["browser.translations.neverTranslateLanguages", ""],
+ ...(prefs ?? []),
+ ],
+ });
+ await SpecialPowers.pushPermissions(
+ [
+ ENGLISH_PAGE_URL,
+ FRENCH_PAGE_URL,
+ NO_LANGUAGE_URL,
+ SPANISH_PAGE_URL,
+ SPANISH_PAGE_URL_2,
+ SPANISH_PAGE_URL_DOT_ORG,
+ ...(permissionsUrls || []),
+ ].map(url => ({
+ type: TRANSLATIONS_PERMISSION,
+ allow: true,
+ context: url,
+ }))
+ );
+
+ const result = await createAndMockRemoteSettings({
+ languagePairs,
+ autoDownloadFromRemoteSettings,
+ });
+ remoteClients = result.remoteClients;
+ removeMocks = result.removeMocks;
+ }
if (autoOffer) {
TranslationsParent.testAutomaticPopup = true;
@@ -536,16 +576,11 @@ async function loadTestPage({
// Start the tab at a blank page.
const tab = await BrowserTestUtils.openNewForegroundTab(
- gBrowser,
+ win.gBrowser,
BLANK_PAGE,
true // waitForLoad
);
- const { remoteClients, removeMocks } = await createAndMockRemoteSettings({
- languagePairs,
- autoDownloadFromRemoteSettings,
- });
-
BrowserTestUtils.startLoadingURIString(tab.linkedBrowser, page);
await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
@@ -1377,7 +1412,7 @@ async function waitForCloseDialogWindow(dialogWindow) {
// Extracted from https://searchfox.org/mozilla-central/rev/40ef22080910c2e2c27d9e2120642376b1d8b8b2/browser/components/preferences/in-content/tests/head.js#41
function promiseLoadSubDialog(aURL) {
- return new Promise((resolve, reject) => {
+ return new Promise(resolve => {
content.gSubDialog._dialogStack.addEventListener(
"dialogopen",
function dialogopen(aEvent) {
@@ -1444,3 +1479,10 @@ async function loadBlankPage() {
BrowserTestUtils.startLoadingURIString(gBrowser.selectedBrowser, BLANK_PAGE);
await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
}
+
+/**
+ * Destroys the Translations Engine process.
+ */
+async function destroyTranslationsEngine() {
+ await EngineProcess.destroyTranslationsEngine();
+}