bug 1288263 - tabs.detectLanguage() returns "und" for undetermined, r?kmag draft 1288263-detectLanguage-und
authorTomislav Jovanovic <tomica@gmail.com>
Sat, 10 Sep 2016 23:05:02 +0200
changeset 412412 92f1b9b51a6048a075e6c630e6f87a55027ad5f9
parent 412411 6138e059bacb345b7943be495a1ae0779737dfe0
child 530980 b9722ac9feff18a75605cecacfc29935ad30d97b
push id29166
push userbmo:tomica@gmail.com
push dateSat, 10 Sep 2016 21:06:14 +0000
reviewerskmag
bugs1288263
milestone51.0a1
bug 1288263 - tabs.detectLanguage() returns "und" for undetermined, r?kmag MozReview-Commit-ID: 72ltWdufHiu
browser/components/extensions/test/browser/browser.ini
browser/components/extensions/test/browser/browser_ext_tabs_detectLanguage.js
browser/components/extensions/test/browser/file_language_tlh.html
toolkit/components/extensions/ExtensionContent.jsm
--- a/browser/components/extensions/test/browser/browser.ini
+++ b/browser/components/extensions/test/browser/browser.ini
@@ -8,16 +8,17 @@ support-files =
   context_tabs_onUpdated_iframe.html
   file_popup_api_injection_a.html
   file_popup_api_injection_b.html
   file_iframe_document.html
   file_iframe_document.sjs
   file_bypass_cache.sjs
   file_language_fr_en.html
   file_language_ja.html
+  file_language_tlh.html
   file_dummy.html
   searchSuggestionEngine.xml
   searchSuggestionEngine.sjs
 tags = webextensions
 
 
 [browser_ext_browserAction_context.js]
 [browser_ext_browserAction_disabled.js]
--- a/browser/components/extensions/test/browser/browser_ext_tabs_detectLanguage.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_detectLanguage.js
@@ -23,16 +23,23 @@ add_task(function* testDetectLanguage() 
       }).then(() => {
         return loadTab(`http://example.co.jp/${BASE_PATH}/file_language_fr_en.html`);
       }).then(tab => {
         return browser.tabs.detectLanguage(tab.id).then(lang => {
           browser.test.assertEq("fr", lang, "French/English document should be detected as primarily French");
           return browser.tabs.remove(tab.id);
         });
       }).then(() => {
+        return loadTab(`http://example.co.jp/${BASE_PATH}/file_language_tlh.html`);
+      }).then(tab => {
+        return browser.tabs.detectLanguage(tab.id).then(lang => {
+          browser.test.assertEq("und", lang, "Klingon document should not be detected, should return 'und'");
+          return browser.tabs.remove(tab.id);
+        });
+      }).then(() => {
         browser.test.notifyPass("detectLanguage");
       }).catch(e => {
         browser.test.fail(`Error: ${e} :: ${e.stack}`);
         browser.test.notifyFail("detectLanguage");
       });
     },
   });
 
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/test/browser/file_language_tlh.html
@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html lang="tlh">
+<head>
+  <meta charset="UTF-8">
+  <title></title>
+</head>
+<body>
+  tlhIngan maH!
+  Hab SoSlI' Quch!
+  Heghlu'meH QaQ jajvam
+</body>
+</html>
--- a/toolkit/components/extensions/ExtensionContent.jsm
+++ b/toolkit/components/extensions/ExtensionContent.jsm
@@ -847,17 +847,17 @@ class ExtensionGlobal {
       // So we send plain text instead.
       let encoder = Cc["@mozilla.org/layout/documentEncoder;1?type=text/plain"].createInstance(Ci.nsIDocumentEncoder);
       encoder.init(doc, "text/plain", encoder.SkipInvisibleContent);
       let text = encoder.encodeToStringWithMaxLength(60 * 1024);
 
       let encoding = doc.characterSet;
 
       return LanguageDetector.detectLanguage({language, tld, text, encoding})
-                             .then(result => result.language);
+        .then(result => result.language === "un" ? "und" : result.language);
     });
   }
 
   // Used to executeScript, insertCSS and removeCSS.
   handleExtensionExecute(target, extensionId, options) {
     return DocumentManager.executeScript(target, extensionId, options).then(result => {
       try {
         // Make sure we can structured-clone the result value before