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>