bug 1288263 - tabs.detectLanguage() returns "und" for undetermined, r?kmag
MozReview-Commit-ID: 72ltWdufHiu
--- 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