tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_geckoview_translations.html (2496B)


      1 <!DOCTYPE HTML>
      2 <html lang="en">
      3 
      4 <head>
      5  <meta charset="utf-8">
      6  <title>Tests for GeckoView Translations Module</title>
      7  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
      8  <script type="text/javascript" src="head.js" type="application/javascript"></script>
      9  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     10 </head>
     11 <body>
     12 
     13 <script class="testbody" type="text/javascript">
     14 
     15 async function requestTranslate() {
     16    const chromeScript = SpecialPowers.loadChromeScript(_ => {
     17        /* eslint-env mozilla/chrome-script */
     18        addMessageListener("translate",() => {
     19            // Get Chrome
     20            const navigator = Services.wm.getMostRecentWindow("navigator:geckoview");
     21            // Setup Translations Parent values
     22            const translationsParent = navigator.window.moduleManager.getActor("Translations");
     23            translationsParent.languageState.detectedLanguages = "en";
     24 
     25            // Callback to signal wait ended
     26            const { promise, resolve, reject } = Promise.withResolvers();
     27            const callback = {
     28                onSuccess(message) {
     29                    resolve()
     30                },
     31                onError(error) {
     32                    reject()
     33                }
     34            };
     35 
     36            // Simulate GeckoView callers through Java
     37            const dispatcher = navigator.window.WindowEventDispatcher;
     38            dispatcher.dispatch("GeckoView:Translations:Translate",
     39            {
     40                sourceLanguage: "en",
     41                targetLanguage: "es"
     42            }, callback);
     43            return promise;
     44        });
     45    });
     46 
     47    const result = await chromeScript.sendQuery("translate");
     48    chromeScript.destroy();
     49    return result;
     50  }
     51 
     52 
     53  add_task(async function test_translate_telemetry() {
     54    await SpecialPowers.pushPrefEnv({
     55      set: [["browser.translations.mostRecentTargetLanguages", ""]],
     56    });
     57 
     58    await requestTranslate();
     59 
     60    const translationRequest = await GleanTest.translations.translationRequest.testGetValue() ?? 0;
     61    is(translationRequest[0].extra.from_language, "en", "Translation telemetry recorded the expected from language.");
     62    is(translationRequest[0].extra.to_language, "es", "Translation telemetry recorded the expected to language.");
     63    is(translationRequest[0].extra.auto_translate, "false", "Translation telemetry recorded the correct translation method.");
     64 
     65    await SpecialPowers.popPrefEnv();
     66  });
     67 
     68 </script>
     69 </body>
     70 </html>