tbb-commits
Threads by month
- ----- 2025 -----
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
January 2020
- 3 participants
- 73 discussions
commit 73a43f2f4d846b2870757d7aa18a1b33643ba2b5
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Oct 11 10:23:22 2019 +0000
Bug 27268: Preference clean up
---
chrome/content/torbutton.js | 2 --
1 file changed, 2 deletions(-)
diff --git a/chrome/content/torbutton.js b/chrome/content/torbutton.js
index 3ecc2b24..9846b864 100644
--- a/chrome/content/torbutton.js
+++ b/chrome/content/torbutton.js
@@ -1464,9 +1464,7 @@ function torbutton_update_fingerprinting_prefs() {
var letterboxing = m_tb_prefs.getBoolPref("privacy.resistFingerprinting.letterboxing", false);
m_tb_prefs.setBoolPref("webgl.disable-extensions", mode);
- m_tb_prefs.setBoolPref("dom.network.enabled", !mode);
m_tb_prefs.setBoolPref("dom.enable_performance", !mode);
- m_tb_prefs.setBoolPref("plugin.expose_full_path", !mode);
m_tb_prefs.setBoolPref("browser.zoom.siteSpecific", !mode);
m_tb_prefs.setBoolPref("extensions.torbutton.resize_new_windows", mode && !letterboxing);
1
0

[torbutton/maint-9.0] Bug 30783 - Use mobile EOY links on Android
by sysrqb@torproject.org 03 Jan '20
by sysrqb@torproject.org 03 Jan '20
03 Jan '20
commit 9ea41dcdc38c79368a0909f4a64fcb865bd39af2
Author: Matthew Finkel <sysrqb(a)torproject.org>
Date: Thu Oct 31 17:07:30 2019 +0000
Bug 30783 - Use mobile EOY links on Android
---
chrome/content/aboutTor/aboutTor-content.js | 18 ++++++++++++------
chrome/content/aboutTor/aboutTor.xhtml | 1 +
chrome/skin/aboutTor.css | 10 ++++++++++
3 files changed, 23 insertions(+), 6 deletions(-)
diff --git a/chrome/content/aboutTor/aboutTor-content.js b/chrome/content/aboutTor/aboutTor-content.js
index 23f22406..18bc40f9 100644
--- a/chrome/content/aboutTor/aboutTor-content.js
+++ b/chrome/content/aboutTor/aboutTor-content.js
@@ -18,7 +18,6 @@ const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
let { bindPrefAndInit, show_torbrowser_manual } = ChromeUtils.import("resource://torbutton/modules/utils.js", {});
-
var AboutTorListener = {
kAboutTorLoadedMessage: "AboutTor:Loaded",
kAboutTorChromeDataMessage: "AboutTor:ChromeData",
@@ -129,12 +128,19 @@ var AboutTorListener = {
+ tbbVersion));
} catch (e) {}
+ let ey2019_elem_id = "ey2019_donate";
+ let ey2019_locale_url =
+ `https://www.torproject.org/donate/donate-tbi-${aLocale}`;
+
+ if (content.document.body.getAttribute("mobile")) {
+ ey2019_elem_id = "ey2019_donate_mobile";
+ ey2019_locale_url =
+ `https://www.torproject.org/donate/donate-tbi-mobile-${aLocale}`;
+ }
+
content.document
- .getElementById("ey2019_donate")
- .setAttribute(
- "href",
- `https://www.torproject.org/donate/donate-tbi-${aLocale}`
- );
+ .getElementById(ey2019_elem_id)
+ .setAttribute("href", ey2019_locale_url);
}
};
diff --git a/chrome/content/aboutTor/aboutTor.xhtml b/chrome/content/aboutTor/aboutTor.xhtml
index 5f4b2bf7..e668b34e 100644
--- a/chrome/content/aboutTor/aboutTor.xhtml
+++ b/chrome/content/aboutTor/aboutTor.xhtml
@@ -59,6 +59,7 @@ window.addEventListener("pageshow", function() {
</div>
<div id="ey2019_3">
<a id="ey2019_donate" href="https://www.torproject.org/donate/donate-tbi-default">&aboutTor.donationBanner.buttonA;</a>
+ <a id="ey2019_donate_mobile" href="https://www.torproject.org/donate/donate-tbi-mobile-default">&aboutTor.donationBanner.buttonA;</a>
<p id="ey2019_mozilla">&aboutTor.ey2019.mozilla;</p>
</div>
</div>
diff --git a/chrome/skin/aboutTor.css b/chrome/skin/aboutTor.css
index 6c7276f0..28291d16 100644
--- a/chrome/skin/aboutTor.css
+++ b/chrome/skin/aboutTor.css
@@ -396,6 +396,7 @@ body[ey2019] .torcontent-logo {
text-align: left;
}
+#ey2019_donate_mobile,
#ey2019_donate {
border: 3px solid blueViolet;
background: black;
@@ -411,6 +412,7 @@ body[ey2019] .torcontent-logo {
vertical-align: super;
}
+#ey2019_donate_mobile,
#ey2019_donate:hover {
background: blueViolet;
color: black;
@@ -444,3 +446,11 @@ body:not([ey2019]) .showIfEY2019,
body[ey2019] .hideIfEY2019 {
display: none;
}
+
+body:not([mobile]) #ey2019_donate_mobile {
+ display: none;
+}
+
+body[mobile] #ey2019_donate {
+ display: none;
+}
1
0

[torbutton/maint-9.0] Bug 28746: Remove torbutton isolation and fp prefs sync
by sysrqb@torproject.org 03 Jan '20
by sysrqb@torproject.org 03 Jan '20
03 Jan '20
commit 938997fa6de418e423186a5fe5c3e8adf4d82a38
Author: Alex Catarineu <acat(a)torproject.org>
Date: Sun Jun 9 23:12:43 2019 +0200
Bug 28746: Remove torbutton isolation and fp prefs sync
---
chrome/content/torbutton.js | 20 --------------------
1 file changed, 20 deletions(-)
diff --git a/chrome/content/torbutton.js b/chrome/content/torbutton.js
index 72636125..1537c54d 100644
--- a/chrome/content/torbutton.js
+++ b/chrome/content/torbutton.js
@@ -100,11 +100,9 @@ var torbutton_unique_pref_observer =
{
this.forced_ua = false;
m_tb_prefs.addObserver("extensions.torbutton", this, false);
- m_tb_prefs.addObserver("network.cookie", this, false);
m_tb_prefs.addObserver("browser.privatebrowsing.autostart", this, false);
m_tb_prefs.addObserver("javascript", this, false);
m_tb_prefs.addObserver("plugin.disable", this, false);
- m_tb_prefs.addObserver("privacy.firstparty.isolate", this, false);
m_tb_prefs.addObserver("privacy.resistFingerprinting", this, false);
m_tb_prefs.addObserver("privacy.resistFingerprinting.letterboxing", this, false);
@@ -116,11 +114,9 @@ var torbutton_unique_pref_observer =
unregister: function()
{
m_tb_prefs.removeObserver("extensions.torbutton", this);
- m_tb_prefs.removeObserver("network.cookie", this);
m_tb_prefs.removeObserver("browser.privatebrowsing.autostart", this);
m_tb_prefs.removeObserver("javascript", this);
m_tb_prefs.removeObserver("plugin.disable", this);
- m_tb_prefs.removeObserver("privacy.firstparty.isolate", this);
m_tb_prefs.removeObserver("privacy.resistFingerprinting", this);
m_tb_prefs.removeObserver("privacy.resistFingerprinting.letterboxing", this);
@@ -175,9 +171,6 @@ var torbutton_unique_pref_observer =
case "privacy.resistFingerprinting.letterboxing":
torbutton_update_fingerprinting_prefs();
break;
- case "privacy.firstparty.isolate":
- torbutton_update_isolation_prefs();
- break;
}
}
}
@@ -1453,25 +1446,12 @@ function torbutton_update_disk_prefs() {
function torbutton_update_fingerprinting_prefs() {
var mode = m_tb_prefs.getBoolPref("privacy.resistFingerprinting");
var letterboxing = m_tb_prefs.getBoolPref("privacy.resistFingerprinting.letterboxing", false);
-
- m_tb_prefs.setBoolPref("webgl.disable-extensions", mode);
- m_tb_prefs.setBoolPref("dom.enable_performance", !mode);
- m_tb_prefs.setBoolPref("browser.zoom.siteSpecific", !mode);
m_tb_prefs.setBoolPref("extensions.torbutton.resize_new_windows", mode && !letterboxing);
// Force prefs to be synced to disk
Services.prefs.savePrefFile(null);
}
-function torbutton_update_isolation_prefs() {
- let isolate = m_tb_prefs.getBoolPref("privacy.firstparty.isolate");
-
- m_tb_prefs.setBoolPref("security.enable_tls_session_tickets", !isolate);
-
- // Force prefs to be synced to disk
- Services.prefs.savePrefFile(null);
-}
-
// This function closes all XUL browser windows except this one. For this
// window, it closes all existing tabs and creates one about:blank tab.
function torbutton_close_tabs_on_new_identity() {
1
0

[torbutton/maint-9.0] Bug 28745: Assume always running in Tor Browser
by sysrqb@torproject.org 03 Jan '20
by sysrqb@torproject.org 03 Jan '20
03 Jan '20
commit 6b1a5ded2cab7e51aeb504483fa0d8fbf0cae957
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Jun 10 17:08:25 2019 +0200
Bug 28745: Assume always running in Tor Browser
---
chrome/content/torbutton.js | 75 ++++++++-----------------------------
defaults/preferences/preferences.js | 1 -
2 files changed, 15 insertions(+), 61 deletions(-)
diff --git a/chrome/content/torbutton.js b/chrome/content/torbutton.js
index 1537c54d..aacae042 100644
--- a/chrome/content/torbutton.js
+++ b/chrome/content/torbutton.js
@@ -40,8 +40,6 @@ var m_tb_confirming_plugins = false;
var m_tb_window_height = window.outerHeight;
var m_tb_window_width = window.outerWidth;
-var m_tb_tbb = false;
-
var m_tb_control_ipc_file = null; // Set if using IPC (UNIX domain socket).
var m_tb_control_port = null; // Set if using TCP.
var m_tb_control_host = null; // Set if using TCP.
@@ -247,7 +245,6 @@ function torbutton_init() {
var cur_version;
try {
cur_version = m_tb_prefs.getCharPref("torbrowser.version");
- m_tb_tbb = true;
torbutton_log(3, "This is a Tor Browser");
} catch(e) {
torbutton_log(3, "This is not a Tor Browser: "+e);
@@ -488,25 +485,6 @@ function torbutton_confirm_plugins() {
}
}
-function torbutton_inform_about_tbb() {
- var prompts = Services.prompt;
-
- var message = torbutton_get_property_string("torbutton.popup.prompt_torbrowser");
- var title = torbutton_get_property_string("torbutton.title.prompt_torbrowser");
- var checkbox = {value: false};
-
- var sb = Services.strings;
- var browserstrings = sb.createBundle("chrome://browser/locale/browser.properties");
-
- var askagain = browserstrings.GetStringFromName("privateBrowsingNeverAsk");
-
- var response = prompts.alertCheck(null, title, message, askagain, checkbox);
-
- // Update preferences to reflect their response and to prevent the prompt from
- // being displayed again.
- m_tb_prefs.setBoolPref("extensions.torbutton.prompt_torbrowser", !checkbox.value);
-}
-
// Bug 1506 P2: It might be nice to let people move the button around, I guess?
function torbutton_get_toolbutton() {
var o_toolbutton = false;
@@ -580,7 +558,7 @@ function torbutton_check_for_update() {
// Bug 1506 P4: Checking for Tor Browser updates is pretty important,
// probably even as a fallback if we ever do get a working updater.
function torbutton_do_async_versioncheck() {
- if (!m_tb_tbb || !m_tb_prefs.getBoolPref("extensions.torbutton.versioncheck_enabled")) {
+ if (!m_tb_prefs.getBoolPref("extensions.torbutton.versioncheck_enabled")) {
return;
}
@@ -1405,21 +1383,19 @@ function torbutton_tor_check_ok()
//
// toggles plugins: true for disabled, false for enabled
function torbutton_toggle_plugins(disable_plugins) {
- if (m_tb_tbb) {
- var PH=Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost);
- var P=PH.getPluginTags({});
- for(var i=0; i<P.length; i++) {
- if ("enabledState" in P[i]) { // FF24
- // FIXME: DOCDOC the reasoning for the isDisabled check, or remove it.
- var isDisabled = (P[i].enabledState == Ci.nsIPluginTag.STATE_DISABLED);
- if (!isDisabled && disable_plugins)
- P[i].enabledState = Ci.nsIPluginTag.STATE_DISABLED;
- else if (isDisabled && !disable_plugins)
- P[i].enabledState = Ci.nsIPluginTag.STATE_CLICKTOPLAY;
- } else if (P[i].disabled != disable_plugins) { // FF17
- P[i].disabled=disable_plugins;
- }
- }
+ var PH=Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost);
+ var P=PH.getPluginTags({});
+ for(var i=0; i<P.length; i++) {
+ if ("enabledState" in P[i]) { // FF24
+ // FIXME: DOCDOC the reasoning for the isDisabled check, or remove it.
+ var isDisabled = (P[i].enabledState == Ci.nsIPluginTag.STATE_DISABLED);
+ if (!isDisabled && disable_plugins)
+ P[i].enabledState = Ci.nsIPluginTag.STATE_DISABLED;
+ else if (isDisabled && !disable_plugins)
+ P[i].enabledState = Ci.nsIPluginTag.STATE_CLICKTOPLAY;
+ } else if (P[i].disabled != disable_plugins) { // FF17
+ P[i].disabled=disable_plugins;
+ }
}
}
@@ -1434,7 +1410,7 @@ function torbutton_update_disk_prefs() {
// No way to clear this beast during New Identity. Leave it off.
//m_tb_prefs.setBoolPref("dom.indexedDB.enabled", !mode);
- if (m_tb_tbb) m_tb_prefs.setBoolPref("permissions.memory_only", mode);
+ m_tb_prefs.setBoolPref("permissions.memory_only", mode);
// Third party abuse. Leave it off for now.
//m_tb_prefs.setBoolPref("browser.cache.offline.enable", !mode);
@@ -1535,10 +1511,6 @@ function torbutton_check_protections()
document.getElementById("menu_newIdentity").disabled = true;
document.getElementById("appMenuNewIdentity").disabled = true;
}
-
- if (!m_tb_tbb && m_tb_prefs.getBoolPref("extensions.torbutton.prompt_torbrowser")) {
- torbutton_inform_about_tbb();
- }
}
// -------------- HISTORY & COOKIES ---------------------
@@ -1699,23 +1671,6 @@ function torbutton_do_startup()
// Bug 30565: sync browser.privatebrowsing.autostart with security.nocertdb
torbutton_update_disk_prefs();
- // #5758: Last ditch effort to keep Vanilla Torbutton users from totally
- // being pwnt. This is a pretty darn ugly hack, too. But because of #5863,
- // we really don't care about preserving the user's values for this.
- if (!m_tb_tbb) {
- // Bug 1506 P5: You have to set these two for non-TBB Firefoxen
- m_tb_prefs.setBoolPref("network.websocket.enabled", false);
- m_tb_prefs.setBoolPref("dom.indexedDB.enabled", false);
- }
-
- // Still need this in case people shove this thing back into FF
- if (!m_tb_tbb && m_tb_prefs.getBoolPref("extensions.torbutton.prompt_torbrowser")) {
- var warning = torbutton_get_property_string("torbutton.popup.short_torbrowser");
- var title = torbutton_get_property_string("torbutton.title.prompt_torbrowser");
- var prompts = Services.prompt;
- prompts.alert(null, title, warning);
- }
-
// For general pref fixups to handle pref damage in older versions
torbutton_fixup_old_prefs();
diff --git a/defaults/preferences/preferences.js b/defaults/preferences/preferences.js
index 2d1bd99f..100302b7 100644
--- a/defaults/preferences/preferences.js
+++ b/defaults/preferences/preferences.js
@@ -42,7 +42,6 @@ pref("extensions.torbutton(a)torproject.org.getAddons.cache.enabled", false);
pref("extensions.torbutton.security_slider", 4);
pref("extensions.torbutton.security_custom", false);
-pref("extensions.torbutton.prompt_torbrowser", true);
pref("extensions.torbutton.confirm_plugins", true);
pref("extensions.torbutton.confirm_newnym", true);
1
0

03 Jan '20
commit 2dfa0e0c9cff7cfad93664e0b0b6cdc05b24b7f2
Author: Alex Catarineu <acat(a)torproject.org>
Date: Sat Jun 8 15:10:01 2019 +0200
Remove cookie-jar-selector component
---
chrome.manifest | 5 -
chrome/content/torbutton.js | 18 +-
components/cookie-jar-selector.js | 460 ------------------------------------
components/startup-observer.js | 18 ++
defaults/preferences/preferences.js | 2 -
jar.mn | 5 -
6 files changed, 19 insertions(+), 489 deletions(-)
diff --git a/chrome.manifest b/chrome.manifest
index 13bef661..d1ffe6d6 100644
--- a/chrome.manifest
+++ b/chrome.manifest
@@ -143,9 +143,6 @@ contract @torproject.org/torbutton-extAppBlocker;1 {3da0269f-fc29-4e9e-a678-c3b1
component {06322def-6fde-4c06-aef6-47ae8e799629} components/startup-observer.js
contract @torproject.org/startup-observer;1 {06322def-6fde-4c06-aef6-47ae8e799629}
-component {e6204253-b690-4159-bfe8-d4eedab6b3be} components/cookie-jar-selector.js
-contract @torproject.org/cookie-jar-selector;1 {e6204253-b690-4159-bfe8-d4eedab6b3be}
-
component {5d57312b-5d8c-4169-b4af-e80d6a28a72e} components/torCheckService.js
contract @torproject.org/torbutton-torCheckService;1 {5d57312b-5d8c-4169-b4af-e80d6a28a72e}
@@ -155,8 +152,6 @@ contract @torproject.org/torbutton-logger;1 {f36d72c9-9718-4134-b550-e109638331d
component {e33fd6d4-270f-475f-a96f-ff3140279f68} components/domain-isolator.js
contract @torproject.org/domain-isolator;1 {e33fd6d4-270f-475f-a96f-ff3140279f68}
-category profile-after-change CookieJarSelector @torproject.org/cookie-jar-selector;1
-
category profile-after-change StartupObserver @torproject.org/startup-observer;1
category profile-after-change DomainIsolator @torproject.org/domain-isolator;1
category profile-after-change DragDropFilter @torproject.org/torbutton-dragDropFilter;1
diff --git a/chrome/content/torbutton.js b/chrome/content/torbutton.js
index 9846b864..72636125 100644
--- a/chrome/content/torbutton.js
+++ b/chrome/content/torbutton.js
@@ -1039,16 +1039,7 @@ async function torbutton_do_new_identity() {
torbutton_log(3, "New Identity: Clearing Cookies and DOM Storage");
- if (m_tb_prefs.getBoolPref("extensions.torbutton.cookie_protections")) {
- var selector = Cc["@torproject.org/cookie-jar-selector;1"]
- .getService(Ci.nsISupports)
- .wrappedJSObject;
- // This emits "cookie-changed", "cleared", which kills DOM storage
- // and the safe browsing API key
- selector.clearUnprotectedCookies("tor");
- } else {
- torbutton_clear_cookies();
- }
+ torbutton_clear_cookies();
torbutton_log(3, "New Identity: Closing open connections");
@@ -1558,13 +1549,6 @@ function torbutton_check_protections()
document.getElementById("torbutton-checkForUpdate").hidden = false;
}
- var cookie_pref = m_tb_prefs.getBoolPref("extensions.torbutton.cookie_protections");
- document.getElementById("torbutton-cookie-protector").disabled = !cookie_pref;
-
- // XXX: Bug 14632: The cookie dialog is useless in private browsing mode in FF31ESR
- // See https://trac.torproject.org/projects/tor/ticket/10353 for more info.
- document.getElementById("torbutton-cookie-protector").hidden = m_tb_prefs.getBoolPref("browser.privatebrowsing.autostart");
-
if (!m_tb_control_pass || (!m_tb_control_ipc_file && !m_tb_control_port)) {
// TODO: Remove the Torbutton menu entry again once we have done our
// security control redesign.
diff --git a/components/cookie-jar-selector.js b/components/cookie-jar-selector.js
deleted file mode 100644
index 79a66e8a..00000000
--- a/components/cookie-jar-selector.js
+++ /dev/null
@@ -1,460 +0,0 @@
-// Bug 1506 P1: This component is currently only used to protect
-// user-selected cookies from deletion. Moreover, all the E4X code is
-// deprecated and needs to be replaced with JSON.
-
-/*************************************************************************
- * Cookie Jar Selector (JavaScript XPCOM component)
- * Enables selection of separate cookie jars for (more) anonymous browsing.
- * Designed as a component of FoxTor, http://cups.cs.cmu.edu/foxtor/
- * Copyright 2006, distributed under the same (open source) license as FoxTor
- *
- * Contributor(s):
- * Collin Jackson <mozilla(a)collinjackson.com>
- *
- *************************************************************************/
-
-// Module specific constants
-const kMODULE_NAME = "Cookie Jar Selector";
-const kMODULE_CONTRACTID = "@torproject.org/cookie-jar-selector;1";
-const kMODULE_CID = Components.ID("e6204253-b690-4159-bfe8-d4eedab6b3be");
-
-ChromeUtils.import("resource://torbutton/modules/default-prefs.js", {})
- .ensureDefaultPrefs();
-
-const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
-const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-function Cookie(number,name,value,isDomain,host,rawHost,HttpOnly,path,isSecure,isSession,
- expires,isProtected) {
- this.number = number;
- this.name = name;
- this.value = value;
- this.isDomain = isDomain;
- this.host = host;
- this.rawHost = rawHost;
- this.isHttpOnly = HttpOnly;
- this.path = path;
- this.isSecure = isSecure;
- this.isSession = isSession;
- this.expires = expires;
- this.isProtected = isProtected;
-}
-
-function CookieJarSelector() {
- this.logger = Cc["@torproject.org/torbutton-logger;1"]
- .getService(Ci.nsISupports).wrappedJSObject;
-
- this.logger.log(3, "Component Load 5: New CookieJarSelector " + kMODULE_CONTRACTID);
-
- this.prefs = Services.prefs;
-
- var getProfileFile = function(filename) {
- var loc = "ProfD"; // profile directory
- var file = Services.dirsvc
- .get(loc, Ci.nsIFile)
- .clone();
- file.append(filename);
- return file;
- };
-
- this.clearCookies = function() {
- try {
- Services.cookies.removeAll();
- } catch (e) {
- this.logger.log(4, "Cookie clearing exception: " + e);
- }
- };
-
- this._cookiesToJS = function(getSession) {
- var cookieManager = Services.cookies;
- var cookiesEnum = cookieManager.enumerator;
- var cookiesAsJS = [];
- var count = 0;
- while (cookiesEnum.hasMoreElements()) {
- var nextCookie = cookiesEnum.getNext().QueryInterface(Ci.nsICookie2);
- var JSCookie = new Cookie(count++, nextCookie.name, nextCookie.value, nextCookie.isDomain, nextCookie.host,
- (nextCookie.host.charAt(0)==".") ? nextCookie.host.substring(1,nextCookie.host.length) : nextCookie.host,
- nextCookie.isHttpOnly, nextCookie.path, nextCookie.isSecure, nextCookie.isSession, nextCookie.expires,
- false);
- // Save either session or non-session cookies this time around:
- if (JSCookie.isSession && getSession ||
- !JSCookie.isSession && !getSession)
- cookiesAsJS.push(JSCookie);
- }
- return cookiesAsJS;
- };
-
- this._loadCookiesFromJS = function(cookiesAsJS) {
- if (typeof(cookiesAsJS) == "undefined" || !cookiesAsJS)
- return;
-
- var cookieManager = Services.cookies;
-
- for (var i = 0; i < cookiesAsJS.length; i++) {
- var cookie = cookiesAsJS[i];
- //this.logger.log(2, "Loading cookie: "+host+":"+cname+" until: "+expiry);
- cookieManager.add(cookie.host, cookie.path, cookie.name, cookie.value,
- cookie.isSecure, cookie.isHttpOnly, cookie.isSession,
- cookie.expires);
- }
- };
-
- this._cookiesToFile = function(name) {
- var file = getProfileFile("cookies-" + name + ".json");
- var foStream = Cc["@mozilla.org/network/file-output-stream;1"]
- .createInstance(Ci.nsIFileOutputStream);
- foStream.init(file, 0x02 | 0x08 | 0x20, 0o666, 0);
- var data = JSON.stringify(this["cookiesobj-" + name]);
- foStream.write(data, data.length);
- foStream.close();
- };
-
- // Start1506
- this._protectedCookiesToFile = function(name) {
- var file = getProfileFile("protected-" + name + ".json");
- var foStream = Cc["@mozilla.org/network/file-output-stream;1"]
- .createInstance(Ci.nsIFileOutputStream);
- foStream.init(file, 0x02 | 0x08 | 0x20, 0o666, 0);
- var data = JSON.stringify(this["protected-" + name]);
- foStream.write(data, data.length);
- foStream.close();
- };
-
- this.addProtectedCookie = function(cookie) {
- var name = "tor";
- var cookies = this.getProtectedCookies(name);
-
- if (typeof(cookies) == "undefined" || cookies == null
- || cookies.length == 0)
- cookies = [];
-
- if (cookie.isSession) {
- // session cookies get fucked up expiry. Give it 1yr if
- // the user wants to save their session cookies
- cookie.expires = Date.now()/1000 + 365*24*60*60;
- }
-
- cookies.push(cookie);
- this["protected-" + name] = cookies;
-
- if (!this.prefs.getBoolPref("browser.privatebrowsing.autostart")) {
- // save protected cookies to file
- this._protectedCookiesToFile(name);
- } else {
- try {
- var file = getProfileFile("protected-" + name + ".json");
- if (file.exists()) {
- file.remove(false);
- }
- } catch(e) {
- this.logger.log(5, "Can't remove "+name+" cookie file: "+e);
- }
- }
- };
-
- this.getProtectedCookies = function(name) {
- var file = getProfileFile("protected-" + name + ".json");
- if (!file.exists()) {
- return this["protected-" + name];
- }
- var data = "";
- var fstream = Cc["@mozilla.org/network/file-input-stream;1"]
- .createInstance(Ci.nsIFileInputStream);
- var sstream = Cc["@mozilla.org/scriptableinputstream;1"]
- .createInstance(Ci.nsIScriptableInputStream);
- fstream.init(file, -1, 0, 0);
- sstream.init(fstream);
-
- var str = sstream.read(4096);
- while (str.length > 0) {
- data += str;
- str = sstream.read(4096);
- }
-
- sstream.close();
- fstream.close();
- try {
- var ret = JSON.parse(data);
- } catch(e) { // file has been corrupted; XXX: handle error differently
- this.logger.log(5, "Cookies corrupted: "+e);
- try {
- file.remove(false); //XXX: is it necessary to remove it ?
- var ret = null;
- } catch(e2) {
- this.logger.log(5, "Can't remove file "+e);
- }
- }
- return ret;
- };
-
- this.protectCookies = function(cookies) {
- var name = "tor";
- this._writeProtectCookies(cookies,name);
- if (!this.prefs.getBoolPref("browser.privatebrowsing.autostart")) {
- // save protected cookies to file
- this._protectedCookiesToFile(name);
- } else {
- try {
- var file = getProfileFile("protected-" + name + ".json");
- if (file.exists()) {
- file.remove(false);
- }
- } catch(e) {
- this.logger.log(5, "Can't remove "+name+" cookie file: "+e);
- }
- }
- };
-
- this._writeProtectCookies = function(cookies, name) {
- for (var i = 0; i < cookies.length; i++) {
- if (cookies[i].isSession) {
- // session cookies get fucked up expiry. Give it 1yr if
- // the user wants to save their session cookies
- cookies[i].expires = Date.now()/1000 + 365*24*60*60;
- }
- cookies[i].isProtected = true;
- }
- this["protected-" + name] = cookies;
- };
- // End1506
-
- this._cookiesFromFile = function(name) {
- var file = getProfileFile("cookies-" + name + ".json");
- if (!file.exists())
- return null;
- var data = "";
- var fstream = Cc["@mozilla.org/network/file-input-stream;1"]
- .createInstance(Ci.nsIFileInputStream);
- var sstream = Cc["@mozilla.org/scriptableinputstream;1"]
- .createInstance(Ci.nsIScriptableInputStream);
- fstream.init(file, -1, 0, 0);
- sstream.init(fstream);
-
- var str = sstream.read(4096);
- while (str.length > 0) {
- data += str;
- str = sstream.read(4096);
- }
-
- sstream.close();
- fstream.close();
- try {
- var ret = JSON.parse(data);
- } catch(e) { // file has been corrupted; XXX: handle error differently
- this.logger.log(5, "Cookies corrupted: "+e);
- try {
- file.remove(false); //XXX: is it necessary to remove it ?
- var ret = null;
- } catch(e2) {
- this.logger.log(5, "Can't remove file "+e);
- }
- }
- return ret;
- };
-
- this.saveCookies = function(name) {
- // transition removes old tor-style cookie file
- try {
- var oldCookieFile = getProfileFile("cookies-"+name+".xml");
- if (oldCookieFile.exists()) {
- oldCookieFile.remove(false);
- }
- } catch(e) {
- this.logger.log(5, "Can't remove old "+name+" file "+e);
- }
-
- // save cookies to JS objects
- this["session-cookiesobj-" + name] = this._cookiesToJS(true);
- this["cookiesobj-" + name] = this._cookiesToJS(false);
-
- if (!this.prefs.getBoolPref("browser.privatebrowsing.autostart")) {
- // save cookies to file
- this._cookiesToFile(name);
- } else {
- // Clear the old file
- try {
- var file = getProfileFile("cookies-" + name + ".json");
- if (file.exists()) {
- file.remove(false);
- }
- } catch(e) {
- this.logger.log(5, "Can't remove "+name+" cookie file "+e);
- }
- }
-
- // ok, everything's fine
- this.logger.log(2, "Cookies saved");
- };
-
- // Start1506
- this.clearUnprotectedCookies = function(name) {
- try {
- var protCookies = this.getProtectedCookies(name);
- if (protCookies == null || typeof(protCookies) == "undefined"
- || protCookies.length == 0) {
- //file does not exist - no protected cookies. Clear them all.
- this.logger.log(3, "No protected cookies. Clearing all cookies.");
- this.clearCookies();
- return;
- }
- var cookiemanager = Services.cookies;
-
- var enumerator = cookiemanager.enumerator;
- var count = 0;
- var protcookie = false;
-
- while (enumerator.hasMoreElements()) {
- var nextCookie = enumerator.getNext();
- if (!nextCookie) break;
-
- nextCookie = nextCookie.QueryInterface(Ci.nsICookie);
- for (var i = 0; i < protCookies.length; i++) {
- protcookie = protcookie || (nextCookie.host == protCookies[i].host &&
- nextCookie.name == protCookies[i].name &&
- nextCookie.path == protCookies[i].path);
- }
-
- if (!protcookie) {
- cookiemanager.remove(nextCookie.host,
- nextCookie.name,
- nextCookie.path, false);
- } else {
- this.logger.log(3, "Found protected cookie for "+nextCookie.host);
- }
- protcookie = false;
- }
- // Emit cookie-changed event. This instructs other components to clear their identifiers
- // (Specifically DOM storage and safe browsing, but possibly others)
- var obsSvc = Services.obs;
- obsSvc.notifyObservers(this, "cookie-changed", "cleared");
- } catch (e) {
- this.logger.log(5, "Error deleting unprotected cookies: " + e);
- }
- };
- // End1506
-
- this.loadCookies = function(name, deleteSavedCookieJar) {
- // remove cookies before loading old ones
- this.clearCookies();
-
- if (!this.prefs.getBoolPref("browser.privatebrowsing.autostart")) {
- // load cookies from file
- this["cookiesobj-" + name] = this._cookiesFromFile(name);
- }
-
- //delete file if needed
- if (deleteSavedCookieJar) {
- try {
- var file = getProfileFile("cookies-" + name + ".json");
- if (file.exists())
- file.remove(false);
- } catch(e) {
- this.logger.log(5, "Can't remove saved "+name+" file "+e);
- }
- }
-
- // load cookies from JS objects
- this._loadCookiesFromJS(this["cookiesobj-"+name]);
- this._loadCookiesFromJS(this["session-cookiesobj-"+name]);
-
- // XXX: send a profile-do-change event?
-
- // ok, everything's fine
- this.logger.log(2, "Cookies reloaded");
- };
-
- // This JSObject is exported directly to chrome
- this.wrappedJSObject = this;
-
- // This timer is done so that in the event of a crash, we at least
- // have recent cookies in a jar to reload from.
- var jarThis = this;
- this.timerCallback = {
- cookie_changed: false,
-
- QueryInterface: ChromeUtils.generateQI(["nsITimer"]),
- notify() {
- // this refers to timerCallback object. use jarThis to reference
- // CookieJarSelector object.
- if(!this.cookie_changed) {
- jarThis.logger.log(2, "Got timer update, but no cookie change.");
- return;
- }
- jarThis.logger.log(3, "Got timer update. Saving changed cookies to jar.");
-
- this.cookie_changed = false;
-
- jarThis.saveCookies("tor");
- jarThis.logger.log(2, "Timer done. Cookies saved");
- }
- };
-
-}
-
-const nsIClassInfo = Ci.nsIClassInfo;
-const nsIObserver = Ci.nsIObserver;
-const nsITimer = Ci.nsITimer;
-
-// Start1506: You may or may not care about this:
-CookieJarSelector.prototype =
-{
- QueryInterface: ChromeUtils.generateQI(["nsIClassInfo", "nsIObserver"]),
-
- wrappedJSObject: null, // Initialized by constructor
-
- // make this an nsIClassInfo object
- flags: nsIClassInfo.DOM_OBJECT,
-
- _xpcom_categories: [{category:"profile-after-change"}],
- classID: kMODULE_CID,
- contractID: kMODULE_CONTRACTID,
- classDescription: "CookieJarSelector",
-
- // method of nsIClassInfo
- getInterfaces: function(count) {
- var interfaceList = [nsIClassInfo];
- count.value = interfaceList.length;
- return interfaceList;
- },
-
- // method of nsIClassInfo
- getHelperForLanguage: function(count) { return null; },
-
- // method of nsIObserver
- observe : function(aSubject, aTopic, aData) {
- switch(aTopic) {
- case "cookie-changed":
- var prefs = Services.prefs;
- this.timerCallback.cookie_changed = true;
-
- if (aData == "added"
- && prefs.getBoolPref("extensions.torbutton.cookie_auto_protect")
- && !prefs.getBoolPref("extensions.torbutton.tor_memory_jar")) {
- this.addProtectedCookie(aSubject.QueryInterface(Ci.nsICookie2));// protect the new cookie!
- }
- break;
- case "profile-after-change":
- var obsSvc = Services.obs;
- obsSvc.addObserver(this, "cookie-changed");
- // after profil loading, initialize a timer to call timerCallback
- // at a specified interval
- this.timer.initWithCallback(this.timerCallback, 60 * 1000, nsITimer.TYPE_REPEATING_SLACK); // 1 minute
- this.logger.log(3, "Cookie jar selector got profile-after-change");
- break;
- }
- },
-
- timer: Cc["@mozilla.org/timer;1"].createInstance(nsITimer),
-
-}
-
-/**
-* XPCOMUtils.generateNSGetFactory was introduced in Mozilla 2 (Firefox 4).
-* XPCOMUtils.generateNSGetModule is for Mozilla 1.9.2 (Firefox 3.6).
-*/
-if (XPCOMUtils.generateNSGetFactory)
- var NSGetFactory = XPCOMUtils.generateNSGetFactory([CookieJarSelector]);
-else
- var NSGetModule = XPCOMUtils.generateNSGetModule([CookieJarSelector]);
-
-// End1506
diff --git a/components/startup-observer.js b/components/startup-observer.js
index bf2f0f48..008134f8 100644
--- a/components/startup-observer.js
+++ b/components/startup-observer.js
@@ -29,6 +29,22 @@ const kMODULE_NAME = "Startup";
const kMODULE_CONTRACTID = "@torproject.org/startup-observer;1";
const kMODULE_CID = Components.ID("06322def-6fde-4c06-aef6-47ae8e799629");
+function cleanupCookies() {
+ const migratedPref = "extensions.torbutton.cookiejar_migrated";
+ if (!Services.prefs.getBoolPref(migratedPref, false)) {
+ // Cleanup stored cookie-jar-selector json files
+ const profileFolder = Services.dirsvc.get("ProfD", Ci.nsIFile).clone();
+ for (const file of profileFolder.directoryEntries) {
+ if (file.leafName.match(/^(cookies|protected)-.*[.]json$/)) {
+ try {
+ file.remove(false);
+ } catch (e) {}
+ }
+ }
+ Services.prefs.setBoolPref(migratedPref, true);
+ }
+}
+
function StartupObserver() {
this.logger = Cc["@torproject.org/torbutton-logger;1"]
.getService(Ci.nsISupports).wrappedJSObject;
@@ -62,6 +78,8 @@ function StartupObserver() {
this.logger.log(4, "Early proxy change failed. Will try again at profile load. Error: "+e);
}
+ cleanupCookies();
+
// Using all possible locales so that we do not have to change this list every time we support
// a new one.
const allLocales = [
diff --git a/defaults/preferences/preferences.js b/defaults/preferences/preferences.js
index acea0a3d..2d1bd99f 100644
--- a/defaults/preferences/preferences.js
+++ b/defaults/preferences/preferences.js
@@ -26,8 +26,6 @@ pref("extensions.torbutton.inserted_security_level",false);
pref("extensions.torbutton.maximize_warnings_remaining", 3);
// Security prefs:
-pref("extensions.torbutton.cookie_protections",true);
-pref("extensions.torbutton.cookie_auto_protect",false);
pref("extensions.torbutton.clear_http_auth",true);
pref("extensions.torbutton.close_newnym",true);
pref("extensions.torbutton.resize_new_windows",false);
diff --git a/jar.mn b/jar.mn
index 6697b543..8b6cbcf7 100644
--- a/jar.mn
+++ b/jar.mn
@@ -97,9 +97,6 @@ torbutton.jar:
% component {06322def-6fde-4c06-aef6-47ae8e799629} %components/startup-observer.js
% contract @torproject.org/startup-observer;1 {06322def-6fde-4c06-aef6-47ae8e799629}
-% component {e6204253-b690-4159-bfe8-d4eedab6b3be} %components/cookie-jar-selector.js
-% contract @torproject.org/cookie-jar-selector;1 {e6204253-b690-4159-bfe8-d4eedab6b3be}
-
% component {5d57312b-5d8c-4169-b4af-e80d6a28a72e} %components/torCheckService.js
% contract @torproject.org/torbutton-torCheckService;1 {5d57312b-5d8c-4169-b4af-e80d6a28a72e}
@@ -109,8 +106,6 @@ torbutton.jar:
% component {e33fd6d4-270f-475f-a96f-ff3140279f68} %components/domain-isolator.js
% contract @torproject.org/domain-isolator;1 {e33fd6d4-270f-475f-a96f-ff3140279f68}
-% category profile-after-change CookieJarSelector @torproject.org/cookie-jar-selector;1
-
% category profile-after-change StartupObserver @torproject.org/startup-observer;1
% category profile-after-change DomainIsolator @torproject.org/domain-isolator;1
% category profile-after-change DragDropFilter @torproject.org/torbutton-dragDropFilter;1
1
0
commit 91108ae426e57d9e84cc7573b1a2ca2d9c69790c
Author: Georg Koppen <gk(a)torproject.org>
Date: Fri Nov 1 13:04:17 2019 +0000
Translations update
---
chrome/locale/fa/aboutTBUpdate.dtd | 2 +-
chrome/locale/fa/aboutTor.dtd | 20 ++++++++++----------
chrome/locale/fa/brand.dtd | 8 ++++----
chrome/locale/fa/brand.properties | 8 ++++----
chrome/locale/fa/browserOnboarding.properties | 16 ++++++++--------
chrome/locale/fa/torbutton.dtd | 10 +++++-----
chrome/locale/fa/torbutton.properties | 10 +++++-----
chrome/locale/it/aboutTor.dtd | 2 +-
chrome/locale/ka/aboutTor.dtd | 2 +-
chrome/locale/mk/aboutTor.dtd | 2 +-
chrome/locale/ru/aboutTor.dtd | 2 +-
chrome/locale/tr/aboutTBUpdate.dtd | 2 +-
chrome/locale/tr/aboutTor.dtd | 2 +-
chrome/locale/tr/browserOnboarding.properties | 2 +-
chrome/locale/tr/torbutton.properties | 2 +-
chrome/locale/zh-CN/aboutTor.dtd | 2 +-
16 files changed, 46 insertions(+), 46 deletions(-)
diff --git a/chrome/locale/fa/aboutTBUpdate.dtd b/chrome/locale/fa/aboutTBUpdate.dtd
index c313e8e5..55aaed87 100644
--- a/chrome/locale/fa/aboutTBUpdate.dtd
+++ b/chrome/locale/fa/aboutTBUpdate.dtd
@@ -1,5 +1,5 @@
<!ENTITY aboutTBUpdate.changelogTitle "گزارش تغییرات Tor Browser">
-<!ENTITY aboutTBUpdate.updated "مرورگر تور بهروز شده است.">
+<!ENTITY aboutTBUpdate.updated "مرورگر Tor بهروز شده است.">
<!ENTITY aboutTBUpdate.linkPrefix "به منظور جدیدترین اطلاعات دربارهی این نسخه،">
<!ENTITY aboutTBUpdate.linkLabel "از وبسایت ما دیدن کنید">
<!ENTITY aboutTBUpdate.linkSuffix ".">
diff --git a/chrome/locale/fa/aboutTor.dtd b/chrome/locale/fa/aboutTor.dtd
index de6571ea..73f9017b 100644
--- a/chrome/locale/fa/aboutTor.dtd
+++ b/chrome/locale/fa/aboutTor.dtd
@@ -4,34 +4,34 @@
- vim: set sw=2 sts=2 ts=8 et syntax=xml:
-->
-<!ENTITY aboutTor.title "دربارهی تور">
+<!ENTITY aboutTor.title "دربارهی Tor">
<!ENTITY aboutTor.viewChangelog.label "دیدن گزارش تغییرات">
<!ENTITY aboutTor.ready.label "کاوش. خصوصی.">
<!ENTITY aboutTor.ready2.label "شما برای تجربه خصوصیترین مرور اینترنت در جهان آماده هستید.">
<!ENTITY aboutTor.failure.label "خطایی پیش آمده است!">
-<!ENTITY aboutTor.failure2.label "تور با این مرورگر کار نمیکند.">
+<!ENTITY aboutTor.failure2.label "Tor با این مرورگر کار نمیکند.">
<!ENTITY aboutTor.search.label "جستجو توسط داکداکگو">
<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com">
<!ENTITY aboutTor.torbrowser_user_manual_questions.label "سوالات؟">
-<!ENTITY aboutTor.torbrowser_user_manual_link.label "بررسی راهنمای مرورگر تور »">
+<!ENTITY aboutTor.torbrowser_user_manual_link.label "بررسی راهنمای مرورگر Tor »">
<!-- The next two entities are used within the browser's Help menu. -->
<!ENTITY aboutTor.torbrowser_user_manual.accesskey "M">
-<!ENTITY aboutTor.torbrowser_user_manual.label "راهنمای مرورگر تور">
+<!ENTITY aboutTor.torbrowser_user_manual.label "راهنمای مرورگر Tor">
-<!ENTITY aboutTor.tor_mission.label "پروژهی تور یک سازمان غیرانتفاعی US 501(c)(3) برای پیشبرد حقوق بشر و آزادی با ایجاد و استقرار تکنولوژیهای گمنامی متن باز و حریم خصوصی است که از در دسترس بودن نامحدود و استفاده و پیشرفت درک علمی و عمومی بشر حمایت میکند.">
+<!ENTITY aboutTor.tor_mission.label "پروژهی Tor یک سازمان غیرانتفاعی US 501(c)(3) برای پیشبرد حقوق بشر و آزادی با ایجاد و استقرار تکنولوژیهای گمنامی متن باز و حریم خصوصی است که از در دسترس بودن نامحدود و استفاده و پیشرفت درک علمی و عمومی بشر حمایت میکند.">
<!ENTITY aboutTor.getInvolved.label "دریافت مشارکت »">
<!ENTITY aboutTor.getInvolved.link "https://www.torproject.org/getinvolved/volunteer.html.en">
-<!ENTITY aboutTor.newsletter.tagline "آخرین اخبار تور را در صندوق ورودی خود دریافت کنید.">
-<!ENTITY aboutTor.newsletter.link_text "ثبتنام برای اخبار تور.">
-<!ENTITY aboutTor.donationBanner.line2e "تور را محکم نگه دارید.">
+<!ENTITY aboutTor.newsletter.tagline "آخرین اخبار Tor را در صندوق ورودی خود دریافت کنید.">
+<!ENTITY aboutTor.newsletter.link_text "ثبتنام برای اخبار Tor.">
+<!ENTITY aboutTor.donationBanner.line2e "Tor را محکم نگه دارید.">
<!ENTITY aboutTor.donationBanner.buttonA "اکنون اهداء کنید">
<!-- End of year 2019 Fundraising campaign -->
<!ENTITY aboutTor.ey2019.mozilla "امروز کمک کنید و موزیلا با کمک مالی شما همراهی میکند.">
-<!ENTITY aboutTor.ey2019.tracking "Tracking, surveillance, and censorship are widespread online.">
-<!ENTITY aboutTor.ey2019.takeback "Take back the Internet with Tor">
+<!ENTITY aboutTor.ey2019.tracking "ردیابی ، نظارت و سانسور به صورت آنلاین گسترده است.">
+<!ENTITY aboutTor.ey2019.takeback "اینترنت را با Tor برگردانید">
diff --git a/chrome/locale/fa/brand.dtd b/chrome/locale/fa/brand.dtd
index 83d0e722..784a2e60 100644
--- a/chrome/locale/fa/brand.dtd
+++ b/chrome/locale/fa/brand.dtd
@@ -2,10 +2,10 @@
- License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-<!ENTITY brandShorterName "مرورگر تور">
-<!ENTITY brandShortName "مرورگر تور">
-<!ENTITY brandFullName "مرورگر تور">
-<!ENTITY vendorShortName "پروژهٔ تور">
+<!ENTITY brandShorterName "مرورگر Tor">
+<!ENTITY brandShortName "مرورگر Tor">
+<!ENTITY brandFullName "مرورگر Tor">
+<!ENTITY vendorShortName "پروژهٔ Tor">
<!ENTITY trademarkInfo.part1 "'Tor' و 'Onion Logo' علامت های تجاری ثبت شده از پروژه Tor هستند">
<!-- The following strings are for bug #10280's UI. We place them here for our translators -->
diff --git a/chrome/locale/fa/brand.properties b/chrome/locale/fa/brand.properties
index b602d0ab..1b6519c9 100644
--- a/chrome/locale/fa/brand.properties
+++ b/chrome/locale/fa/brand.properties
@@ -2,10 +2,10 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-brandShorterName=مرورگر تور
-brandShortName=مرورگر تور
-brandFullName=مرورگر تور
-vendorShortName=پروژه تور
+brandShorterName=مرورگر Tor
+brandShortName=مرورگر Tor
+brandFullName=مرورگر Tor
+vendorShortName=پروژه Tor
homePageSingleStartMain=شروع بکار فایرفاکس، یک صفحه اصلی با قابلیت کادر جستجو ایجاد شد.
homePageImport=درونریزی صفحه خانگی از %S
diff --git a/chrome/locale/fa/browserOnboarding.properties b/chrome/locale/fa/browserOnboarding.properties
index 4d25d226..19dcd9b2 100644
--- a/chrome/locale/fa/browserOnboarding.properties
+++ b/chrome/locale/fa/browserOnboarding.properties
@@ -4,24 +4,24 @@
onboarding.tour-tor-welcome=خوش آمدید
onboarding.tour-tor-welcome.title=شما آماده هستید.
-onboarding.tour-tor-welcome.description=مرورگر تور در هنگام مرورگری وب بالاترین استاندارد در حریم شخصی و امنیت را به شما ارائه میدهد. شما حالا در برابر ردیابی, زیرنظر داشتن و سانسور محافظت میشوید. چگونگی این امر توسط این پذیرش سازمانی سریع به شما نشان داده خواهد شد.
+onboarding.tour-tor-welcome.description=مرورگر Tor در هنگام مرورگری وب بالاترین استاندارد در حریم شخصی و امنیت را به شما ارائه میدهد. شما حالا در برابر ردیابی, زیرنظر داشتن و سانسور محافظت میشوید. چگونگی این امر توسط این پذیرش سازمانی سریع به شما نشان داده خواهد شد.
onboarding.tour-tor-welcome.next-button=برو به حریم خصوصی
onboarding.tour-tor-privacy=حریم خصوصی
onboarding.tour-tor-privacy.title=بو کشنده ها و جاسوس ها
-onboarding.tour-tor-privacy.description=مرورگر تور بعد از هر نشست کلوچه ها و تاریخچه گشت و گذار شما را پاک میکند. اینگونه اصلاحات امنیت و حریم شخصی شما را تضمین میکند. بر روی «شبکه پیازی» کلیک کنید تا یادبگیرید که ما چطور از شما درون شبکه محافظت میکنیم.
-onboarding.tour-tor-privacy.button=برو به شبکه تور
+onboarding.tour-tor-privacy.description=مرورگر Tor بعد از هر نشست کلوچه ها و تاریخچه گشت و گذار شما را پاک میکند. اینگونه اصلاحات امنیت و حریم شخصی شما را تضمین میکند. بر روی «شبکه پیازی» کلیک کنید تا یادبگیرید که ما چطور از شما درون شبکه محافظت میکنیم.
+onboarding.tour-tor-privacy.button=برو به شبکه Tor
-onboarding.tour-tor-network=شبکه تور
+onboarding.tour-tor-network=شبکه Tor
onboarding.tour-tor-network.title=در یک شبکه توضیع شده سفر کنید.
-onboarding.tour-tor-network.description=مرورگر تور شما را به شبکه تور متصل میکند که توسط هزاران داوطلب از گوشه گوشه ی جهان برپا شده است. برخلاف وی پی ان در اینجا هیچ نقطه آسیب پذیر مرکزی که باعث خرابی سیستم بشود یا نیاز باشد که به آن اعتماد کنید تا از وب به طور شخصی لذت ببرید وجود ندارد.
+onboarding.tour-tor-network.description=مرورگر Tor شما را به شبکه Tor متصل میکند که توسط هزاران داوطلب از گوشه گوشه ی جهان برپا شده است. برخلاف وی پی ان در اینجا هیچ نقطه آسیب پذیر مرکزی که باعث خرابی سیستم بشود یا نیاز باشد که به آن اعتماد کنید تا از وب به طور شخصی لذت ببرید وجود ندارد.
onboarding.tour-tor-network.description-para2=NEW: Tor Network Settings, including the ability to request bridges where Tor is blocked, can now be found in Preferences.
onboarding.tour-tor-network.action-button=Adjust Your Tor Network Settings
onboarding.tour-tor-network.button=به نمایش جریان بروید
onboarding.tour-tor-circuit-display=نمایش جریان
onboarding.tour-tor-circuit-display.title=مسیر خود را ببینید.
-onboarding.tour-tor-circuit-display.description=برای هر دامنه که بازدید میکنید، ترافیک شما در جریانی از سه رلهی تور در سراسر جهان رمزگذاری میشود. وبسایت مورد نظر نمیداند که شما از کجا ارتباط را برقرار کردهاید. شما میتوانید درخواست یک جریان جدید را با کلیک بر 'جریان جدید برای این سایت' در بخش نمایش جریان داشته باشید.
+onboarding.tour-tor-circuit-display.description=برای هر دامنه که بازدید میکنید، ترافیک شما در جریانی از سه رلهی Tor در سراسر جهان رمزگذاری میشود. وبسایت مورد نظر نمیداند که شما از کجا ارتباط را برقرار کردهاید. شما میتوانید درخواست یک جریان جدید را با کلیک بر 'جریان جدید برای این سایت' در بخش نمایش جریان داشته باشید.
onboarding.tour-tor-circuit-display.button=مشاهده مسیر من
onboarding.tour-tor-circuit-display.next-button=برو به امنیت
@@ -34,7 +34,7 @@ onboarding.tour-tor-security-level.next-button=برو به نکات تجربه
onboarding.tour-tor-expect-differences=نکات تجربه
onboarding.tour-tor-expect-differences.title=انتظار برخی تفاوتها را داشته باشید.
-onboarding.tour-tor-expect-differences.description=با تمام امکانات امنیت و حریم خصوصی که تور فراهم کرده، تجربه شما در حال استفاده از اینترنت ممکن است کمی متفاوت باشد. همه چیز ممکن است کمی آهستهتر باشد و بسته به سطح امنیت شما بعضی اجزا ممکن است کار نکنند یا بارگیری نشوند. ممکن است گاها از شما درخواست شود که انسان بودن و ربات نبودن خود را اثبات کنید.
+onboarding.tour-tor-expect-differences.description=با تمام امکانات امنیت و حریم خصوصی که Tor فراهم کرده، تجربه شما در حال استفاده از اینترنت ممکن است کمی متفاوت باشد. همه چیز ممکن است کمی آهستهتر باشد و بسته به سطح امنیت شما بعضی اجزا ممکن است کار نکنند یا بارگیری نشوند. ممکن است گاها از شما درخواست شود که انسان بودن و ربات نبودن خود را اثبات کنید.
onboarding.tour-tor-expect-differences.button=مشاهده پرسشگان
onboarding.tour-tor-expect-differences.next-button=به خدمات پیازی بروید
@@ -53,7 +53,7 @@ onboarding.tour-tor-toolbar-update-9.0.title=Goodbye Onion Button.
onboarding.tour-tor-toolbar-update-9.0.description=We want your experience using Tor to be fully integrated within Tor Browser.
onboarding.tour-tor-toolbar-update-9.0.description-para2=That's why now, rather than using the onion button, you can see your Tor Circuit via the [i] in the URL bar and request a New Identity using the toolbar button or the [≡] menu.
onboarding.tour-tor-toolbar-update-9.0.button=How to Request a New Identity
-onboarding.tour-tor-toolbar-update-9.0.next-button=برو به شبکه تور
+onboarding.tour-tor-toolbar-update-9.0.next-button=برو به شبکه Tor
# Circuit Display onboarding.
onboarding.tor-circuit-display.next=بعدی
diff --git a/chrome/locale/fa/torbutton.dtd b/chrome/locale/fa/torbutton.dtd
index 93daabb0..bef0810d 100644
--- a/chrome/locale/fa/torbutton.dtd
+++ b/chrome/locale/fa/torbutton.dtd
@@ -2,14 +2,14 @@
<!ENTITY torbutton.context_menu.new_identity_key "I">
<!ENTITY torbutton.context_menu.new_circuit "شبکه جدید Tor برای این سایت">
<!ENTITY torbutton.context_menu.new_circuit_key "C">
-<!ENTITY torbutton.context_menu.networksettings "تنظیمات شبکه تور">
+<!ENTITY torbutton.context_menu.networksettings "تنظیمات شبکه Tor">
<!ENTITY torbutton.context_menu.networksettings.key "N">
-<!ENTITY torbutton.context_menu.downloadUpdate "بررسی بروز رسانی مرورگر تور">
+<!ENTITY torbutton.context_menu.downloadUpdate "بررسی بروز رسانی مرورگر Tor">
<!ENTITY torbutton.context_menu.downloadUpdate.key "U">
<!ENTITY torbutton.context_menu.cookieProtections "حفاظت کوکی ها...">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "جهت شروع دكمه تُرکليک کنيد">
-<!ENTITY torbutton.prefs.security_settings "تنظیمات امنیتی مرورگر تور">
+<!ENTITY torbutton.prefs.security_settings "تنظیمات امنیتی مرورگر Tor">
<!ENTITY torbutton.cookiedialog.title "مديريت حفاظت کلوچکها">
<!ENTITY torbutton.cookiedialog.lockCol "حفاظت شده">
<!ENTITY torbutton.cookiedialog.domainCol "ميزبان">
@@ -24,7 +24,7 @@
<!ENTITY torbutton.prefs.sec_caption "سطح امنیت">
<!ENTITY torbutton.prefs.sec_caption_tooltip "نوار لغزنده امنیتی به شما اجازه میدهد که مشخصههای خاص مرورگر را غیرفعال کنید که ممکن است مرورگر شما را در برابر تلاشهای هک آسیبپذیر سازد.">
<!ENTITY torbutton.prefs.sec_standard_label "استاندارد">
-<!ENTITY torbutton.prefs.sec_standard_description "همه مرورگر تور و ویژگیهای وبسایت به کار انداخته شدهاند.">
+<!ENTITY torbutton.prefs.sec_standard_description "همه مرورگر Tor و ویژگیهای وبسایت به کار انداخته شدهاند.">
<!ENTITY torbutton.prefs.sec_safer_label "ایمن تر ">
<!ENTITY torbutton.prefs.sec_safer_description "از کار انداختن ویژگیهای وبسایت که اغلب خطرناک هستند و باعث از دست رفتن برخی سایتها میشوند.">
<!ENTITY torbutton.prefs.sec_safer_list_label "تنظیم مکانی امنتر:">
@@ -45,5 +45,5 @@
<!ENTITY torbutton.prefs.sec_custom_summary "تنظیمات سفارشی شما در مرورگر منجر به تغییرات غیر معمول در تنظیمات امنیتی شده است.برای امن نگه داشتن حریم خصوصی خود ما پیشنهاد میکنیم یکی از تنظیمات پیشفرض امنیتی را انتخاب کنید. ">
<!ENTITY torbutton.prefs.sec_restore_defaults "بازگردانی تنظیمات اولیه">
<!ENTITY torbutton.prefs.sec_advanced_security_settings "تنظیمات پیشرفته امنیت ...">
-<!ENTITY torbutton.circuit_display.title "مدار تور">
+<!ENTITY torbutton.circuit_display.title "مدار Tor">
<!ENTITY torbutton.circuit_display.new_circuit "مدار جدید برای این سایت">
diff --git a/chrome/locale/fa/torbutton.properties b/chrome/locale/fa/torbutton.properties
index 23c6309d..5c6ce938 100644
--- a/chrome/locale/fa/torbutton.properties
+++ b/chrome/locale/fa/torbutton.properties
@@ -9,10 +9,10 @@ torbutton.circuit_display.guard = محافظ
torbutton.circuit_display.guard_note = گره [گارد] شما ممکن است تغییر نکند.
torbutton.circuit_display.learn_more = اطلاعات بیشتر
torbutton.content_sizer.margin_tooltip = مرورگر Tor اضافه می کند این حاشیه را به عرض و ارتفاع پنجره شما که کمتر مشخص شود، و در نتیجه باعث کاهش توانایی به ردیابی آنلاین شما شود.
-torbutton.panel.tooltip.disabled = برای فعال کردن تور کليک کنيد
-torbutton.panel.tooltip.enabled = برای غيرفعال کردن تور کليک کنيد
-torbutton.panel.label.disabled = تور غیر فعال شد
-torbutton.panel.label.enabled = تور فعال شد
+torbutton.panel.tooltip.disabled = برای فعال کردن Tor کليک کنيد
+torbutton.panel.tooltip.enabled = برای غيرفعال کردن Tor کليک کنيد
+torbutton.panel.label.disabled = Tor غیر فعال شد
+torbutton.panel.label.enabled = Tor فعال شد
extensions.torbutton(a)torproject.org.description = Torbutton دکمه ای را برای شما فراهم مینماید تا تنظیمات "تر" را پیکربندی کرده و بتوانید به راحتی و سرعت، داده های خصوصی مرورگرتان را پاک کنید.
torbutton.popup.external.title = میخواهید یک فایل نوع بیرونی دانلود شود؟
torbutton.popup.external.app = مرورگر نمیتواند این فایل را نمایش دهد، لازم است تا با برنامه دیگری آن را باز کنید.\n
@@ -34,7 +34,7 @@ torbutton.popup.confirm_newnym = مرورگر Tor همه پنجره ها و تب
torbutton.maximize_warning = ماکسیمایز کردن مرورگر تُر به وبسایت ها این امکان را می دهد که از روی سایز صفحه نمایش، شما را ردگیری کنند. پیشنهاد می کنیم که از سایز پیش فرض مرورگر تُر استفاده کنید.
# Canvas permission prompt. Strings are kept here for ease of translation.
-canvas.siteprompt=این وبسایت (%S) سعی دارد اطلاعات بوم تصویر HTML5 را دریافت کند که ممکن است برای شناسایی منحصر به فرد کامپیوتر شما استفاده شود.\n\nآیا مرورگر تور میبایست اجازه دریافت این اطلاعات را بدهد؟
+canvas.siteprompt=این وبسایت (%S) سعی دارد اطلاعات بوم تصویر HTML5 را دریافت کند که ممکن است برای شناسایی منحصر به فرد کامپیوتر شما استفاده شود.\n\nآیا مرورگر Tor میبایست اجازه دریافت این اطلاعات را بدهد؟
canvas.notNow=نه در حال حاضر
canvas.notNowAccessKey=N
canvas.allow=اجازه دهید در آینده
diff --git a/chrome/locale/it/aboutTor.dtd b/chrome/locale/it/aboutTor.dtd
index a7d1b2ff..a250de89 100644
--- a/chrome/locale/it/aboutTor.dtd
+++ b/chrome/locale/it/aboutTor.dtd
@@ -34,4 +34,4 @@
<!-- End of year 2019 Fundraising campaign -->
<!ENTITY aboutTor.ey2019.mozilla "Dai oggi, e Mozilla ricambierà la tua donazione.">
<!ENTITY aboutTor.ey2019.tracking "Tracciamento, sorveglianza e censura sono ampiamente diffuse in rete.">
-<!ENTITY aboutTor.ey2019.takeback "Take back the Internet with Tor">
+<!ENTITY aboutTor.ey2019.takeback "Riprendi possesso di internet con Tor">
diff --git a/chrome/locale/ka/aboutTor.dtd b/chrome/locale/ka/aboutTor.dtd
index f815fce2..4a47f3d8 100644
--- a/chrome/locale/ka/aboutTor.dtd
+++ b/chrome/locale/ka/aboutTor.dtd
@@ -34,4 +34,4 @@
<!-- End of year 2019 Fundraising campaign -->
<!ENTITY aboutTor.ey2019.mozilla "გაეცით დღესვე და Mozilla გააორმაგებს თქვენს შემოწირულობას.">
<!ENTITY aboutTor.ey2019.tracking "მეთვალყურეობა, ზედამხედველობა და აკრძალვები მთელ ინტერნეტშია გავრცელებული.">
-<!ENTITY aboutTor.ey2019.takeback "Take back the Internet with Tor">
+<!ENTITY aboutTor.ey2019.takeback "დაიბრუნეთ ინტერნეტი Tor-ით.">
diff --git a/chrome/locale/mk/aboutTor.dtd b/chrome/locale/mk/aboutTor.dtd
index 17cb2320..8dd5c069 100644
--- a/chrome/locale/mk/aboutTor.dtd
+++ b/chrome/locale/mk/aboutTor.dtd
@@ -34,4 +34,4 @@
<!-- End of year 2019 Fundraising campaign -->
<!ENTITY aboutTor.ey2019.mozilla "Донирај денес, и Mozilla ќе ја поврзе Вашата донација.">
<!ENTITY aboutTor.ey2019.tracking "Следењето, надзорот, и цензурата се раширени насекаде низ Интернетот.">
-<!ENTITY aboutTor.ey2019.takeback "Take back the Internet with Tor">
+<!ENTITY aboutTor.ey2019.takeback "Вратете го назад вашиот Интернет со Tor">
diff --git a/chrome/locale/ru/aboutTor.dtd b/chrome/locale/ru/aboutTor.dtd
index 6e607bab..d38920d1 100644
--- a/chrome/locale/ru/aboutTor.dtd
+++ b/chrome/locale/ru/aboutTor.dtd
@@ -34,4 +34,4 @@
<!-- End of year 2019 Fundraising campaign -->
<!ENTITY aboutTor.ey2019.mozilla "Пожертвуйте сегодня и Mozilla удвоит ваше пожертвование.">
<!ENTITY aboutTor.ey2019.tracking "Отслеживание, наблюдение и цензура широко распространены в интернете.">
-<!ENTITY aboutTor.ey2019.takeback "Take back the Internet with Tor">
+<!ENTITY aboutTor.ey2019.takeback "Верните себе интернет вместе с Tor">
diff --git a/chrome/locale/tr/aboutTBUpdate.dtd b/chrome/locale/tr/aboutTBUpdate.dtd
index d8e3612f..74068bae 100644
--- a/chrome/locale/tr/aboutTBUpdate.dtd
+++ b/chrome/locale/tr/aboutTBUpdate.dtd
@@ -1,6 +1,6 @@
<!ENTITY aboutTBUpdate.changelogTitle "Tor Browser Değişiklik Günlüğü">
<!ENTITY aboutTBUpdate.updated "Tor Browser güncellendi.">
-<!ENTITY aboutTBUpdate.linkPrefix "Bu sürüm hakkındaki güncel bilgiler ">
+<!ENTITY aboutTBUpdate.linkPrefix "Bu sürüm hakkındaki güncel bilgileri ">
<!ENTITY aboutTBUpdate.linkLabel "web sitemizden edinilebilir">
<!ENTITY aboutTBUpdate.linkSuffix ".">
<!ENTITY aboutTBUpdate.version "Sürüm">
diff --git a/chrome/locale/tr/aboutTor.dtd b/chrome/locale/tr/aboutTor.dtd
index e3b214ab..dde5fe76 100644
--- a/chrome/locale/tr/aboutTor.dtd
+++ b/chrome/locale/tr/aboutTor.dtd
@@ -34,4 +34,4 @@
<!-- End of year 2019 Fundraising campaign -->
<!ENTITY aboutTor.ey2019.mozilla "Bugün yaptığınız her bağış kadar Mozilla da bağış yapacak.">
<!ENTITY aboutTor.ey2019.tracking "Çevrimiçi izleme, gözetim ve sansür uygulamaları yaygındır.">
-<!ENTITY aboutTor.ey2019.takeback "Take back the Internet with Tor">
+<!ENTITY aboutTor.ey2019.takeback "Tor kullanın İnterneti geri alın.">
diff --git a/chrome/locale/tr/browserOnboarding.properties b/chrome/locale/tr/browserOnboarding.properties
index b5e9b49f..84894a19 100644
--- a/chrome/locale/tr/browserOnboarding.properties
+++ b/chrome/locale/tr/browserOnboarding.properties
@@ -14,7 +14,7 @@ onboarding.tour-tor-privacy.button=Tor Ağına Geç
onboarding.tour-tor-network=Tor Ağı
onboarding.tour-tor-network.title=Tek merkezden yönetilmeyen bir ağda gezinin.
-onboarding.tour-tor-network.description=Tor Browser sizi tüm dünyada binlerce gönüllü tarafından işletilen Tor Ağına bağlar. VPN bağlantısının aksine güvenlik açığı oluşturacak bir nokta ya da İnternet üzerinde kişisel gizliliğinizi koruyarak gezinmeniz için güvenmeniz gereken merkezi bir kuruluş yoktur.
+onboarding.tour-tor-network.description=Tor Browser sizi dünyada binlerce gönüllü tarafından işletilen Tor Ağına bağlar. VPN bağlantısının aksine, bir güvenlik açığı ya da İnternet üzerinde kişisel gizliliğinizi koruması için güvenmeniz gereken merkezi bir kuruluş yoktur.
onboarding.tour-tor-network.description-para2=YENİ: Tor Ağı Ayarları, Tor ağına erişimin engellendiği yerlerde köprü isteğinde bulunma özelliği artı Ayarlar bölümü altında bulunabilir.
onboarding.tour-tor-network.action-button=Tor Ağı Ayarlarınızı Yapın
onboarding.tour-tor-network.button=Devre Görünümüne Geç
diff --git a/chrome/locale/tr/torbutton.properties b/chrome/locale/tr/torbutton.properties
index 4523d729..bf65f4af 100644
--- a/chrome/locale/tr/torbutton.properties
+++ b/chrome/locale/tr/torbutton.properties
@@ -6,7 +6,7 @@ torbutton.circuit_display.relay = Aktarıcı
torbutton.circuit_display.tor_bridge = Köprü
torbutton.circuit_display.unknown_country = Bilinmeyen Ülke
torbutton.circuit_display.guard = Koruma
-torbutton.circuit_display.guard_note = [Guard] düğümünüz değiştirilemez.
+torbutton.circuit_display.guard_note = [Koruma] düğümünüz değiştirilemez.
torbutton.circuit_display.learn_more = Ayrıntılı bilgi alın
torbutton.content_sizer.margin_tooltip = Tor Browser pencerenizin genişlik ve yüksekliğini daha az ayırt edilebilir duruma getirmek için kenar boşlukları ekleyerek kişilerin sizi çevrim içi olarak izleme yeteneğini azaltır.
torbutton.panel.tooltip.disabled = Tor uygulamasını etkinleştirmek için tıklayın
diff --git a/chrome/locale/zh-CN/aboutTor.dtd b/chrome/locale/zh-CN/aboutTor.dtd
index 469bdd1a..f0468fbf 100644
--- a/chrome/locale/zh-CN/aboutTor.dtd
+++ b/chrome/locale/zh-CN/aboutTor.dtd
@@ -34,4 +34,4 @@
<!-- End of year 2019 Fundraising campaign -->
<!ENTITY aboutTor.ey2019.mozilla "现在捐款, Mozilla 会匹配你的捐赠。">
<!ENTITY aboutTor.ey2019.tracking "跟踪,监视和审查在网上广泛存在。">
-<!ENTITY aboutTor.ey2019.takeback "Take back the Internet with Tor">
+<!ENTITY aboutTor.ey2019.takeback "使用 Tor 夺回互联网">
1
0

[torbutton/maint-9.0] Bug 30851: Move default preferences to 000-tor-browser.js
by sysrqb@torproject.org 03 Jan '20
by sysrqb@torproject.org 03 Jan '20
03 Jan '20
commit 59cabca7ade54fa4f5fec2a398456dbc3891009a
Author: Alex Catarineu <acat(a)torproject.org>
Date: Mon Jun 10 17:49:38 2019 +0200
Bug 30851: Move default preferences to 000-tor-browser.js
---
chrome/content/locale/non-localized.properties | 6 ---
components/domain-isolator.js | 3 --
components/dragDropFilter.js | 2 -
components/startup-observer.js | 1 -
components/torbutton-logger.js | 2 -
defaults/preferences/preferences.js | 55 --------------------------
jar.mn | 1 -
modules/default-prefs.js | 36 -----------------
moz.build | 3 --
9 files changed, 109 deletions(-)
diff --git a/chrome/content/locale/non-localized.properties b/chrome/content/locale/non-localized.properties
deleted file mode 100644
index dca78639..00000000
--- a/chrome/content/locale/non-localized.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-# This file must be located in a subdirectory named "locale" so that
-# about:config will display the correct value for browser.startup.homepage.
-# See fetchPref() inside toolkit/components/viewconfig/content/config.js
-
-# Default home page
-browser.startup.homepage=about:tor
diff --git a/components/domain-isolator.js b/components/domain-isolator.js
index f6a6d598..3ed6e58f 100644
--- a/components/domain-isolator.js
+++ b/components/domain-isolator.js
@@ -15,9 +15,6 @@ const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm
let logger = Cc["@torproject.org/torbutton-logger;1"]
.getService(Ci.nsISupports).wrappedJSObject;
-let { ensureDefaultPrefs } = ChromeUtils.import("resource://torbutton/modules/default-prefs.js", {});
-ensureDefaultPrefs();
-
// Import crypto object (FF 37+).
Cu.importGlobalProperties(["crypto"]);
diff --git a/components/dragDropFilter.js b/components/dragDropFilter.js
index 9d6f74c8..f48d1b38 100644
--- a/components/dragDropFilter.js
+++ b/components/dragDropFilter.js
@@ -6,8 +6,6 @@
*************************************************************************/
-ChromeUtils.import("resource://torbutton/modules/default-prefs.js", {}).ensureDefaultPrefs();
-
const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
diff --git a/components/startup-observer.js b/components/startup-observer.js
index 008134f8..d2d1d610 100644
--- a/components/startup-observer.js
+++ b/components/startup-observer.js
@@ -21,7 +21,6 @@ XPCOMUtils.defineLazyModuleGetters(this, {
L10nRegistry: "resource://gre/modules/L10nRegistry.jsm",
});
-ChromeUtils.import("resource://torbutton/modules/default-prefs.js", {}).ensureDefaultPrefs();
let NoScriptControl = ChromeUtils.import("resource://torbutton/modules/noscript-control.js", {});
// Module specific constants
diff --git a/components/torbutton-logger.js b/components/torbutton-logger.js
index 52fdfc23..1c946fa7 100644
--- a/components/torbutton-logger.js
+++ b/components/torbutton-logger.js
@@ -13,8 +13,6 @@ const kMODULE_NAME = "Torbutton Logger";
const kMODULE_CONTRACTID = "@torproject.org/torbutton-logger;1";
const kMODULE_CID = Components.ID("f36d72c9-9718-4134-b550-e109638331d7");
-ChromeUtils.import("resource://torbutton/modules/default-prefs.js", {}).ensureDefaultPrefs();
-
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
diff --git a/defaults/preferences/preferences.js b/defaults/preferences/preferences.js
deleted file mode 100644
index 100302b7..00000000
--- a/defaults/preferences/preferences.js
+++ /dev/null
@@ -1,55 +0,0 @@
-// debug prefs
-pref("extensions.torbutton.loglevel",4);
-pref("extensions.torbutton.logmethod",1); // 0=stdout, 1=errorconsole, 2=debuglog
-
-// Display prefs
-pref("extensions.torbutton.display_circuit", true);
-pref("extensions.torbutton(a)torproject.org.description", "chrome://torbutton/locale/torbutton.properties");
-pref("extensions.torbutton.updateNeeded", false);
-
-// Tor check and proxy prefs
-pref("extensions.torbutton.test_enabled",true);
-pref("extensions.torbutton.test_url","https://check.torproject.org/?TorButton=true");
-pref("extensions.torbutton.local_tor_check",true);
-pref("extensions.torbutton.versioncheck_url","https://www.torproject.org/projects/torbrowser/RecommendedTBBVersions");
-pref("extensions.torbutton.versioncheck_enabled",true);
-pref("extensions.torbutton.use_nontor_proxy",false);
-
-// State prefs:
-pref("extensions.torbutton.startup",false);
-pref("extensions.torbutton.inserted_button",false);
-pref("extensions.torbutton.inserted_security_level",false);
-
-// TODO: This is just part of a stopgap until #14429 gets properly implemented.
-// See #7255 for details. We display the warning three times to make sure the
-// user did not click on it by accident.
-pref("extensions.torbutton.maximize_warnings_remaining", 3);
-
-// Security prefs:
-pref("extensions.torbutton.clear_http_auth",true);
-pref("extensions.torbutton.close_newnym",true);
-pref("extensions.torbutton.resize_new_windows",false);
-pref("extensions.torbutton.startup_state", 2); // 0=non-tor, 1=tor, 2=last
-pref("extensions.torbutton.tor_memory_jar",false);
-pref("extensions.torbutton.nontor_memory_jar",false);
-pref("extensions.torbutton.launch_warning",true);
-
-// Opt out of Firefox addon pings:
-// https://developer.mozilla.org/en/Addons/Working_with_AMO
-pref("extensions.torbutton(a)torproject.org.getAddons.cache.enabled", false);
-
-// Security Slider
-pref("extensions.torbutton.security_slider", 4);
-pref("extensions.torbutton.security_custom", false);
-
-pref("extensions.torbutton.confirm_plugins", true);
-pref("extensions.torbutton.confirm_newnym", true);
-
-pref("extensions.torbutton.noscript_inited", false);
-pref("extensions.torbutton.noscript_persist", false);
-
-// Browser home page:
-pref("browser.startup.homepage", "chrome://torbutton/content/locale/non-localized.properties");
-
-// This pref specifies an ad-hoc "version" for various pref update hacks we need to do
-pref("extensions.torbutton.pref_fixup_version", 0);
diff --git a/jar.mn b/jar.mn
index 8b6cbcf7..2c6d186b 100644
--- a/jar.mn
+++ b/jar.mn
@@ -6,7 +6,6 @@ torbutton.jar:
content/ (chrome/content/*)
components/ (components/*)
- defaults/ (defaults/*)
modules/ (modules/*)
skin/ (chrome/skin/*)
diff --git a/modules/default-prefs.js b/modules/default-prefs.js
deleted file mode 100644
index 5ea549f4..00000000
--- a/modules/default-prefs.js
+++ /dev/null
@@ -1,36 +0,0 @@
-let loaded = false;
-
-function ensureDefaultPrefs () {
- if (loaded) {
- return;
- }
- const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
- const kDefaultPreferences = "resource://torbutton/defaults/preferences/preferences.js";
- const defaultPrefBranch = Services.prefs.getDefaultBranch(null);
-
- const context = {
- pref: function (aPrefName, aValue) {
- const aValueType = typeof aValue;
- if (aValueType === "boolean") {
- defaultPrefBranch.setBoolPref(aPrefName, aValue);
- } else if (aValueType === "number") {
- defaultPrefBranch.setIntPref(aPrefName, aValue);
- } else if (aValueType === "string") {
- defaultPrefBranch.setCharPref(aPrefName, aValue);
- } else {
- Services.console.logStringMessage(
- `Preference ${aPrefName} with value ${aValue} has an invalid value type`);
- }
-
- // Disable the External App Blocker on Android
- if ((aPrefName === "extensions.torbutton.launch_warning") &&
- (Services.appinfo.OS === "Android")) {
- defaultPrefBranch.setBoolPref(aPrefName, false);
- }
- }
- };
- Services.scriptloader.loadSubScript(kDefaultPreferences, context);
- loaded = true;
-}
-
-let EXPORTED_SYMBOLS = ["ensureDefaultPrefs"];
diff --git a/moz.build b/moz.build
index 843cee0d..376c9976 100644
--- a/moz.build
+++ b/moz.build
@@ -4,6 +4,3 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
JAR_MANIFESTS += ['jar.mn']
-JS_PREFERENCE_FILES += [
- 'defaults/preferences/preferences.js',
-]
1
0

[torbutton/maint-9.0] Bug 30237: Add strings for v3 onion services client authentication
by sysrqb@torproject.org 03 Jan '20
by sysrqb@torproject.org 03 Jan '20
03 Jan '20
commit fa05e61cac497a7fbe3050ee8a9f4f6ec39be3a4
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Tue Nov 12 15:39:19 2019 -0500
Bug 30237: Add strings for v3 onion services client authentication
---
chrome/locale/en-US/torbutton.dtd | 3 +++
chrome/locale/en-US/torbutton.properties | 10 ++++++++++
2 files changed, 13 insertions(+)
diff --git a/chrome/locale/en-US/torbutton.dtd b/chrome/locale/en-US/torbutton.dtd
index d14bd1da..ed3cb1a6 100644
--- a/chrome/locale/en-US/torbutton.dtd
+++ b/chrome/locale/en-US/torbutton.dtd
@@ -47,3 +47,6 @@
<!ENTITY torbutton.prefs.sec_advanced_security_settings "Advanced Security Settings…">
<!ENTITY torbutton.circuit_display.title "Tor Circuit">
<!ENTITY torbutton.circuit_display.new_circuit "New Circuit for this Site">
+
+<!-- Onion services strings. Strings are kept here for ease of translation. -->
+<!ENTITY torbutton.onionServices.authPrompt.tooltip "Open onion service client authentication prompt">
diff --git a/chrome/locale/en-US/torbutton.properties b/chrome/locale/en-US/torbutton.properties
index ea7a7d63..1020e57a 100644
--- a/chrome/locale/en-US/torbutton.properties
+++ b/chrome/locale/en-US/torbutton.properties
@@ -58,3 +58,13 @@ updateDownloadingPanelUILabel=Downloading %S update
# .Onion Page Info prompt. Strings are kept here for ease of translation.
pageInfo_OnionEncryptionWithBitsAndProtocol=Connection Encrypted (Onion Service, %1$S, %2$S bit keys, %3$S)
pageInfo_OnionEncryption=Connection Encrypted (Onion Service)
+
+# Onion services strings. Strings are kept here for ease of translation.
+# LOCALIZATION NOTE: %S will be replaced with the .onion address.
+onionServices.clientAuthMissing=Tor onion service missing client authorization
+onionServices.authPrompt.description=%S is requesting your private key.
+onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service
+onionServices.authPrompt.done=Done
+onionServices.authPrompt.doneAccessKey=d
+onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters)
+onionServices.authPrompt.failedToSetKey=Unable to configure Tor with your key
1
0

[torbutton/maint-9.0] Bug 30237: Control port module improvements for v3 client authentication
by sysrqb@torproject.org 03 Jan '20
by sysrqb@torproject.org 03 Jan '20
03 Jan '20
commit 46efc92348dbed06fc31ddfb0a5ac2e4e8554de2
Author: Kathy Brade <brade(a)pearlcrescent.com>
Date: Tue Nov 12 15:38:10 2019 -0500
Bug 30237: Control port module improvements for v3 client authentication
Split the configuration portion of the controller() function into
a new configureControlPortModule() function. This allows the
Torbutton code to continue to own the configuration (with help from
Tor Launcher) while making it possible for the v3 client authentication
prompt to use Torbutton's control port module.
Also, include error information returned by Tor within error objects
generated by the control port module and add support for Tor's new
ONION_CLIENT_AUTH_ADD control port command.
---
chrome/content/tor-circuit-display.js | 21 ++++----
chrome/content/torbutton.js | 8 +--
modules/tor-control-port.js | 95 ++++++++++++++++++++++++++++-------
3 files changed, 92 insertions(+), 32 deletions(-)
diff --git a/chrome/content/tor-circuit-display.js b/chrome/content/tor-circuit-display.js
index 21bcc57b..1e58b2b4 100644
--- a/chrome/content/tor-circuit-display.js
+++ b/chrome/content/tor-circuit-display.js
@@ -6,9 +6,8 @@
// with docco.js to produce pretty documentation.
//
// This script is to be embedded in torbutton.xul. It defines a single global
-// function, createTorCircuitDisplay(ipcFile, host, port, password), which
-// activates the automatic Tor circuit display for the current tab and any
-// future tabs.
+// function, createTorCircuitDisplay(), which activates the automatic Tor
+// circuit display for the current tab and any future tabs.
//
// See https://trac.torproject.org/8641
@@ -16,11 +15,12 @@
/* global document, gBrowser, Components */
// ### Main function
-// __createTorCircuitDisplay(ipcFile, host, port, password, enablePrefName)__.
+// __createTorCircuitDisplay(enablePrefName)__.
// The single function that prepares tor circuit display. Connects to a tor
-// control port with the given ipcFile or host plus port, and password, and
-// binds to a named bool pref whose value determines whether the circuit display
-// is enabled or disabled.
+// control port using information provided to the control port module via
+// a previous call to configureControlPortModule(), and binds to a named
+// bool pref whose value determines whether the circuit display is enabled
+// or disabled.
let createTorCircuitDisplay = (function () {
"use strict";
@@ -415,11 +415,11 @@ let ensureCorrectPopupDimensions = function () {
// ## Main function
-// __setupDisplay(ipcFile, host, port, password, enablePrefName)__.
+// __setupDisplay(enablePrefName)__.
// Once called, the Tor circuit display will be started whenever
// the "enablePref" is set to true, and stopped when it is set to false.
// A reference to this function (called createTorCircuitDisplay) is exported as a global.
-let setupDisplay = function (ipcFile, host, port, password, enablePrefName) {
+let setupDisplay = function (enablePrefName) {
setupGuardNote();
let myController = null,
stopCollectingIsolationData = null,
@@ -442,8 +442,7 @@ let setupDisplay = function (ipcFile, host, port, password, enablePrefName) {
},
start = function () {
if (!myController) {
- myController = controller(ipcFile, host, port || 9151, password,
- function (err) {
+ myController = controller(function (err) {
// An error has occurred.
logger.eclog(5, err);
logger.eclog(5, "Disabling tor display circuit because of an error.");
diff --git a/chrome/content/torbutton.js b/chrome/content/torbutton.js
index aacae042..b9642a89 100644
--- a/chrome/content/torbutton.js
+++ b/chrome/content/torbutton.js
@@ -21,6 +21,7 @@ let {
getDomainForBrowser,
} = ChromeUtils.import("resource://torbutton/modules/utils.js", {});
let SecurityPrefs = ChromeUtils.import("resource://torbutton/modules/security-prefs.js", {});
+let { configureControlPortModule } = Cu.import("resource://torbutton/modules/tor-control-port.js", {});
const k_tb_last_browser_version_pref = "extensions.torbutton.lastBrowserVersion";
const k_tb_browser_update_needed_pref = "extensions.torbutton.updateNeeded";
@@ -334,6 +335,9 @@ function torbutton_init() {
}
}
+ configureControlPortModule(m_tb_control_ipc_file, m_tb_control_host,
+ m_tb_control_port, m_tb_control_pass);
+
// Add about:tor IPC message listener.
window.messageManager.addMessageListener("AboutTor:Loaded",
torbutton_abouttor_message_handler);
@@ -353,9 +357,7 @@ function torbutton_init() {
torbutton_notify_if_update_needed();
try {
- createTorCircuitDisplay(m_tb_control_ipc_file, m_tb_control_host,
- m_tb_control_port, m_tb_control_pass,
- "extensions.torbutton.display_circuit");
+ createTorCircuitDisplay("extensions.torbutton.display_circuit");
} catch(e) {
torbutton_log(4, "Error creating the tor circuit display " + e);
}
diff --git a/modules/tor-control-port.js b/modules/tor-control-port.js
index 9f6dbeb6..1b0a79ad 100644
--- a/modules/tor-control-port.js
+++ b/modules/tor-control-port.js
@@ -7,10 +7,15 @@
//
// To import the module, use
//
-// let { controller } = Components.utils.import("path/to/tor-control-port.js", {});
+// let { configureControlPortModule, controller } =
+// Components.utils.import("path/to/tor-control-port.js", {});
+//
+// See the second-to-last function defined in this file:
+// configureControlPortModule(ipcFile, host, port, password)
+// for usage of the configureControlPortModule function.
//
// See the last function defined in this file:
-// controller(ipcFile, host, port, password, onError)
+// controller(onError)
// for usage of the controller function.
/* jshint esnext: true */
@@ -229,7 +234,16 @@ io.matchRepliesToCommands = function (asyncSend, dispatcher) {
let [command, replyCallback, errorCallback] = commandQueue.shift();
if (message.match(/^2/) && replyCallback) replyCallback(message);
if (message.match(/^[45]/) && errorCallback) {
- errorCallback(new Error(command + " -> " + message));
+ let myErr = new Error(command + " -> " + message);
+ // Add Tor-specific information to the Error object.
+ let idx = message.indexOf(' ');
+ if (idx > 0) {
+ myErr.torStatusCode = message.substring(0, idx);
+ myErr.torMessage = message.substring(idx);
+ } else {
+ myErr.torStatusCode = message;
+ }
+ errorCallback(myErr);
}
});
// Create and return a version of sendCommand that returns a Promise.
@@ -562,6 +576,24 @@ info.getConf = function (aControlSocket, key) {
.then(info.getMultipleResponseValues);
};
+// ## onionAuth
+// A namespace for functions related to tor's ONION_CLIENT_AUTH_* commands.
+let onionAuth = {};
+
+// __onionAuth.add(controlSocket, hsAddress, b64PrivateKey, nickname, isPermanent)__.
+// Sends a ONION_CLIENT_AUTH_ADD command to add a private key to the
+// Tor configuration.
+onionAuth.add = function (aControlSocket, hsAddress, b64PrivateKey,
+ nickname, isPermanent) {
+ const keyType = "x25519";
+ let cmd = `onion_client_auth_add ${hsAddress} ${keyType}:${b64PrivateKey}`;
+ if (nickname)
+ cmd += ` ClientName=${nickname}`;
+ if (isPermanent)
+ cmd += " Flags=Permanent";
+ return aControlSocket.sendCommand(cmd);
+};
+
// ## event
// Handlers for events
@@ -617,6 +649,9 @@ tor.controller = function (ipcFile, host, port, password, onError) {
isOpen = true;
return { getInfo : key => info.getInfo(socket, key),
getConf : key => info.getConf(socket, key),
+ onionAuthAdd : (hsAddress, b64PrivateKey, nickname, isPermanent) =>
+ onionAuth.add(socket, hsAddress, b64PrivateKey,
+ nickname, isPermanent),
watchEvent : (type, filter, onData) =>
event.watchEvent(socket, type, filter, onData),
isOpen : () => isOpen,
@@ -626,29 +661,53 @@ tor.controller = function (ipcFile, host, port, password, onError) {
// ## Export
-// __controller(ipcFile, host, port, password, onError)__.
-// Instantiates and returns a controller object connected to a tor ControlPort
-// on ipcFile or at host:port, authenticating with the given password, if
-// the controller doesn't yet exist. Otherwise returns the existing controller
-// to the given ipcFile or host:port.
+let controlPortInfo = {};
+
+// __configureControlPortModule(ipcFile, host, port, password)__.
+// Sets Tor control port connection parameters to be used in future calls to
+// the controller() function. Example:
+// configureControlPortModule(undefined, "127.0.0.1", 9151, "MyPassw0rd");
+var configureControlPortModule = function (ipcFile, host, port, password) {
+ controlPortInfo.ipcFile = ipcFile;
+ controlPortInfo.host = host;
+ controlPortInfo.port = port || 9151;
+ controlPortInfo.password = password;
+};
+
+// __controller(onError)__.
+// Instantiates and returns a controller object that is connected and
+// authenticated to a Tor ControlPort using the connection parameters
+// provided in the most recent call to configureControlPortModule(), if
+// the controller doesn't yet exist. Otherwise returns the existing
+// controller to the given ipcFile or host:port.
// onError is called with an error object as its single argument whenever
// an error occurs. Example:
//
// // Get the controller
-// let c = controller(undefined, "127.0.0.1", 9151, "MyPassw0rd",
+// let c = controller(
// function (error) { console.log(error.message || error); });
// // Send command and receive `250` reply or error message in a promise:
// let replyPromise = c.getInfo("ip-to-country/16.16.16.16");
// // Close the controller permanently
// c.close();
-var controller = function (ipcFile, host, port, password, onError) {
- let dest = (ipcFile) ? "unix:" + ipcFile.path : host + ":" + port,
- maybeController = tor.controllerCache[dest];
- return (tor.controllerCache[dest] =
- (maybeController && maybeController.isOpen()) ?
- maybeController :
- tor.controller(ipcFile, host, port, password, onError));
+var controller = function (onError) {
+ if (!controlPortInfo.ipcFile && !controlPortInfo.host)
+ throw new Error("Please call configureControlPortModule first");
+
+ const dest = (controlPortInfo.ipcFile)
+ ? `unix:${controlPortInfo.ipcFile.path}`
+ : `${controlPortInfo.host}:${controlPortInfo.port}`;
+ const maybeController = tor.controllerCache[dest];
+ if (maybeController && maybeController.isOpen())
+ return maybeController;
+
+ tor.controllerCache[dest] = tor.controller(controlPortInfo.ipcFile,
+ controlPortInfo.host,
+ controlPortInfo.port,
+ controlPortInfo.password,
+ onError);
+ return tor.controllerCache[dest];
};
-// Export the controller function for external use.
-var EXPORTED_SYMBOLS = ["controller"];
+// Export functions for external use.
+var EXPORTED_SYMBOLS = ["configureControlPortModule", "controller"];
1
0
commit bc12e0ce5addc311a2108045e2989bda201ca983
Author: Georg Koppen <gk(a)torproject.org>
Date: Mon Nov 25 09:25:56 2019 +0000
Translations update
---
chrome/locale/ar/aboutDialog.dtd | 10 +++++-----
chrome/locale/ar/torbutton.dtd | 2 +-
chrome/locale/ar/torbutton.properties | 10 +++++-----
chrome/locale/da/browserOnboarding.properties | 4 ++--
chrome/locale/da/torbutton.dtd | 2 +-
chrome/locale/da/torbutton.properties | 16 ++++++++--------
chrome/locale/it/torbutton.dtd | 2 +-
chrome/locale/it/torbutton.properties | 10 +++++-----
chrome/locale/ja/browserOnboarding.properties | 2 +-
chrome/locale/pt-BR/torbutton.dtd | 2 +-
chrome/locale/pt-BR/torbutton.properties | 10 +++++-----
chrome/locale/zh-TW/aboutTor.dtd | 4 ++--
chrome/locale/zh-TW/torbutton.dtd | 2 +-
13 files changed, 38 insertions(+), 38 deletions(-)
diff --git a/chrome/locale/ar/aboutDialog.dtd b/chrome/locale/ar/aboutDialog.dtd
index e211f8b1..f2b2adfe 100644
--- a/chrome/locale/ar/aboutDialog.dtd
+++ b/chrome/locale/ar/aboutDialog.dtd
@@ -1,19 +1,19 @@
-<!ENTITY project.start "طوّر &brandShortName;">
+<!ENTITY project.start " تطوير: &brandShortName;">
<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org -->
<!ENTITY project.tpoLink "&vendorShortName;">
-<!ENTITY project.end "، مؤسسة غير هادفة للربح تعمل على حماية خصوصيتك وحريتك على الإنترنت.">
+<!ENTITY project.end "، مؤسسة غير هادفة للرّبح تعمل على حماية الخصوصيّة والحرّية على الإنترنت.">
<!ENTITY help.start "هل ترغب في المساعدة؟">
<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en -->
<!ENTITY help.donateLink "تبرّع">
<!ENTITY help.or "أو">
<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en -->
-<!ENTITY help.getInvolvedLink "شارك">
+<!ENTITY help.getInvolvedLink "شاركوا">
<!ENTITY help.end "!">
<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/docs/trademark-faq.html.en -->
<!ENTITY bottomLinks.questions "أية أسئلة؟">
<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays -->
-<!ENTITY bottomLinks.grow "ساعد شبكة تور على النمو.">
+<!ENTITY bottomLinks.grow "ساعدوا شبكة تور على النّمو!">
<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license -->
<!ENTITY bottomLinks.license "معلومات الترخيص">
-<!ENTITY tor.TrademarkStatement ""تور" و "شعار البصلة" علامات تجارية مسجلة باسم شركة مشروع تور المحدودة">
+<!ENTITY tor.TrademarkStatement ""تور" و "شعار البصلة" هي علامات تجاريّة مسجّلة باسم مشروع تور المحدودة">
diff --git a/chrome/locale/ar/torbutton.dtd b/chrome/locale/ar/torbutton.dtd
index 312f663c..0f63af50 100644
--- a/chrome/locale/ar/torbutton.dtd
+++ b/chrome/locale/ar/torbutton.dtd
@@ -49,4 +49,4 @@
<!ENTITY torbutton.circuit_display.new_circuit "دائرة تور جديدة لهذا الموقع">
<!-- Onion services strings. Strings are kept here for ease of translation. -->
-<!ENTITY torbutton.onionServices.authPrompt.tooltip "Open onion service client authentication prompt">
+<!ENTITY torbutton.onionServices.authPrompt.tooltip "فتح مُنبّه استيثاق على عميل خدمة البصلة أو Onion Service">
diff --git a/chrome/locale/ar/torbutton.properties b/chrome/locale/ar/torbutton.properties
index f9bdef7f..01de9a59 100644
--- a/chrome/locale/ar/torbutton.properties
+++ b/chrome/locale/ar/torbutton.properties
@@ -61,10 +61,10 @@ pageInfo_OnionEncryption=الاتصال معمى (خدمة بصلة)
# Onion services strings. Strings are kept here for ease of translation.
# LOCALIZATION NOTE: %S will be replaced with the .onion address.
-onionServices.clientAuthMissing=Tor onion service missing client authorization
-onionServices.authPrompt.description=%S is requesting your private key.
-onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service
+onionServices.clientAuthMissing=ينقص خدمة البصلة من تور استيثاق للعميل
+onionServices.authPrompt.description=%S يطلب المفتاح الخاص بكم
+onionServices.authPrompt.keyPlaceholder=يرجى إدخال المفتاح الخاص لخدمة البصلة هذه
onionServices.authPrompt.done=انتهى
onionServices.authPrompt.doneAccessKey=d
-onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters)
-onionServices.authPrompt.failedToSetKey=Unable to configure Tor with your key
+onionServices.authPrompt.invalidKey=يرجى إدخال مفتاح صالح (قاعدة٥٢ ب ٣٢ رمز أو قاعدة٤٤ ب ٦٤ رمز)
+onionServices.authPrompt.failedToSetKey=لا يمكن إعدادا تور باستخدام مفتاحكم
diff --git a/chrome/locale/da/browserOnboarding.properties b/chrome/locale/da/browserOnboarding.properties
index a1113637..f8ced959 100644
--- a/chrome/locale/da/browserOnboarding.properties
+++ b/chrome/locale/da/browserOnboarding.properties
@@ -49,9 +49,9 @@ onboarding.tour-tor-update.prefix-new=Ny
onboarding.tour-tor-update.prefix-updated=Opdateret
onboarding.tour-tor-toolbar=Værktøjslinje
-onboarding.tour-tor-toolbar-update-9.0.title=Farvel Onion-knap.
+onboarding.tour-tor-toolbar-update-9.0.title=Farvel løg-knap.
onboarding.tour-tor-toolbar-update-9.0.description=Vil ønsker at din oplevelse med Tor skal være fuldt integreret i Tor Browser.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=Derfor kan du nu, i stedet for at bruge onion-knappen, se dine Tor-kredsløb via [i] på adresselinjen og anmod om en ny identitet med værktøjslinjeknappen eller [≡]-menuen.
+onboarding.tour-tor-toolbar-update-9.0.description-para2=Derfor kan du nu, i stedet for at bruge løg-knappen, se dine Tor-kredsløb via [i] på adresselinjen og anmod om en ny identitet med værktøjslinjeknappen eller [≡]-menuen.
onboarding.tour-tor-toolbar-update-9.0.button=Anmod om en ny identitet
onboarding.tour-tor-toolbar-update-9.0.next-button=Gå til Tor-netværk
diff --git a/chrome/locale/da/torbutton.dtd b/chrome/locale/da/torbutton.dtd
index eeb98cd0..5194c55a 100644
--- a/chrome/locale/da/torbutton.dtd
+++ b/chrome/locale/da/torbutton.dtd
@@ -49,4 +49,4 @@
<!ENTITY torbutton.circuit_display.new_circuit "Nyt kredsløb til dette sted">
<!-- Onion services strings. Strings are kept here for ease of translation. -->
-<!ENTITY torbutton.onionServices.authPrompt.tooltip "Open onion service client authentication prompt">
+<!ENTITY torbutton.onionServices.authPrompt.tooltip "Åbn prompt til klientautentifikation af oniontjeneste">
diff --git a/chrome/locale/da/torbutton.properties b/chrome/locale/da/torbutton.properties
index 94d28034..9ef8dc27 100644
--- a/chrome/locale/da/torbutton.properties
+++ b/chrome/locale/da/torbutton.properties
@@ -1,6 +1,6 @@
torbutton.circuit_display.internet = Internettet
torbutton.circuit_display.ip_unknown = Ukendt IP-adresse
-torbutton.circuit_display.onion_site = Løg-sted
+torbutton.circuit_display.onion_site = Onionsted
torbutton.circuit_display.this_browser = Browseren
torbutton.circuit_display.relay = Relæ
torbutton.circuit_display.tor_bridge = Bro
@@ -56,15 +56,15 @@ profileMigrationFailed=Overførsel af din eksisterende %S profil fejlede.\nNye i
updateDownloadingPanelUILabel=Downloader %S opdatering
# .Onion Page Info prompt. Strings are kept here for ease of translation.
-pageInfo_OnionEncryptionWithBitsAndProtocol=Forbindelse krypteret (løg-tjeneste, %1$S, %2$S-bit nøgler, %3$S)
-pageInfo_OnionEncryption=Forbindelse krypteret (løg-tjeneste)
+pageInfo_OnionEncryptionWithBitsAndProtocol=Forbindelse krypteret (oniontjeneste, %1$S, %2$S-bit nøgler, %3$S)
+pageInfo_OnionEncryption=Forbindelse krypteret (oniontjeneste)
# Onion services strings. Strings are kept here for ease of translation.
# LOCALIZATION NOTE: %S will be replaced with the .onion address.
-onionServices.clientAuthMissing=Tor onion service missing client authorization
-onionServices.authPrompt.description=%S is requesting your private key.
-onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service
+onionServices.clientAuthMissing=Tor-oniontjeneste mangler klient autentifikation
+onionServices.authPrompt.description=%S anmoder om din private nøgle.
+onionServices.authPrompt.keyPlaceholder=Indtast din private nøgle til oniontjenesten
onionServices.authPrompt.done=Fuldført
onionServices.authPrompt.doneAccessKey=d
-onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters)
-onionServices.authPrompt.failedToSetKey=Unable to configure Tor with your key
+onionServices.authPrompt.invalidKey=Indtast venligst en gyldig nøgle (52 base32-tegn eller 44 base64-tegn)
+onionServices.authPrompt.failedToSetKey=Kan ikke konfigurere Tor med din nøgle
diff --git a/chrome/locale/it/torbutton.dtd b/chrome/locale/it/torbutton.dtd
index d163e813..6bc604e0 100644
--- a/chrome/locale/it/torbutton.dtd
+++ b/chrome/locale/it/torbutton.dtd
@@ -49,4 +49,4 @@
<!ENTITY torbutton.circuit_display.new_circuit "Nuovo circuito per questo sito">
<!-- Onion services strings. Strings are kept here for ease of translation. -->
-<!ENTITY torbutton.onionServices.authPrompt.tooltip "Open onion service client authentication prompt">
+<!ENTITY torbutton.onionServices.authPrompt.tooltip "Apri il prompt di autenticazione del servizio client onion.">
diff --git a/chrome/locale/it/torbutton.properties b/chrome/locale/it/torbutton.properties
index 9a13b96a..1d4d107b 100644
--- a/chrome/locale/it/torbutton.properties
+++ b/chrome/locale/it/torbutton.properties
@@ -61,10 +61,10 @@ pageInfo_OnionEncryption=Connessione cifrata (Servizio onion)
# Onion services strings. Strings are kept here for ease of translation.
# LOCALIZATION NOTE: %S will be replaced with the .onion address.
-onionServices.clientAuthMissing=Tor onion service missing client authorization
-onionServices.authPrompt.description=%S is requesting your private key.
-onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service
+onionServices.clientAuthMissing=Autorizzazione client mancante per il servizio Tor onion
+onionServices.authPrompt.description=%S richiede la tua chiave privata.
+onionServices.authPrompt.keyPlaceholder=Inserisci la tua chiave privata per questo servizio onion
onionServices.authPrompt.done=Fatto
onionServices.authPrompt.doneAccessKey=d
-onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters)
-onionServices.authPrompt.failedToSetKey=Unable to configure Tor with your key
+onionServices.authPrompt.invalidKey=Per favore inserisci una chiave valida (52 caratteri base32 o 44 caratteri base64)
+onionServices.authPrompt.failedToSetKey=Impossibile configurare Tor con la tua chiave
diff --git a/chrome/locale/ja/browserOnboarding.properties b/chrome/locale/ja/browserOnboarding.properties
index 598b5960..77a8341b 100644
--- a/chrome/locale/ja/browserOnboarding.properties
+++ b/chrome/locale/ja/browserOnboarding.properties
@@ -32,7 +32,7 @@ onboarding.tour-tor-security.description-suffix=お知らせ:デフォルト
onboarding.tour-tor-security-level.button=セキュリティレベルを表示する
onboarding.tour-tor-security-level.next-button=体験のヒントへ
-onboarding.tour-tor-expect-differences=体験のヒント。
+onboarding.tour-tor-expect-differences=体験のヒント
onboarding.tour-tor-expect-differences.title=いくつかの違いを理解する。
onboarding.tour-tor-expect-differences.description=Tor によって提供されるすべてのセキュリティとプライバシー機能を使用すると、インターネットをブラウジングした時の、あなたの体験は少し変化する場合があります。読み込みは少し遅くなるかもしれないし、あなたのセキュリティレベルによっては、いくつかの要素が動作しないか、読み込まれないかもしれません。また、あなたはロボットではなく、人間であることを証明するように求められることがあるかもしれません。
onboarding.tour-tor-expect-differences.button=よくある質問を見る
diff --git a/chrome/locale/pt-BR/torbutton.dtd b/chrome/locale/pt-BR/torbutton.dtd
index fdfef221..626f4870 100644
--- a/chrome/locale/pt-BR/torbutton.dtd
+++ b/chrome/locale/pt-BR/torbutton.dtd
@@ -49,4 +49,4 @@
<!ENTITY torbutton.circuit_display.new_circuit "Novo circuito para este site">
<!-- Onion services strings. Strings are kept here for ease of translation. -->
-<!ENTITY torbutton.onionServices.authPrompt.tooltip "Open onion service client authentication prompt">
+<!ENTITY torbutton.onionServices.authPrompt.tooltip "Prompt de autenticação do cliente do serviço onion aberto">
diff --git a/chrome/locale/pt-BR/torbutton.properties b/chrome/locale/pt-BR/torbutton.properties
index c1a9303d..e3ab7fc3 100644
--- a/chrome/locale/pt-BR/torbutton.properties
+++ b/chrome/locale/pt-BR/torbutton.properties
@@ -61,10 +61,10 @@ pageInfo_OnionEncryption=Conexão criptografada (Serviço Onion)
# Onion services strings. Strings are kept here for ease of translation.
# LOCALIZATION NOTE: %S will be replaced with the .onion address.
-onionServices.clientAuthMissing=Tor onion service missing client authorization
-onionServices.authPrompt.description=%S is requesting your private key.
-onionServices.authPrompt.keyPlaceholder=Enter your private key for this onion service
+onionServices.clientAuthMissing=O serviço onion do Tor não tem autorização de cliente
+onionServices.authPrompt.description=%S está solicitado a sua chave privada.
+onionServices.authPrompt.keyPlaceholder=Insira a sua chave privada para usar este serviço onion
onionServices.authPrompt.done=Pronto
onionServices.authPrompt.doneAccessKey=d
-onionServices.authPrompt.invalidKey=Please enter a valid key (52 base32 characters or 44 base64 characters)
-onionServices.authPrompt.failedToSetKey=Unable to configure Tor with your key
+onionServices.authPrompt.invalidKey=Por favor, insira uma chave válida (32 caracteres_Base52 ou 64 caracteres_Base44)
+onionServices.authPrompt.failedToSetKey=Não foi possível configurar Tor com a sua chave
diff --git a/chrome/locale/zh-TW/aboutTor.dtd b/chrome/locale/zh-TW/aboutTor.dtd
index aa55d0f4..76ddf0f2 100644
--- a/chrome/locale/zh-TW/aboutTor.dtd
+++ b/chrome/locale/zh-TW/aboutTor.dtd
@@ -33,5 +33,5 @@
<!-- End of year 2019 Fundraising campaign -->
<!ENTITY aboutTor.ey2019.mozilla "今日您捐款,Mozilla 也會捐出相同數額。">
-<!ENTITY aboutTor.ey2019.tracking "Tracking, surveillance, and censorship are widespread online.">
-<!ENTITY aboutTor.ey2019.takeback "Take back the Internet with Tor">
+<!ENTITY aboutTor.ey2019.tracking "在網路世界中,追蹤、監視和審查無所不在。">
+<!ENTITY aboutTor.ey2019.takeback "透過 Tor 找回對網際網路的自主權">
diff --git a/chrome/locale/zh-TW/torbutton.dtd b/chrome/locale/zh-TW/torbutton.dtd
index ca78844d..1ffff33d 100644
--- a/chrome/locale/zh-TW/torbutton.dtd
+++ b/chrome/locale/zh-TW/torbutton.dtd
@@ -49,4 +49,4 @@
<!ENTITY torbutton.circuit_display.new_circuit "建立新的迴路來連接上此網站">
<!-- Onion services strings. Strings are kept here for ease of translation. -->
-<!ENTITY torbutton.onionServices.authPrompt.tooltip "Open onion service client authentication prompt">
+<!ENTITY torbutton.onionServices.authPrompt.tooltip "開啟 Onion 服務用戶端驗證提示">
1
0