From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../xpcshell/test_AddonRepository_cache_locale.js | 217 +++++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_cache_locale.js (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_cache_locale.js') diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_cache_locale.js b/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_cache_locale.js new file mode 100644 index 0000000000..37e60e27dd --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_cache_locale.js @@ -0,0 +1,217 @@ +"user strict"; + +const PREF_GETADDONS_CACHE_ENABLED = "extensions.getAddons.cache.enabled"; +const PREF_METADATA_LASTUPDATE = "extensions.getAddons.cache.lastUpdate"; +Services.prefs.setBoolPref(PREF_GETADDONS_CACHE_ENABLED, true); + +AddonTestUtils.init(this); +AddonTestUtils.overrideCertDB(); +AddonTestUtils.createAppInfo( + "xpcshell@tests.mozilla.org", + "XPCShell", + "42", + "42" +); + +let server = AddonTestUtils.createHttpServer({ hosts: ["example.com"] }); +server.registerDirectory("/data/", do_get_file("data")); + +// Use %LOCALE% as the default pref does. It is set from appLocaleAsBCP47. +Services.prefs.setStringPref( + PREF_GETADDONS_BYIDS, + "http://example.com/addons.json?guids=%IDS%&locale=%LOCALE%" +); + +const TEST_ADDON_ID = "test_AddonRepository_1@tests.mozilla.org"; + +const repositoryAddons = { + "test_AddonRepository_1@tests.mozilla.org": { + name: "Repo Add-on 1", + type: "extension", + guid: TEST_ADDON_ID, + current_version: { + version: "2.1", + files: [ + { + platform: "all", + size: 9, + url: "http://example.com/repo/1/install.xpi", + }, + ], + }, + }, + "langpack-und@test.mozilla.org": { + // included only to avoid exceptions in AddonRepository + name: "und langpack", + type: "language", + guid: "langpack-und@test.mozilla.org", + current_version: { + version: "1.1", + files: [ + { + platform: "all", + size: 9, + url: "http://example.com/repo/1/langpack.xpi", + }, + ], + }, + }, +}; + +server.registerPathHandler("/addons.json", (request, response) => { + let search = new URLSearchParams(request.queryString); + let IDs = search.get("guids").split(","); + let locale = search.get("locale"); + + let repositoryData = { + page_size: 25, + page_count: 1, + count: 0, + next: null, + previous: null, + results: [], + }; + for (let id of IDs) { + let data = JSON.parse(JSON.stringify(repositoryAddons[id])); + data.summary = `This is an ${locale} addon data object`; + data.description = `Full Description ${locale}`; + repositoryData.results.push(data); + } + repositoryData.count = repositoryData.results.length; + + // The request contains the IDs to retreive, but we're just handling the + // two test addons so it's static data. + response.setHeader("content-type", "application/json"); + response.write(JSON.stringify(repositoryData)); +}); + +const ADDONS = [ + { + manifest: { + name: "XPI Add-on 1", + version: "1.1", + + description: "XPI Add-on 1 - Description", + developer: { + name: "XPI Add-on 1 - Author", + }, + + homepage_url: "http://example.com/xpi/1/homepage.html", + icons: { + 32: "icon.png", + }, + + options_ui: { + page: "options.html", + }, + + browser_specific_settings: { + gecko: { id: TEST_ADDON_ID }, + }, + }, + }, + { + // Necessary to provide the "und" locale + manifest: { + name: "und Language Pack", + version: "1.0", + manifest_version: 2, + browser_specific_settings: { + gecko: { + id: "langpack-und@test.mozilla.org", + }, + }, + sources: { + browser: { + base_path: "browser/", + }, + }, + langpack_id: "und", + languages: { + und: { + chrome_resources: { + global: "chrome/und/locale/und/global/", + }, + version: "20171001190118", + }, + }, + author: "Mozilla Localization Task Force", + description: "Language pack for Testy for und", + }, + }, +]; +const ADDON_FILES = ADDONS.map(addon => + AddonTestUtils.createTempWebExtensionFile(addon) +); + +const REQ_LOC_CHANGE_EVENT = "intl:requested-locales-changed"; + +function promiseLocaleChanged(requestedLocale) { + if (Services.locale.appLocaleAsBCP47 == requestedLocale) { + return Promise.resolve(); + } + return new Promise(resolve => { + let localeObserver = { + observe(aSubject, aTopic, aData) { + switch (aTopic) { + case REQ_LOC_CHANGE_EVENT: + let reqLocs = Services.locale.requestedLocales; + equal(reqLocs[0], requestedLocale); + Services.obs.removeObserver(localeObserver, REQ_LOC_CHANGE_EVENT); + resolve(); + } + }, + }; + Services.obs.addObserver(localeObserver, REQ_LOC_CHANGE_EVENT); + Services.locale.requestedLocales = [requestedLocale]; + }); +} + +function promiseMetaDataUpdate() { + return new Promise(resolve => { + let listener = args => { + Services.prefs.removeObserver(PREF_METADATA_LASTUPDATE, listener); + resolve(); + }; + + Services.prefs.addObserver(PREF_METADATA_LASTUPDATE, listener); + }); +} + +function promiseLocale(locale) { + return Promise.all([promiseLocaleChanged(locale), promiseMetaDataUpdate()]); +} + +add_task(async function setup() { + await promiseStartupManager(); + for (let xpi of ADDON_FILES) { + await promiseInstallFile(xpi); + } +}); + +add_task(async function test_locale_change() { + await promiseLocale("en-US"); + let addon = await AddonRepository.getCachedAddonByID(TEST_ADDON_ID); + Assert.ok(addon.description.includes("en-US"), "description is en-us"); + Assert.ok( + addon.fullDescription.includes("en-US"), + "fullDescription is en-us" + ); + + // This pref is a 1s resolution, set it to zero so the + // next test can wait on it being updated again. + Services.prefs.setIntPref(PREF_METADATA_LASTUPDATE, 0); + // Wait for the last update timestamp to be updated. + await promiseLocale("und"); + + addon = await AddonRepository.getCachedAddonByID(TEST_ADDON_ID); + + Assert.ok( + addon.description.includes("und"), + `description is ${addon.description}` + ); + Assert.ok( + addon.fullDescription.includes("und"), + `fullDescription is ${addon.fullDescription}` + ); +}); -- cgit v1.2.3