commit 3b5b0d6d502d712734c2c5b7e35c0d29e5f19204 Author: Alex Catarineu acat@torproject.org Date: Tue Aug 13 11:57:22 2019 +0200
Bug 24653: merge securityLevel.properties into torbutton.dtd --- .../securitylevel/content/securityLevel.js | 89 +++++++++++++--------- 1 file changed, 52 insertions(+), 37 deletions(-)
diff --git a/browser/components/securitylevel/content/securityLevel.js b/browser/components/securitylevel/content/securityLevel.js index 25f6423bc6d3..9dc23d97855d 100644 --- a/browser/components/securitylevel/content/securityLevel.js +++ b/browser/components/securitylevel/content/securityLevel.js @@ -8,61 +8,76 @@ XPCOMUtils.defineLazyModuleGetters(this, { PanelMultiView: "resource:///modules/PanelMultiView.jsm", });
+XPCOMUtils.defineLazyGlobalGetters(this, ["DOMParser"]); +XPCOMUtils.defineLazyGetter(this, "domParser", () => new DOMParser()); + /* Security Level Strings
Strings loaded from torbutton, but en-US defaults provided in case torbutton addon not enabled */ XPCOMUtils.defineLazyGetter(this, "SecurityLevelStrings", function() { - let sls = null; - try { - sls = Services.strings.createBundle("chrome://torbutton/locale/securityLevel.properties"); - } catch(e) { } + // copied from testing/marionette/l10n.js + let localizeEntity = function(urls, id) { + // Build a string which contains all possible entity locations + let locations = []; + urls.forEach((url, index) => { + locations.push(`<!ENTITY % dtd_${index} SYSTEM "${url}">%dtd_${index};`); + }); + + // Use the DOM parser to resolve the entity and extract its real value + let header = `<?xml version="1.0"?><!DOCTYPE elem [${locations.join("")}]>`; + let elem = `<elem id="elementID">&${id};</elem>`; + let doc = domParser.parseFromString(header + elem, "text/xml"); + let element = doc.querySelector("elem[id='elementID']"); + + if (element === null) { + throw new Error(`Entity with id='${id}' hasn't been found`); + } + + return element.textContent; + };
- // tries to get the given key from the string bundle, return fallback on failure let getString = function(key, fallback) { - let retval = ""; - if (sls) { - try { - retval = sls.GetStringFromName(key); - } catch(e) { } - } - if (retval == "") { - retval = fallback; - } - return retval; + try { + return localizeEntity( + ['chrome://torbutton/locale/torbutton.dtd'], + `torbutton.prefs.sec_${key}` + ); + } catch (e) { } + return fallback; };
// read localized strings from torbutton; but use hard-coded en-US strings as fallbacks in case of error let retval = { - securityLevel : getString("securityLevel.securityLevel", "Security Level"), - customWarning : getString("securityLevel.customWarning", "Custom"), - overview : getString("securityLevel.overview", "Disable certain web features that can be used to attack your security and anonymity."), + securityLevel : getString("caption", "Security Level"), + customWarning : getString("custom_warning", "Custom"), + overview : getString("overview", "Disable certain web features that can be used to attack your security and anonymity."), standard : { - level : getString("securityLevel.standard.level", "Standard"), - tooltip : getString("securityLevel.standard.tooltip", "Security Level : Standard"), - summary : getString("securityLevel.standard.summary", "All Tor Browser and website features are enabled."), + level : getString("standard_label", "Standard"), + tooltip : getString("standard_tooltip", "Security Level : Standard"), + summary : getString("standard_description", "All Tor Browser and website features are enabled."), }, safer : { - level : getString("securityLevel.safer.level", "Safer"), - tooltip : getString("securityLevel.safer.tooltip", "Security Level : Safer"), - summary : getString("securityLevel.safer.summary", "Disables website features that are often dangerous, causing some sites to lose functionality."), - description1 : getString("securityLevel.safer.description1", "JavaScript is disabled on non-HTTPS sites."), - description2 : getString("securityLevel.safer.description2", "Some fonts and math symbols are disabled."), - description3 : getString("securityLevel.safer.description3", "Audio and video (HTML5 media) are click-to-play."), + level : getString("safer_label", "Safer"), + tooltip : getString("safer_tooltip", "Security Level : Safer"), + summary : getString("safer_description", "Disables website features that are often dangerous, causing some sites to lose functionality."), + description1 : getString("js_on_https_sites_only", "JavaScript is disabled on non-HTTPS sites."), + description2 : getString("limit_typography", "Some fonts and math symbols are disabled."), + description3 : getString("click_to_play_media", "Audio and video (HTML5 media), and WebGL are click-to-play."), }, safest : { - level : getString("securityLevel.safest.level", "Safest"), - tooltip : getString("securityLevel.safest.tooltip", "Security Level : Safest"), - summary : getString("securityLevel.safest.summary", "Only allows website features required for static sites and basic services. These changes affect images, media, and scripts."), - description1 : getString("securityLevel.safest.description1", "JavaScript is disabled by default on all sites."), - description2 : getString("securityLevel.safest.description2", "Some fonts, icons, math symbols, and images are disabled."), - description3 : getString("securityLevel.safest.description3", "Audio and video (HTML5 media) are click-to-play."), + level : getString("safest_label", "Safest"), + tooltip : getString("safest_tooltip", "Security Level : Safest"), + summary : getString("safest_description", "Only allows website features required for static sites and basic services. These changes affect images, media, and scripts."), + description1 : getString("js_disabled", "JavaScript is disabled by default on all sites."), + description2 : getString("limit_graphics_and_typography", "Some fonts, icons, math symbols, and images are disabled."), + description3 : getString("click_to_play_media", "Audio and video (HTML5 media), and WebGL are click-to-play."), }, custom : { - summary : getString("securityLevel.custom.summary", "Your custom browser preferences have resulted in unusual security settings. For security and privacy reasons, we recommend you choose one of the default security levels."), + summary : getString("custom_summary", "Your custom browser preferences have resulted in unusual security settings. For security and privacy reasons, we recommend you choose one of the default security levels."), }, - learnMore : getString("securityLevel.learnMore", "Learn more"), + learnMore : getString("learn_more_label", "Learn more"), learnMoreURL : function() { let locale = ""; try { @@ -77,8 +92,8 @@ XPCOMUtils.defineLazyGetter(this, "SecurityLevelStrings", function() {
return "https://tb-manual.torproject.org/" + locale + "/security-settings/"; }(), - restoreDefaults : getString("securityLevel.restoreDefaults", "Restore Defaults"), - advancedSecuritySettings : getString("securityLevel.advancedSecuritySettings", "Advanced Security Settings\u2026"), + restoreDefaults : getString("restore_defaults", "Restore Defaults"), + advancedSecuritySettings : getString("advanced_security_settings", "Advanced Security Settings\u2026"), };
tbb-commits@lists.torproject.org