Bug 1944329 - Remove inline event handlers and use restrictive CSP for TranslationsDialog. r=settings-reviewers,translations-reviewers,Gijs,nordzilla
Differential Revision: https://phabricator.services.mozilla.com/D236103
This commit is contained in:
@@ -118,6 +118,9 @@ var gTranslationsSettings = {
|
||||
Services.prefs.addObserver(ALWAYS_TRANSLATE_LANGS_PREF, this);
|
||||
Services.prefs.addObserver(NEVER_TRANSLATE_LANGS_PREF, this);
|
||||
|
||||
window.addEventListener("unload", this);
|
||||
document.addEventListener("command", this);
|
||||
|
||||
// Build trees from the arrays.
|
||||
this._alwaysTranslateLangsTree = new Tree(
|
||||
"alwaysTranslateLanguagesTree",
|
||||
@@ -132,6 +135,15 @@ var gTranslationsSettings = {
|
||||
this._neverTranslateSites
|
||||
);
|
||||
|
||||
for (let { tree } of [
|
||||
this._alwaysTranslateLangsTree,
|
||||
this._neverTranslateLangsTree,
|
||||
this._neverTranslateSiteTree,
|
||||
]) {
|
||||
tree.addEventListener("keypress", this);
|
||||
tree.addEventListener("select", this);
|
||||
}
|
||||
|
||||
// Ensure the UI for each group is in the correct state.
|
||||
this.onSelectAlwaysTranslateLanguage();
|
||||
this.onSelectNeverTranslateLanguage();
|
||||
@@ -279,6 +291,66 @@ var gTranslationsSettings = {
|
||||
}
|
||||
},
|
||||
|
||||
handleEvent(event) {
|
||||
switch (event.type) {
|
||||
case "unload":
|
||||
this.removeObservers();
|
||||
break;
|
||||
case "command":
|
||||
switch (event.target.id) {
|
||||
case "key_close":
|
||||
window.close();
|
||||
break;
|
||||
|
||||
case "removeAlwaysTranslateLanguage":
|
||||
this.onRemoveAlwaysTranslateLanguage();
|
||||
break;
|
||||
case "removeAllAlwaysTranslateLanguages":
|
||||
this.onRemoveAllAlwaysTranslateLanguages();
|
||||
break;
|
||||
case "removeNeverTranslateLanguage":
|
||||
this.onRemoveNeverTranslateLanguage();
|
||||
break;
|
||||
case "removeAllNeverTranslateLanguages":
|
||||
this.onRemoveAllNeverTranslateLanguages();
|
||||
break;
|
||||
case "removeNeverTranslateSite":
|
||||
this.onRemoveNeverTranslateSite();
|
||||
break;
|
||||
case "removeAllNeverTranslateSites":
|
||||
this.onRemoveAllNeverTranslateSites();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case "keypress":
|
||||
switch (event.currentTarget.id) {
|
||||
case "alwaysTranslateLanguagesTree":
|
||||
this.onAlwaysTranslateLanguageKeyPress(event);
|
||||
break;
|
||||
case "neverTranslateLanguagesTree":
|
||||
this.onNeverTranslateLanguageKeyPress(event);
|
||||
break;
|
||||
case "neverTranslateSitesTree":
|
||||
this.onNeverTranslateSiteKeyPress(event);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case "select":
|
||||
switch (event.currentTarget.id) {
|
||||
case "alwaysTranslateLanguagesTree":
|
||||
this.onSelectAlwaysTranslateLanguage();
|
||||
break;
|
||||
case "neverTranslateLanguagesTree":
|
||||
this.onSelectNeverTranslateLanguage();
|
||||
break;
|
||||
case "neverTranslateSitesTree":
|
||||
this.onSelectNeverTranslateSite();
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Ensures that buttons states are enabled/disabled accordingly based on the
|
||||
* content of the trees.
|
||||
@@ -452,3 +524,5 @@ var gTranslationsSettings = {
|
||||
Services.prefs.removeObserver(NEVER_TRANSLATE_LANGS_PREF, this);
|
||||
},
|
||||
};
|
||||
|
||||
window.addEventListener("load", () => gTranslationsSettings.onLoad());
|
||||
|
||||
@@ -10,9 +10,8 @@
|
||||
data-l10n-attrs="title, style"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
onload="gTranslationsSettings.onLoad();"
|
||||
onunload="gTranslationsSettings.removeObservers();"
|
||||
persist="width height"
|
||||
csp="default-src chrome:; style-src chrome: 'unsafe-inline';"
|
||||
>
|
||||
<dialog
|
||||
buttons="accept"
|
||||
@@ -33,9 +32,9 @@
|
||||
|
||||
<keyset>
|
||||
<key
|
||||
id="key_close"
|
||||
data-l10n-id="translations-settings-close-key"
|
||||
modifiers="accel"
|
||||
oncommand="window.close();"
|
||||
/>
|
||||
</keyset>
|
||||
|
||||
@@ -52,8 +51,6 @@
|
||||
flex="1"
|
||||
style="height: 12em"
|
||||
hidecolumnpicker="true"
|
||||
onkeypress="gTranslationsSettings.onAlwaysTranslateLanguageKeyPress(event)"
|
||||
onselect="gTranslationsSettings.onSelectAlwaysTranslateLanguage();"
|
||||
>
|
||||
<treecols>
|
||||
<treecol
|
||||
@@ -70,12 +67,10 @@
|
||||
id="removeAlwaysTranslateLanguage"
|
||||
disabled="true"
|
||||
data-l10n-id="translations-settings-remove-language-button"
|
||||
oncommand="gTranslationsSettings.onRemoveAlwaysTranslateLanguage();"
|
||||
/>
|
||||
<button
|
||||
id="removeAllAlwaysTranslateLanguages"
|
||||
data-l10n-id="translations-settings-remove-all-languages-button"
|
||||
oncommand="gTranslationsSettings.onRemoveAllAlwaysTranslateLanguages();"
|
||||
/>
|
||||
</hbox>
|
||||
<separator />
|
||||
@@ -91,8 +86,6 @@
|
||||
flex="1"
|
||||
style="height: 12em"
|
||||
hidecolumnpicker="true"
|
||||
onkeypress="gTranslationsSettings.onNeverTranslateLanguageKeyPress(event)"
|
||||
onselect="gTranslationsSettings.onSelectNeverTranslateLanguage();"
|
||||
>
|
||||
<treecols>
|
||||
<treecol
|
||||
@@ -109,12 +102,10 @@
|
||||
id="removeNeverTranslateLanguage"
|
||||
disabled="true"
|
||||
data-l10n-id="translations-settings-remove-language-button"
|
||||
oncommand="gTranslationsSettings.onRemoveNeverTranslateLanguage();"
|
||||
/>
|
||||
<button
|
||||
id="removeAllNeverTranslateLanguages"
|
||||
data-l10n-id="translations-settings-remove-all-languages-button"
|
||||
oncommand="gTranslationsSettings.onRemoveAllNeverTranslateLanguages();"
|
||||
/>
|
||||
</hbox>
|
||||
<separator />
|
||||
@@ -130,8 +121,6 @@
|
||||
flex="1"
|
||||
style="height: 12em"
|
||||
hidecolumnpicker="true"
|
||||
onkeypress="gTranslationsSettings.onNeverTranslateSiteKeyPress(event)"
|
||||
onselect="gTranslationsSettings.onSelectNeverTranslateSite();"
|
||||
>
|
||||
<treecols>
|
||||
<treecol
|
||||
@@ -148,12 +137,10 @@
|
||||
id="removeNeverTranslateSite"
|
||||
disabled="true"
|
||||
data-l10n-id="translations-settings-remove-site-button"
|
||||
oncommand="gTranslationsSettings.onRemoveNeverTranslateSite();"
|
||||
/>
|
||||
<button
|
||||
id="removeAllNeverTranslateSites"
|
||||
data-l10n-id="translations-settings-remove-all-sites-button"
|
||||
oncommand="gTranslationsSettings.onRemoveAllNeverTranslateSites();"
|
||||
/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
|
||||
Reference in New Issue
Block a user