зеркало из https://github.com/mozilla/gecko-dev.git
Backed out changeset cbde1c9e78d5 (bug 1318605) for failing test_reader_view.html and test_session_scroll_position.html on Android. r=backout
This commit is contained in:
Родитель
0f7459dfc2
Коммит
e65067f730
|
@ -16,10 +16,9 @@ this.EXPORTED_SYMBOLS = ["NarrateControls"];
|
|||
|
||||
var gStrings = Services.strings.createBundle("chrome://global/locale/narrate.properties");
|
||||
|
||||
function NarrateControls(mm, win, languagePromise) {
|
||||
function NarrateControls(mm, win) {
|
||||
this._mm = mm;
|
||||
this._winRef = Cu.getWeakReference(win);
|
||||
this._languagePromise = languagePromise;
|
||||
|
||||
win.addEventListener("unload", this);
|
||||
|
||||
|
@ -111,7 +110,7 @@ function NarrateControls(mm, win, languagePromise) {
|
|||
<div class="dropdown-arrow"></div>
|
||||
</li>`;
|
||||
|
||||
this.narrator = new Narrator(win, languagePromise);
|
||||
this.narrator = new Narrator(win);
|
||||
|
||||
let branch = Services.prefs.getBranch("narrate.");
|
||||
let selectLabel = gStrings.GetStringFromName("selectvoicelabel");
|
||||
|
@ -164,7 +163,7 @@ NarrateControls.prototype = {
|
|||
* Returns true if synth voices are available.
|
||||
*/
|
||||
_setupVoices: function() {
|
||||
return this._languagePromise.then(language => {
|
||||
return this.narrator.languagePromise.then(language => {
|
||||
this.voiceSelect.clear();
|
||||
let win = this._win;
|
||||
let voicePrefs = this._getVoicePref();
|
||||
|
@ -228,7 +227,7 @@ NarrateControls.prototype = {
|
|||
_onVoiceChange: function() {
|
||||
let voice = this.voice;
|
||||
this.narrator.setVoice(voice);
|
||||
this._languagePromise.then(language => {
|
||||
this.narrator.languagePromise.then(language => {
|
||||
if (language) {
|
||||
let voicePref = this._getVoicePref();
|
||||
voicePref[language || "default"] = voice;
|
||||
|
|
|
@ -8,6 +8,8 @@ const { interfaces: Ci, utils: Cu } = Components;
|
|||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "LanguageDetector",
|
||||
"resource:///modules/translation/LanguageDetector.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Services",
|
||||
"resource://gre/modules/Services.jsm");
|
||||
|
||||
|
@ -22,13 +24,29 @@ const kTextStylesRules = ["font-family", "font-kerning", "font-size",
|
|||
"line-height", "letter-spacing", "text-orientation",
|
||||
"text-transform", "word-spacing"];
|
||||
|
||||
function Narrator(win, languagePromise) {
|
||||
function Narrator(win) {
|
||||
this._winRef = Cu.getWeakReference(win);
|
||||
this._languagePromise = languagePromise;
|
||||
this._inTest = Services.prefs.getBoolPref("narrate.test");
|
||||
this._speechOptions = {};
|
||||
this._startTime = 0;
|
||||
this._stopped = false;
|
||||
|
||||
this.languagePromise = new Promise(resolve => {
|
||||
let detect = () => {
|
||||
win.document.removeEventListener("AboutReaderContentReady", detect);
|
||||
let sampleText = this._doc.getElementById(
|
||||
"moz-reader-content").textContent.substring(0, 60 * 1024);
|
||||
LanguageDetector.detectLanguage(sampleText).then(result => {
|
||||
resolve(result.confident ? result.language : null);
|
||||
});
|
||||
};
|
||||
|
||||
if (win.document.body.classList.contains("loaded")) {
|
||||
detect();
|
||||
} else {
|
||||
win.document.addEventListener("AboutReaderContentReady", detect);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Narrator.prototype = {
|
||||
|
@ -248,7 +266,7 @@ Narrator.prototype = {
|
|||
};
|
||||
|
||||
this._stopped = false;
|
||||
return this._languagePromise.then(language => {
|
||||
return this.languagePromise.then(language => {
|
||||
if (!this._speechOptions.voice) {
|
||||
this._speechOptions.lang = language;
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@ XPCOMUtils.defineLazyModuleGetter(this, "NarrateControls", "resource://gre/modul
|
|||
XPCOMUtils.defineLazyModuleGetter(this, "Rect", "resource://gre/modules/Geometry.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Task", "resource://gre/modules/Task.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "UITelemetry", "resource://gre/modules/UITelemetry.jsm");
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "LanguageDetector", "resource:///modules/translation/LanguageDetector.jsm");
|
||||
|
||||
var gStrings = Services.strings.createBundle("chrome://global/locale/aboutReader.properties");
|
||||
|
||||
|
@ -46,9 +45,6 @@ var AboutReader = function(mm, win, articlePromise) {
|
|||
.getInterface(Ci.nsIDOMWindowUtils).currentInnerWindowID;
|
||||
|
||||
this._article = null;
|
||||
this._languagePromise = new Promise(resolve => {
|
||||
this._foundLanguage = resolve;
|
||||
});
|
||||
|
||||
if (articlePromise) {
|
||||
this._articlePromise = articlePromise;
|
||||
|
@ -118,7 +114,7 @@ var AboutReader = function(mm, win, articlePromise) {
|
|||
this._setupLineHeightButtons();
|
||||
|
||||
if (win.speechSynthesis && Services.prefs.getBoolPref("narrate.enabled")) {
|
||||
new NarrateControls(mm, win, this._languagePromise);
|
||||
new NarrateControls(mm, win);
|
||||
}
|
||||
|
||||
this._loadArticle();
|
||||
|
@ -717,19 +713,12 @@ AboutReader.prototype = {
|
|||
},
|
||||
|
||||
_maybeSetTextDirection: function Read_maybeSetTextDirection(article) {
|
||||
if (article.dir) {
|
||||
if (!article.dir)
|
||||
return;
|
||||
|
||||
// Set "dir" attribute on content
|
||||
this._contentElement.setAttribute("dir", article.dir);
|
||||
this._headerElement.setAttribute("dir", article.dir);
|
||||
} else {
|
||||
this._languagePromise.then(language => {
|
||||
// TODO: Remove the hardcoded language codes below once bug 1320265 is resolved.
|
||||
if (["ar", "fa", "he", "ug", "ur"].includes(language)) {
|
||||
this._contentElement.setAttribute("dir", "rtl");
|
||||
this._headerElement.setAttribute("dir", "rtl");
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
_fixLocalLinks() {
|
||||
|
@ -799,7 +788,6 @@ AboutReader.prototype = {
|
|||
this._contentElement.innerHTML = "";
|
||||
this._contentElement.appendChild(contentFragment);
|
||||
this._fixLocalLinks();
|
||||
this._findLanguage(article.textContent);
|
||||
this._maybeSetTextDirection(article);
|
||||
|
||||
this._contentElement.style.display = "block";
|
||||
|
@ -816,12 +804,6 @@ AboutReader.prototype = {
|
|||
new this._win.CustomEvent("AboutReaderContentReady", { bubbles: true, cancelable: false }));
|
||||
},
|
||||
|
||||
_findLanguage: function(textContent) {
|
||||
LanguageDetector.detectLanguage(textContent).then(result => {
|
||||
this._foundLanguage(result.confident ? result.language : null);
|
||||
});
|
||||
},
|
||||
|
||||
_hideContent: function() {
|
||||
this._headerElement.style.display = "none";
|
||||
this._contentElement.style.display = "none";
|
||||
|
|
Загрузка…
Ссылка в новой задаче