diff options
Diffstat (limited to 'toolkit/components/translations/tests/browser/shared-head.js')
-rw-r--r-- | toolkit/components/translations/tests/browser/shared-head.js | 154 |
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(); +} |