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:
Tom Schuster
2025-02-04 13:54:16 +00:00
parent f22daa0010
commit 16a6a010ba
2 changed files with 76 additions and 15 deletions

View File

@@ -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());

View File

@@ -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>