[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [torbutton/maint-9.0] Revert "Merge remote-tracking branch 'richardtpo/bug_31855' into maint-9.0"



commit 26b81644c979951e6773dd05d6801d359b725433
Author: Matthew Finkel <sysrqb@xxxxxxxxxxxxxx>
Date:   Fri Jan 3 22:39:19 2020 +0000

    Revert "Merge remote-tracking branch 'richardtpo/bug_31855' into maint-9.0"
    
    This reverts commit 7362d231508e4c0e78985d51672d3051ab209de4, reversing
    changes made to ae1a9af4a4830bde7034565615a853102e5fe1df.
    
    Merging 0e5ac5d22f59487d857fea57dd3db69daf2e56d2 for Bug 31855 brought
    along many other commits from the master branch.
---
 LICENSE                                        | 115 +++++++
 chrome.manifest                                |   5 +
 chrome/content/locale/non-localized.properties |   6 +
 chrome/content/preferences.xhtml               |   1 +
 chrome/content/tor-circuit-display.js          |  30 +-
 chrome/content/torbutton.js                    | 263 ++++++++++++--
 chrome/content/torbutton_util.js               |  79 +++++
 chrome/locale/en-US/torbutton.dtd              |   3 -
 chrome/locale/en-US/torbutton.properties       |  10 -
 chrome/locale/ko/torbutton.dtd                 |  14 +-
 chrome/locale/ko/torbutton.properties          |   2 +-
 chrome/locale/lt/aboutDialog.dtd               |  19 -
 chrome/locale/lt/aboutTBUpdate.dtd             |   8 -
 chrome/locale/lt/aboutTor.dtd                  |  57 +--
 chrome/locale/lt/brand.dtd                     |  15 +-
 chrome/locale/lt/brand.properties              |  17 +-
 chrome/locale/lt/browserOnboarding.properties  |  72 ----
 chrome/locale/lt/torbutton.dtd                 |  66 +---
 chrome/locale/lt/torbutton.properties          |  81 +----
 chrome/locale/ms/aboutDialog.dtd               |  19 -
 chrome/locale/ms/aboutTBUpdate.dtd             |   8 -
 chrome/locale/ms/aboutTor.dtd                  |  57 +--
 chrome/locale/ms/brand.dtd                     |  15 +-
 chrome/locale/ms/brand.properties              |  17 +-
 chrome/locale/ms/browserOnboarding.properties  |  72 ----
 chrome/locale/ms/torbutton.dtd                 |  65 +---
 chrome/locale/ms/torbutton.properties          |  87 ++---
 chrome/locale/th/aboutDialog.dtd               |  19 -
 chrome/locale/th/aboutTBUpdate.dtd             |   8 -
 chrome/locale/th/aboutTor.dtd                  |  57 +--
 chrome/locale/th/brand.dtd                     |  11 +-
 chrome/locale/th/brand.properties              |  13 +-
 chrome/locale/th/browserOnboarding.properties  |  72 ----
 chrome/locale/th/torbutton.dtd                 |  65 +---
 chrome/locale/th/torbutton.properties          |  85 ++---
 chrome/locale/tr/torbutton.properties          |   2 +-
 components/cookie-jar-selector.js              | 460 +++++++++++++++++++++++++
 components/domain-isolator.js                  |   3 +
 components/dragDropFilter.js                   |   2 +
 components/external-app-blocker.js             |  16 +-
 components/startup-observer.js                 |  19 +-
 components/torbutton-logger.js                 |   2 +
 defaults/preferences/preferences.js            |  58 ++++
 import-translations.sh                         |   2 +-
 jar.mn                                         |  12 +-
 modules/default-prefs.js                       |  36 ++
 modules/security-prefs.js                      |   1 -
 modules/tor-control-port.js                    |  95 +----
 modules/utils.js                               |  54 +--
 moz.build                                      |   3 +
 50 files changed, 1308 insertions(+), 990 deletions(-)

diff --git a/LICENSE b/LICENSE
index 66c78f65..9c4498df 100644
--- a/LICENSE
+++ b/LICENSE
@@ -27,3 +27,118 @@ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
 IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGE.
+
+===============================================================================
+
+"League Gothic" font embedded in chrome/skin/aboutTorFonts.css is licensed
+under:
+
+Copyright (c) 2010, Caroline Hadilaksono & Micah Rich
+<caroline@hadilaksono, micah@xxxxxxxxxxxxx>, with Reserved Font Name:
+"League Gothic".
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+===============================================================================
+
+'Source' font embedded in chrome/skin/aboutTorFonts.css is licensed under:
+
+Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with
+Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of
+Adobe Systems Incorporated in the United States and/or other countries.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+===============================================================================
+
+SIL OPEN FONT LICENSE
+
+Version 1.1 - 26 February 2007
+
+PREAMBLE
+
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+DEFINITIONS
+
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting â?? in part or in whole â?? any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+PERMISSION & CONDITIONS
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+TERMINATION
+
+This license becomes null and void if any of the above conditions are
+not met.
+DISCLAIMER
+
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/chrome.manifest b/chrome.manifest
index d1ffe6d6..13bef661 100644
--- a/chrome.manifest
+++ b/chrome.manifest
@@ -143,6 +143,9 @@ 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}
 
@@ -152,6 +155,8 @@ 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/locale/non-localized.properties b/chrome/content/locale/non-localized.properties
new file mode 100644
index 00000000..dca78639
--- /dev/null
+++ b/chrome/content/locale/non-localized.properties
@@ -0,0 +1,6 @@
+# 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/chrome/content/preferences.xhtml b/chrome/content/preferences.xhtml
index eafbf01e..6f662f5f 100644
--- a/chrome/content/preferences.xhtml
+++ b/chrome/content/preferences.xhtml
@@ -6,6 +6,7 @@
     <title>&torbutton.prefs.security_settings;</title>
     <link type="text/css" rel="stylesheet" charset="UTF-8" href="chrome://torbutton/skin/preferences.css"/>
     <link type="text/css" rel="stylesheet" charset="UTF-8" href="chrome://torbutton/skin/preferences-mobile.css"/>
+    <script type="text/javascript" src="torbutton_util.js"></script>
     <script type="text/javascript" src="preferences-mobile.js"></script>
     <style>
     </style>
diff --git a/chrome/content/tor-circuit-display.js b/chrome/content/tor-circuit-display.js
index 19b55d18..21bcc57b 100644
--- a/chrome/content/tor-circuit-display.js
+++ b/chrome/content/tor-circuit-display.js
@@ -6,8 +6,9 @@
 // with docco.js to produce pretty documentation.
 //
 // This script is to be embedded in torbutton.xul. It defines a single global
-// function, createTorCircuitDisplay(), which activates the automatic Tor
-// circuit display for the current tab and any future tabs.
+// function, createTorCircuitDisplay(ipcFile, host, port, password), which
+// activates the automatic Tor circuit display for the current tab and any
+// future tabs.
 //
 // See https://trac.torproject.org/8641
 
@@ -15,12 +16,11 @@
 /* global document, gBrowser, Components */
 
 // ### Main function
-// __createTorCircuitDisplay(enablePrefName)__.
+// __createTorCircuitDisplay(ipcFile, host, port, password, enablePrefName)__.
 // The single function that prepares tor circuit display. Connects to a tor
-// 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.
+// 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.
 let createTorCircuitDisplay = (function () {
 
 "use strict";
@@ -32,7 +32,7 @@ const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 let { controller } = ChromeUtils.import("resource://torbutton/modules/tor-control-port.js", {});
 
 // Utility functions
-let { bindPrefAndInit, observe, getLocale, getDomainForBrowser, torbutton_get_property_string } = ChromeUtils.import("resource://torbutton/modules/utils.js", {});
+let { bindPrefAndInit, observe, getLocale, getDomainForBrowser } = ChromeUtils.import("resource://torbutton/modules/utils.js", {});
 
 // Make the TorButton logger available.
 let logger = Cc["@torproject.org/torbutton-logger;1"]
@@ -204,10 +204,15 @@ let collectBrowserCredentials = function () {
 
 // ## User interface
 
+// __torbuttonBundle__.
+// Bundle of localized strings for torbutton UI.
+let torbuttonBundle = Services.strings.createBundle(
+                        "chrome://torbutton/locale/torbutton.properties");
+
 // __uiString__.
 // Read the localized strings for this UI.
 let uiString = function (shortName) {
-  return torbutton_get_property_string("torbutton.circuit_display." + shortName);
+  return torbuttonBundle.GetStringFromName("torbutton.circuit_display." + shortName);
 };
 
 // __localizedCountryNameFromCode(countryCode)__.
@@ -410,11 +415,11 @@ let ensureCorrectPopupDimensions = function () {
 
 // ## Main function
 
-// __setupDisplay(enablePrefName)__.
+// __setupDisplay(ipcFile, host, port, password, 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 (enablePrefName) {
+let setupDisplay = function (ipcFile, host, port, password, enablePrefName) {
   setupGuardNote();
   let myController = null,
       stopCollectingIsolationData = null,
@@ -437,7 +442,8 @@ let setupDisplay = function (enablePrefName) {
       },
       start = function () {
         if (!myController) {
-          myController = controller(function (err) {
+          myController = controller(ipcFile, host, port || 9151, password,
+                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 5ef63af2..9846b864 100644
--- a/chrome/content/torbutton.js
+++ b/chrome/content/torbutton.js
@@ -1,9 +1,3 @@
-// window globals
-var torbutton_init;
-var torbutton_new_circuit;
-var torbutton_new_identity;
-
-(() => {
 // Bug 1506 P1-P5: This is the main Torbutton overlay file. Much needs to be
 // preserved here, but in an ideal world, most of this code should perhaps be
 // moved into an XPCOM service, and much can also be tossed. See also
@@ -13,23 +7,20 @@ var torbutton_new_identity;
 // TODO: Double-check there are no strange exploits to defeat:
 //       http://kb.mozillazine.org/Links_to_local_pages_don%27t_work
 
-/* global gBrowser, CustomizableUI,
-   createTorCircuitDisplay, gFindBarInitialized,
-   gFindBar, OpenBrowserWindow, PrivateBrowsingUtils,
+/* global torbutton_log, gBrowser, torbutton_safelog, CustomizableUI,
+   createTorCircuitDisplay, torbutton_get_property_string, gFindBarInitialized,
+   gFindBar, OpenBrowserWindow, PrivateBrowsingUtils, torbutton_get_stringbundle,
    Services, AppConstants
  */
 
 let {
+  showDialog,
   show_torbrowser_manual,
   unescapeTorString,
   bindPrefAndInit,
   getDomainForBrowser,
-  torbutton_safelog,
-  torbutton_log,
-  torbutton_get_property_string,
 } = 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";
@@ -40,10 +31,17 @@ var m_tb_prefs = Services.prefs;
 
 // status
 var m_tb_wasinited = false;
+var m_tb_plugin_string = false;
 var m_tb_is_main_window = false;
+var m_tb_hidden_browser = false;
 
 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.
@@ -102,9 +100,11 @@ 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,9 +116,11 @@ 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);
 
@@ -173,6 +175,9 @@ var torbutton_unique_pref_observer =
             case "privacy.resistFingerprinting.letterboxing":
                 torbutton_update_fingerprinting_prefs();
                 break;
+            case "privacy.firstparty.isolate":
+                torbutton_update_isolation_prefs();
+                break;
         }
     }
 }
@@ -235,7 +240,7 @@ function torbutton_is_mobile() {
 // Bug 1506 P2-P4: This code sets some version variables that are irrelevant.
 // It does read out some important environment variables, though. It is
 // called once per browser window.. This might belong in a component.
-torbutton_init = function() {
+function torbutton_init() {
     torbutton_log(3, 'called init()');
 
     SecurityPrefs.initialize();
@@ -249,6 +254,7 @@ torbutton_init = function() {
     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);
@@ -338,9 +344,6 @@ torbutton_init = function() {
         }
     }
 
-    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);
@@ -360,7 +363,9 @@ torbutton_init = function() {
     torbutton_notify_if_update_needed();
 
     try {
-        createTorCircuitDisplay("extensions.torbutton.display_circuit");
+        createTorCircuitDisplay(m_tb_control_ipc_file, m_tb_control_host,
+                                m_tb_control_port, m_tb_control_pass,
+                               "extensions.torbutton.display_circuit");
     } catch(e) {
         torbutton_log(4, "Error creating the tor circuit display " + e);
     }
@@ -490,6 +495,25 @@ 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;
@@ -540,10 +564,30 @@ function torbutton_notify_if_update_needed() {
     setOrClearAttribute(item, "tbUpdateNeeded", updateNeeded);
 }
 
+function torbutton_check_for_update() {
+    // Open the update prompt in the correct mode.  The update state
+    // checks used here were adapted from isPending() and isApplied() in
+    // Mozilla's browser/base/content/aboutDialog.js code.
+    let updateMgr = Cc["@mozilla.org/updates/update-manager;1"]
+                     .getService(Ci.nsIUpdateManager);
+    let update = updateMgr.activeUpdate;
+    let updateState = (update) ? update.state : undefined;
+    let pendingStates = [ "pending", "pending-service",
+                          "applied", "applied-service" ];
+    let isPending = (updateState && (pendingStates.indexOf(updateState) >= 0));
+
+    let prompter = Cc["@mozilla.org/updates/update-prompt;1"]
+                     .createInstance(Ci.nsIUpdatePrompt);
+    if (isPending)
+        prompter.showUpdateDownloaded(update, false);
+    else
+        prompter.checkForUpdates();
+}
+
 // 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_prefs.getBoolPref("extensions.torbutton.versioncheck_enabled")) {
+  if (!m_tb_tbb || !m_tb_prefs.getBoolPref("extensions.torbutton.versioncheck_enabled")) {
     return;
   }
 
@@ -749,7 +793,7 @@ function torbutton_send_ctrl_cmd(command) {
 }
 
 // Bug 1506 P4: Needed for New IP Address
-torbutton_new_circuit = function() {
+function torbutton_new_circuit() {
   let firstPartyDomain = getDomainForBrowser(gBrowser.selectedBrowser);
 
   let domainIsolator = Cc["@torproject.org/domain-isolator;1"]
@@ -761,7 +805,7 @@ torbutton_new_circuit = function() {
 }
 
 // Bug 1506 P4: Needed for New Identity.
-torbutton_new_identity = async function() {
+async function torbutton_new_identity() {
   try {
     // Make sure that we can only click once on New Identiy to avoid race
     // conditions leading to failures (see bug 11783 for an example).
@@ -995,7 +1039,16 @@ async function torbutton_do_new_identity() {
 
   torbutton_log(3, "New Identity: Clearing Cookies and DOM Storage");
 
-  torbutton_clear_cookies();
+  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_log(3, "New Identity: Closing open connections");
 
@@ -1368,19 +1421,21 @@ function torbutton_tor_check_ok()
 //
 // toggles plugins: true for disabled, false for enabled
 function torbutton_toggle_plugins(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;
-      }
+  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;
+        }
+    }
   }
 }
 
@@ -1395,7 +1450,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);
 
-    m_tb_prefs.setBoolPref("permissions.memory_only", mode);
+    if (m_tb_tbb) 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);
@@ -1417,6 +1472,15 @@ function torbutton_update_fingerprinting_prefs() {
     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() {
@@ -1469,6 +1533,50 @@ function torbutton_close_tabs_on_new_identity() {
   torbutton_log(3, "Closed all tabs");
 }
 
+// Bug 1506 P2: This code is only important for disabling
+// New Identity where it is not supported (ie no control port).
+function torbutton_check_protections()
+{
+  var env = Cc["@mozilla.org/process/environment;1"]
+              .getService(Ci.nsIEnvironment);
+
+  // Bug 14100: check for the existence of an environment variable
+  // in order to toggle the visibility of networksettings menuitem
+  if (env.exists("TOR_NO_DISPLAY_NETWORK_SETTINGS"))
+    document.getElementById("torbutton-networksettings").hidden = true;
+  else
+    document.getElementById("torbutton-networksettings").hidden = false;
+
+  // Bug 21091: check for the existence of an environment variable
+  // in order to toggle the visibility of the torbutton-checkForUpdate
+  // menuitem and its separator.
+  if (env.exists("TOR_HIDE_UPDATE_CHECK_UI")) {
+    document.getElementById("torbutton-checkForUpdateSeparator").hidden = true;
+    document.getElementById("torbutton-checkForUpdate").hidden = true;
+  } else {
+    document.getElementById("torbutton-checkForUpdateSeparator").hidden = false;
+    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.
+    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 ---------------------
 
 // Bug 1506 P4: Used by New Identity if cookie protections are
@@ -1627,6 +1735,23 @@ 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();
 
@@ -1727,6 +1852,9 @@ function torbutton_new_window(event)
       return;
     }
 
+    m_tb_window_height = window.outerHeight;
+    m_tb_window_width = window.outerWidth;
+
     if (!m_tb_wasinited) {
         torbutton_init();
     }
@@ -1794,6 +1922,13 @@ function torbutton_close_window(event) {
     }
 }
 
+
+function torbutton_open_network_settings() {
+  var obsSvc = Services.obs;
+  obsSvc.notifyObservers(this, "TorOpenNetworkSettings");
+}
+
+
 window.addEventListener('load',torbutton_new_window,false);
 window.addEventListener('unload', torbutton_close_window, false);
 
@@ -1900,6 +2035,60 @@ var torbutton_resizelistener =
   onSecurityChange: function() {}
 };
 
+// aURI should be an http or https nsIURI object.
+function torbutton_get_current_accept_language_value(aURI)
+{
+  try {
+    let ioService = Services.io;
+    let channel = ioService.newChannelFromURI(aURI);
+    let httpChannel = channel.QueryInterface(Ci.nsIHttpChannel);
+    return httpChannel.getRequestHeader("Accept-Language");
+  } catch (e) {}
+
+  return null;
+}
+
+// Take URL strings the user has specified for a homepage
+// and normalize it so it looks like a real URL.
+function torbutton_normalize_homepage_url_string(aURLString)
+{
+  if (!aURLString) return null;
+  if (typeof aURLString !== "string") return null;
+  let url;
+  try {
+    url = new URL(aURLString);
+  } catch (e) {
+    try {
+      url = new URL("http://"; + aURLString);
+    } catch (e) {
+      return null;
+    }
+  }
+  return url.href;
+}
+
+function torbutton_is_homepage_url(aURI)
+{
+  if (!aURI)
+    return false;
+
+  let homePageURLs;
+  let choice = m_tb_prefs.getIntPref("browser.startup.page");
+  if ((1 == choice) || (3 == choice)) try {
+     // A homepage may be used at startup. Get the values and check against
+     // aURI.spec.
+     homePageURLs = m_tb_prefs.getComplexValue("browser.startup.homepage",
+                                               Ci.nsIPrefLocalizedString).data;
+  } catch (e) {}
+
+  if (!homePageURLs)
+    return false;
+
+  let urls = homePageURLs.split('|')
+               .map(torbutton_normalize_homepage_url_string);
+  return (urls.indexOf(aURI.spec) >= 0);
+}
+
 // Makes sure the item in the Help Menu and the link in about:tor
 // for the Tor Browser User Manual are only visible when
 // show_torbrowser_manual() returns true.
@@ -1910,5 +2099,5 @@ function torbutton_init_user_manual_links() {
     torbutton_abouttor_message_handler.updateAllOpenPages();
   });
 }
-})();
+
 //vim:set ts=4
diff --git a/chrome/content/torbutton_util.js b/chrome/content/torbutton_util.js
new file mode 100644
index 00000000..e6446cde
--- /dev/null
+++ b/chrome/content/torbutton_util.js
@@ -0,0 +1,79 @@
+// Bug 1506 P1-P3: These utility functions might be useful, but
+// you probably just want to rewrite them or use the underlying
+// code directly. I don't see any of them as essential for 1506,
+// really.
+
+var m_tb_torlog = Cc["@torproject.org/torbutton-logger;1"]
+.getService(Ci.nsISupports).wrappedJSObject;
+
+var m_tb_string_bundle = torbutton_get_stringbundle();
+
+function torbutton_safelog(nLevel, sMsg, scrub) {
+    m_tb_torlog.safe_log(nLevel, sMsg, scrub);
+    return true;
+}
+
+function torbutton_log(nLevel, sMsg) {
+    m_tb_torlog.log(nLevel, sMsg);
+
+    // So we can use it in boolean expressions to determine where the 
+    // short-circuit is..
+    return true; 
+}
+
+// get a preferences branch object
+// FIXME: this is lame.
+function torbutton_get_prefbranch(branch_name) {
+    var o_prefs = false;
+    var o_branch = false;
+
+    torbutton_log(1, "called get_prefbranch()");
+    o_prefs = Services.prefs;
+    if (!o_prefs) {
+        torbutton_log(5, "Failed to get preferences-service!");
+        return false;
+    }
+
+    o_branch = o_prefs.getBranch(branch_name);
+    if (!o_branch)
+    {
+        torbutton_log(5, "Failed to get prefs branch!");
+        return false;
+    }
+
+    return o_branch;
+}
+
+// load localization strings
+function torbutton_get_stringbundle()
+{
+    var o_stringbundle = false;
+
+    try {
+        var oBundle = Services.strings;
+        o_stringbundle = oBundle.createBundle("chrome://torbutton/locale/torbutton.properties");
+    } catch(err) {
+        o_stringbundle = false;
+    }
+    if (!o_stringbundle) {
+        torbutton_log(5, 'ERROR (init): failed to find torbutton-bundle');
+    }
+
+    return o_stringbundle;
+}
+
+function torbutton_get_property_string(propertyname)
+{
+    try { 
+        if (!m_tb_string_bundle) {
+            m_tb_string_bundle = torbutton_get_stringbundle();
+        }
+
+        return m_tb_string_bundle.GetStringFromName(propertyname);
+    } catch(e) {
+        torbutton_log(4, "Unlocalized string "+propertyname);
+    }
+
+    return propertyname;
+}
+
diff --git a/chrome/locale/en-US/torbutton.dtd b/chrome/locale/en-US/torbutton.dtd
index ed3cb1a6..d14bd1da 100644
--- a/chrome/locale/en-US/torbutton.dtd
+++ b/chrome/locale/en-US/torbutton.dtd
@@ -47,6 +47,3 @@
 <!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 1020e57a..ea7a7d63 100644
--- a/chrome/locale/en-US/torbutton.properties
+++ b/chrome/locale/en-US/torbutton.properties
@@ -58,13 +58,3 @@ 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
diff --git a/chrome/locale/ko/torbutton.dtd b/chrome/locale/ko/torbutton.dtd
index 109e2117..044cd417 100644
--- a/chrome/locale/ko/torbutton.dtd
+++ b/chrome/locale/ko/torbutton.dtd
@@ -1,18 +1,18 @@
 <!ENTITY torbutton.context_menu.new_identity "ì??ë¡?ì?´ ì? ì??">
 <!ENTITY torbutton.context_menu.new_identity_key "I">
-<!ENTITY torbutton.context_menu.new_circuit "ì?´ ì?¬ì?´í?¸ì??ì??ì?? ì?? Tor ì??í?·">
+<!ENTITY torbutton.context_menu.new_circuit "Tor ì??í?· ì?¬êµ¬ì¶?">
 <!ENTITY torbutton.context_menu.new_circuit_key "C">
-<!ENTITY torbutton.context_menu.networksettings "Tor ë?¤í?¸ì??í?¬ ì?¤ì ?...">
+<!ENTITY torbutton.context_menu.networksettings "í? ë¥´ ë?¤í?¸ì??í?¬ ì?¤ì ?...">
 <!ENTITY torbutton.context_menu.networksettings.key "N">
 <!ENTITY torbutton.context_menu.downloadUpdate "í? ë¥´ ë¸?ë?¼ì?°ì ? ì??ë?°ì?´í?¸ ì²´í?¬í??기...">
 <!ENTITY torbutton.context_menu.downloadUpdate.key "U">
-<!ENTITY torbutton.context_menu.cookieProtections "ì¿ í?¤ ë³´í?¸...">
+<!ENTITY torbutton.context_menu.cookieProtections "ì¿ í?¤ ë³´í?¸....">
 <!ENTITY torbutton.context_menu.cookieProtections.key "C">
-<!ENTITY torbutton.button.tooltip "í?´ë¦­í??ì?¬ Torbutton ì?¤ì ? ì´?기í??기">
+<!ENTITY torbutton.button.tooltip "Torbutton ì?¤ì ? ì´?기í??">
 <!ENTITY torbutton.prefs.security_settings "Tor ë¸?ë?¼ì?°ì ? ë³´ì?? ì?¤ì ?">
 <!ENTITY torbutton.cookiedialog.title "쿠� 보� �리">
 <!ENTITY torbutton.cookiedialog.lockCol "보��">
-<!ENTITY torbutton.cookiedialog.domainCol "���">
+<!ENTITY torbutton.cookiedialog.domainCol "Host">
 <!ENTITY torbutton.cookiedialog.nameCol "��">
 <!ENTITY torbutton.cookiedialog.pathCol "경�">
 <!ENTITY torbutton.cookiedialog.protectCookie "ì¿ í?¤ ë³´í?¸">
@@ -22,7 +22,7 @@
 <!ENTITY torbutton.cookiedialog.saveAllCookies "ì??ë¡?ì?´ ì¿ í?¤ ë³´í?¸">
 <!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "ì??ë¡?ì?´ ì¿ í?¤ë¥¼ ë³´í?¸í??ì§? ì??ì??">
 <!ENTITY torbutton.prefs.sec_caption "ë³´ì?? ë?±ê¸?">
-<!ENTITY torbutton.prefs.sec_caption_tooltip "ë³´ì?? ì?¬ë?¼ì?´ë??를 ì?¬ì?©í??ë©´ í?¹ì ? ë¸?ë?¼ì?°ì ? 기ë?¥ì?´ ë¹?í??ì?±í??ë??ì?´ ë¸?ë?¼ì?°ì ?ê°? í?´í?¹ ì??ë??ì?? ì·¨ì?½í?´ì§? ì?? ì??ì?µë??ë?¤.">
+<!ENTITY torbutton.prefs.sec_caption_tooltip "ë³´ì?? ì?¬ë?¼ì?´ë??를 ì?¬ì?©í??ë©´ í?¹ì ? ë¸?ë?¼ì?°ì ? 기ë?¥ì?´ ë¹?í??ì?±í?? ë??ì?´ ë¸?ë?¼ì?°ì ?ê°? í?´í?¹ ì??ë??ì?? ì·¨ì?½í?´ì§? ì?? ì??ì?µë??ë?¤.">
 <!ENTITY torbutton.prefs.sec_standard_label "í??ì¤?">
 <!ENTITY torbutton.prefs.sec_standard_description "모ë?  Tor ë¸?ë?¼ì?°ì ?ì?? ì?¹ì?¬ì?´í?¸ì?? 기ë?¥ë?¤ì?´ í??ì?±í?? ë?©ë??ë?¤.">
 <!ENTITY torbutton.prefs.sec_safer_label "ë?? ì??ì ?í?©ë??ë?¤">
@@ -36,7 +36,7 @@
 <!ENTITY torbutton.prefs.sec_js_disabled "ì??ë°? ì?¤í?¬ë¦½í?¸ë?? 기본 ì?¤ì ?ì?¼ë¡? 모ë?  ì?¬ì?´í?¸ì??ì?? ë¹?í??ì?±í?? ë??ì?´ ì??ì?µë??ë?¤.">
 <!ENTITY torbutton.prefs.sec_limit_typography "ì?¼ë¶? ê¸?ê¼´ì?´ë©° ì??í??기í?¸ê°? ë¹?í??ì?±í?? ë?©ë??ë?¤.">
 <!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "ì?¼ë¶? ê¸?ê¼´ì?´ë©° ì??ì§?ì?´ë©° ì??í??기í?¸ë©° ì?¬ì§?ì?´ ë¹?í??ì?±í?? ë?©ë??ë?¤.">
-<!ENTITY torbutton.prefs.sec_click_to_play_media "ì?¤ë??ì?¤ì?? ë¹?ë??ì?¤(HTML5ë¡? í??í??ë??), 그리고 WebGL ì?? í?´ë¦­í??ì?¬ ì?¬ì??í?©ë??ë?¤.">
+<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio and video (HTML5 media), and WebGL are click-to-play.">
 <!ENTITY torbutton.prefs.sec_custom_warning "ì?¬ì?©ì?? ë§?춤">
 <!ENTITY torbutton.prefs.sec_overview "ë³´ì??ê³¼ ì?µëª?ì?±ì?? 공격í??ë?? ë?° ì?¬ì?©ë?  ì?? ì??ë?? í?¹ì ?í?? ì?¹ì?? 기ë?¥ì?? í?´ì ?í?©ë??ë?¤.">
 <!ENTITY torbutton.prefs.sec_standard_tooltip "ë³´ì?? ì??ì¤?:í??ì¤?">
diff --git a/chrome/locale/ko/torbutton.properties b/chrome/locale/ko/torbutton.properties
index fed47bf8..9eef842b 100644
--- a/chrome/locale/ko/torbutton.properties
+++ b/chrome/locale/ko/torbutton.properties
@@ -53,7 +53,7 @@ profileMigrationFailed=기존 %S í??ë¡?í??ì?? ì?´ì ?í??ì§? 못í??ì?µë??ë?¤. ì??
 # "Downloading update" string for the hamburger menu (see #28885).
 # This string is kept here for ease of translation.
 # LOCALIZATION NOTE: %S is the application name.
-updateDownloadingPanelUILabel=ì??ë?°ì?´í?¸ %S ë?¤ì?´ë¡?ë?? ì¤?
+updateDownloadingPanelUILabel=Downloading %S update
 
 # .Onion Page Info prompt.  Strings are kept here for ease of translation.
 pageInfo_OnionEncryptionWithBitsAndProtocol=ì?°ê²°ì?? ì??í?¸í??í??ì?µë??ë?¤ (Onion ì??ë¹?ì?¤, %1$S, %2$S ë¹?í?¸ í?¤ë?¤, %3$S)
diff --git a/chrome/locale/lt/aboutDialog.dtd b/chrome/locale/lt/aboutDialog.dtd
deleted file mode 100644
index 8086ac53..00000000
--- a/chrome/locale/lt/aboutDialog.dtd
+++ /dev/null
@@ -1,19 +0,0 @@
-<!ENTITY project.start           "&brandShortName; plÄ?toja ">
-<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org -->
-<!ENTITY project.tpoLink         "&vendorShortName;">
-<!ENTITY project.end             ", ne pelno siekianti organizacija, dirbanti tam, kad apsaugotų jÅ«sų privatumÄ? ir laisvÄ? internete.">
-
-<!ENTITY help.start              "Norite padÄ?ti?">
-<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en -->
-<!ENTITY help.donateLink         "Paaukokite">
-<!ENTITY help.or                 " arba ">
-<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en -->
-<!ENTITY help.getInvolvedLink    "įsitraukite">
-<!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   "Klausimai?">
-<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays -->
-<!ENTITY bottomLinks.grow        "PadÄ?kite Tor tinklui augti!">
-<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license -->
-<!ENTITY bottomLinks.license  "Licencijavimo informacija">
-<!ENTITY tor.TrademarkStatement   "&quot;Tor&quot; ir &quot;Onion logotipas&quot; yra registruoti Tor Project, Inc. prekių ženklai.">
diff --git a/chrome/locale/lt/aboutTBUpdate.dtd b/chrome/locale/lt/aboutTBUpdate.dtd
deleted file mode 100644
index a555d655..00000000
--- a/chrome/locale/lt/aboutTBUpdate.dtd
+++ /dev/null
@@ -1,8 +0,0 @@
-<!ENTITY aboutTBUpdate.changelogTitle "Tor Browser keitinių žurnalas">
-<!ENTITY aboutTBUpdate.updated "Tor NarÅ¡yklÄ? atnaujinta.">
-<!ENTITY aboutTBUpdate.linkPrefix "NorÄ?dami sužinoti naujausiÄ? informacijÄ? apie Å¡iÄ? laida, ">
-<!ENTITY aboutTBUpdate.linkLabel  "apsilankykite mÅ«sų internetinÄ?je svetainÄ?je">
-<!ENTITY aboutTBUpdate.linkSuffix ".">
-<!ENTITY aboutTBUpdate.version "Versija">
-<!ENTITY aboutTBUpdate.releaseDate "Laidos data">
-<!ENTITY aboutTBUpdate.releaseNotes "Laidos informacija">
diff --git a/chrome/locale/lt/aboutTor.dtd b/chrome/locale/lt/aboutTor.dtd
index b6f8a23d..9f14022b 100644
--- a/chrome/locale/lt/aboutTor.dtd
+++ b/chrome/locale/lt/aboutTor.dtd
@@ -1,32 +1,47 @@
 <!--
-   - Copyright (c) 2019, The Tor Project, Inc.
+   - Copyright (c) 2014, The Tor Project, Inc.
    - See LICENSE for licensing information.
    - vim: set sw=2 sts=2 ts=8 et syntax=xml:
   -->
 
-<!ENTITY aboutTor.title "Apie Tor">
+<!ENTITY aboutTor.title "About Tor">
 
-<!ENTITY aboutTor.viewChangelog.label "Rodyti keitinių žurnalÄ?">
+<!ENTITY aboutTor.outOfDateTorOn.label "HOWEVER, this browser is out of date.">
+<!ENTITY aboutTor.outOfDateTorOff.label "ALSO, this browser is out of date.">
+<!ENTITY aboutTor.outOfDate2.label "Click on the onion and then choose Download Tor Browser Bundle Update.">
 
-<!ENTITY aboutTor.ready.label "NarÅ¡ykite. PrivaÄ?iai.">
-<!ENTITY aboutTor.ready2.label "JÅ«s esate pasiruoÅ¡Ä? privaÄ?iausiam narÅ¡ymo patyrimui pasaulyje.">
-<!ENTITY aboutTor.failure.label "Kažkas nutiko!">
-<!ENTITY aboutTor.failure2.label "Å ioje narÅ¡yklÄ?je Tor neveikia.">
+<!ENTITY aboutTor.check.label "Test Tor Network Settings">
 
-<!ENTITY aboutTor.search.label "Ieškoti naudojant DuckDuckGo">
-<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com";>
+<!ENTITY aboutTor.success.label "Congratulations!">
+<!ENTITY aboutTor.success2.label "This browser is configured to use Tor.">
+<!ENTITY aboutTor.success3.label "You are now free to browse the Internet anonymously.">
+<!ENTITY aboutTor.failure.label "Something Went Wrong!">
+<!ENTITY aboutTor.failure2.label "Tor is not working in this browser.">
+<!ENTITY aboutTor.failure3prefix.label "For assistance, please contact ">
+<!ENTITY aboutTor.failure3Link "help@xxxxxxxxxxxxxxxxx">
+<!ENTITY aboutTor.failure3suffix.label ".">
 
-<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Turite klausimų?">
-<!ENTITY aboutTor.torbrowser_user_manual_link.label "PeržiÅ«rÄ?kite mÅ«sų Tor Browser naudotojo vadovÄ? »">
-<!-- The next two entities are used within the browser's Help menu. -->
-<!ENTITY aboutTor.torbrowser_user_manual.accesskey "V">
-<!ENTITY aboutTor.torbrowser_user_manual.label "Tor Browser naudotojo vadovas">
+<!ENTITY aboutTor.search.label "Search">
+<!ENTITY aboutTor.searchSPPost.link "https://startpage.com/do/search";>
+<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com/html/";>
 
-<!ENTITY aboutTor.tor_mission.label "Tor Project yra JAV 501(c)(3) ne pelno organizacija remianti žmogaus teises ir laisves, kurianti ir diegianti laisvas ir atvirojo kodo anonimiÅ¡kumo bei privatumo technologijas, palaikanti jų neribotÄ? prieinamumÄ? ir naudojimÄ? bei mokslinį ir visuotinį supratimÄ?.">
-<!ENTITY aboutTor.getInvolved.label "Įsitraukite »">
-<!ENTITY aboutTor.getInvolved.link "https://www.torproject.org/getinvolved/volunteer.html.en";>
+<!ENTITY aboutTor.torInfo1.label "Additional Info:">
+<!ENTITY aboutTor.torInfo2.label "Country &amp; IP Address:">
+<!ENTITY aboutTor.torInfo3.label "Exit Node:">
+<!ENTITY aboutTor.torInfo4.label "This server does not log any information about visitors.">
+<!ENTITY aboutTor.whatnextQuestion.label "What Next?">
+<!ENTITY aboutTor.whatnextAnswer.label "Tor is NOT all you need to browse anonymously! You may need to change some of your browsing habits to ensure your identity stays safe.">
+<!ENTITY aboutTor.whatnext.label "Tips On Staying Anonymous »">
+<!ENTITY aboutTor.whatnext.link "https://www.torproject.org/download/download.html.en#warning";>
+<!ENTITY aboutTor.helpInfo1.label "You Can Help!">
+<!ENTITY aboutTor.helpInfo2.label "There are many ways you can help make the Tor Network faster and stronger:">
+<!ENTITY aboutTor.helpInfo3.label "Run a Tor Relay Node »">
+<!ENTITY aboutTor.helpInfo3.link "https://www.torproject.org/docs/tor-doc-relay.html.en";>
+<!ENTITY aboutTor.helpInfo4.label "Volunteer Your Services »">
+<!ENTITY aboutTor.helpInfo4.link "https://www.torproject.org/getinvolved/volunteer.html.en";>
+<!ENTITY aboutTor.helpInfo5.label "Make a Donation »">
+<!ENTITY aboutTor.helpInfo5.link "https://www.torproject.org/donate/donate.html.en";>
 
-<!ENTITY aboutTor.newsletter.tagline "Gaukite naujienas iÅ¡ Tor tiesiai į savo paÅ¡to dÄ?žutÄ?.">
-<!ENTITY aboutTor.newsletter.link_text "Užsisakykite Tor naujienas.">
-<!ENTITY aboutTor.donationBanner.line2e "Išlaikykite Tor stiprų.">
-<!ENTITY aboutTor.donationBanner.buttonA "Paaukokite dabar">
+<!ENTITY aboutTor.footer.label "The Tor Project is a US 501(c)(3) non-profit dedicated to the research, development, and education of online anonymity and privacy.">
+<!ENTITY aboutTor.learnMore.label "Learn more about The Tor Project »">
+<!ENTITY aboutTor.learnMore.link "https://www.torproject.org/about/overview.html.en";>
diff --git a/chrome/locale/lt/brand.dtd b/chrome/locale/lt/brand.dtd
index 788d88f3..47d33862 100644
--- a/chrome/locale/lt/brand.dtd
+++ b/chrome/locale/lt/brand.dtd
@@ -2,14 +2,7 @@
    - 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      "Tor NarÅ¡yklÄ?">
-<!ENTITY  brandShortName        "Tor NarÅ¡yklÄ?">
-<!ENTITY  brandFullName         "Tor NarÅ¡yklÄ?">
-<!ENTITY  vendorShortName       "Tor projektas">
-<!ENTITY  trademarkInfo.part1   "&quot;Tor&quot; ir &quot;Onion logotipas&quot; yra registruoti Tor Project, Inc. prekių ženklai.">
-
-<!-- The following strings are for bug #10280's UI. We place them here for our translators -->
-<!ENTITY plugins.installed.find "SpustelÄ?kite, kad įkeltumÄ?te įdiegtus sistemos papildinius">
-<!ENTITY plugins.installed.enable "Įjungti papildinius">
-<!ENTITY plugins.installed.disable "IÅ¡jungti papildinius">
-<!ENTITY plugins.installed.disable.tip "SpustelÄ?kite, kad neleistumÄ?te įkÄ?linÄ?ti sistemos papildinių">
+<!ENTITY  brandShortName        "Tor Browser">
+<!ENTITY  brandFullName         "Tor Browser">
+<!ENTITY  vendorShortName       "Tor Project">
+<!ENTITY  trademarkInfo.part1   "'Tor' and the 'Onion Logo' are registered trademarks of the Tor Project, Inc.">
diff --git a/chrome/locale/lt/brand.properties b/chrome/locale/lt/brand.properties
index 88eddfc5..f63def38 100644
--- a/chrome/locale/lt/brand.properties
+++ b/chrome/locale/lt/brand.properties
@@ -2,15 +2,14 @@
 # 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=Tor NarÅ¡yklÄ?
-brandShortName=Tor NarÅ¡yklÄ?
-brandFullName=Tor NarÅ¡yklÄ?
-vendorShortName=Tor projektas
+brandShortName=Tor Browser
+brandFullName=Tor Browser
+vendorShortName=Tor Project
 
-homePageSingleStartMain=Firefox Start, greitas pradžios tinklalapis su integruota paieška
-homePageImport=Importuoti pradžios tinklalapį iš %S
+homePageSingleStartMain=Firefox Start, a fast home page with built-in search
+homePageImport=Import your home page from %S
 
-homePageMigrationPageTitle=Pradžios tinklalapio pasirinkimas
-homePageMigrationDescription=Prašome pasirinkti pradžios tinklalapį, kurį naudosite:
+homePageMigrationPageTitle=Home Page Selection
+homePageMigrationDescription=Please select the home page you wish to use:
 
-syncBrandShortName=Sinchronizavimas
+syncBrandShortName=Sync
diff --git a/chrome/locale/lt/browserOnboarding.properties b/chrome/locale/lt/browserOnboarding.properties
deleted file mode 100644
index b351e854..00000000
--- a/chrome/locale/lt/browserOnboarding.properties
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright (c) 2019, The Tor Project, Inc.
-# See LICENSE for licensing information.
-# vim: set sw=2 sts=2 ts=8 et:
-
-onboarding.tour-tor-welcome=Sveiki
-onboarding.tour-tor-welcome.title=Esate pasiruoÅ¡Ä?.
-onboarding.tour-tor-welcome.description=Tor NarÅ¡yklÄ? leidžia narÅ¡yti po saitynÄ? ir tuo paÄ?iu siÅ«lo aukÅ¡Ä?iausius privatumo bei saugumo standartus. Dabar, esate apsaugoti nuo sekimo, stebÄ?jimo ir cenzÅ«ros. Å iame trumpame įvade jums parodysime kaip tai daroma.
-onboarding.tour-tor-welcome.next-button=Pereiti į privatumÄ?
-
-onboarding.tour-tor-privacy=Privatumas
-onboarding.tour-tor-privacy.title=Nepaisykite sekiklių ir Å¡niukÅ¡tinÄ?tojų.
-onboarding.tour-tor-privacy.description=Tor NarÅ¡yklÄ? izoliuoja slapukus ir po kiekvieno narÅ¡ymo seanso iÅ¡trina narÅ¡ymo istorijÄ?. Å ie pakeitimai užtikrina, kad jÅ«sų privatumas ir saugumas narÅ¡yklÄ?je yra apsaugoti. SpustelÄ?kite "Tor tinklas", norÄ?dami sužinoti, kaip mes apsaugome jus tinklo lygmenyje.
-onboarding.tour-tor-privacy.button=Pereiti prie Tor tinklo
-
-onboarding.tour-tor-network=Tor tinklas
-onboarding.tour-tor-network.title=Keliaukite po decentralizuotÄ? tinklÄ?.
-onboarding.tour-tor-network.description=Tor NarÅ¡yklÄ? prijungia jus prie Tor tinklo, veikianÄ?io tÅ«kstanÄ?ių, po visÄ? pasaulį iÅ¡sidÄ?sÄ?iusių, savanorių dÄ?ka. Skirtingai nei VPN, Ä?ia, norint mÄ?gautis privaÄ?iu narÅ¡ymu saityne, nÄ?ra vieno žlugimo taÅ¡ko, ar centralizuoto objekto, kuriuo turÄ?tumÄ?te pasitikÄ?ti.
-onboarding.tour-tor-network.description-para2=NAUJA: Tor tinklo nustatymai, įtraukiant galimybÄ? praÅ¡yti tinklo tiltų, kur Tor užblokuotas, dabar galima rasti pirmenybÄ?se
-onboarding.tour-tor-network.action-button=Derinti savo Tor tinklo nustatymus
-onboarding.tour-tor-network.button=Pereiti į grandinÄ?s rodinį
-
-onboarding.tour-tor-circuit-display=GrandinÄ?s rodinys
-onboarding.tour-tor-circuit-display.title=Matykite savo keliÄ?.
-onboarding.tour-tor-circuit-display.description=Kiekvienoje jÅ«sų aplankomų sriÄ?ių, jÅ«sų srautas yra retransliuojamas ir Å¡ifruojamas grandinÄ?je, sudarytoje iÅ¡ trijų Tor retransliavimų, iÅ¡sidÄ?sÄ?iusių po visÄ? pasaulį. Jokia internetinÄ? svetainÄ? nežino iÅ¡ kurios vietos jungiatÄ?s. Galite užklausti naujÄ? grandinÄ?, mÅ«sų grandinÄ?s rodinyje spusteldami ant "Nauja grandinÄ? Å¡iai svetainei".
-onboarding.tour-tor-circuit-display.button=Rodyti mano keliÄ?
-onboarding.tour-tor-circuit-display.next-button=Pereiti į saugumÄ?
-
-onboarding.tour-tor-security=Saugumas
-onboarding.tour-tor-security.title=Pasirinkite savo patyrimÄ?.
-onboarding.tour-tor-security.description=Mes taip pat siÅ«lome papildomus nustatymus, kurių pagalba galima bÅ«tų dar pagerinti jÅ«sų narÅ¡yklÄ?s saugumÄ?. MÅ«sų saugumo nustatymai leidžia jums blokuoti reikiamus elementus, kurie galÄ?tų bÅ«ti panaudoti siekiant užpulti jÅ«sų kompiuterį. SpustelÄ?kite žemiau, norÄ?dami pamatyti kÄ? skirtingi parametrai atlieka.
-onboarding.tour-tor-security.description-suffix=Pastaba: Pagal numatymÄ?, NoScript ir HTTPS Everywhere nÄ?ra įtraukti į įrankių juostÄ?, taÄ?iau norÄ?dami juos pridÄ?ti, galite tinkinti savo įrankių juostÄ?.
-onboarding.tour-tor-security-level.button=ŽiÅ«rÄ?ti savo saugumo lygmenį
-onboarding.tour-tor-security-level.next-button=Pereiti į patyrimo patarimus
-
-onboarding.tour-tor-expect-differences=Patyrimo patarimai
-onboarding.tour-tor-expect-differences.title=TikÄ?kitÄ?s kai kurių skirtumų.
-onboarding.tour-tor-expect-differences.description=Su visomis Tor suteikiamomis saugumo ir privatumo ypatybÄ?mis, jÅ«sų patyrimas narÅ¡ant saitynÄ? gali bÅ«ti Å¡iek tiek kitoks. Priklausomai nuo jÅ«sų saugumo lygmens, viskas gali veikti Å¡iek tiek lÄ?Ä?iau, o kai kurie elementai - neveikti arba bÅ«ti neįkeliami. Taip pat jÅ«sų gali bÅ«ti praÅ¡oma įrodyti, kad esate žmogus, o ne robotas.
-onboarding.tour-tor-expect-differences.button=Rodyti DUK
-onboarding.tour-tor-expect-differences.next-button=Pereiti į Onion tarnybas
-
-onboarding.tour-tor-onion-services=Onion tarnybos
-onboarding.tour-tor-onion-services.title=BÅ«kite papildomai apsaugoti.
-onboarding.tour-tor-onion-services.description=Onion tarnybos yra svetainÄ?s, kurių adresai baigiasi .onion - turinio leidÄ?jams bei lankytojams jos suteikia papildomÄ? apsaugÄ?, įskaitant apsaugÄ? prieÅ¡ cenzÅ«ros. Onion tarnybos leidžia visiems skelbti turinį bei teikti paslaugas anonimiÅ¡kai. SpustelÄ?kite žemiau, norÄ?dami apsilankyti DuckDuckGo onion svetainÄ?je.
-onboarding.tour-tor-onion-services.button=Apsilankyti Onion
-onboarding.tour-tor-onion-services.next-button=Atlikta
-
-onboarding.overlay-icon-tooltip-updated2=ŽiÅ«rÄ?kite kas yra\nnaujo %S
-onboarding.tour-tor-update.prefix-new=Nauja
-onboarding.tour-tor-update.prefix-updated=Atnaujinta
-
-onboarding.tour-tor-toolbar=Įrankių juosta
-onboarding.tour-tor-toolbar-update-9.0.title=Viso gero Svogūno mygtuke.
-onboarding.tour-tor-toolbar-update-9.0.description=Norime kad jÅ«sų patirtis naudojantis Tor bÅ«tų pilnai integruota Tor narÅ¡yklÄ?je.
-onboarding.tour-tor-toolbar-update-9.0.description-para2=DÄ?l to dabar, vietoj svogÅ«no mygtuko naudojimo, galite Tor grandinÄ? pamatyti per [i] URL juostoje ir duoti užklausÄ? naujai tapatybei naudodamiesi įrankių juostos mygtuku arba [â?¡] meniu.
-onboarding.tour-tor-toolbar-update-9.0.button=Kaip duoti užklausÄ? naujai tapatybei
-onboarding.tour-tor-toolbar-update-9.0.next-button=Pereiti prie Tor tinklo
-
-# Circuit Display onboarding.
-onboarding.tor-circuit-display.next=Kitas
-onboarding.tor-circuit-display.done=Atlikta
-onboarding.tor-circuit-display.one-of-three=1 iš 3
-onboarding.tor-circuit-display.two-of-three=2 iš 3
-onboarding.tor-circuit-display.three-of-three=3 iš 3
-
-onboarding.tor-circuit-display.intro.title=Kaip veikia grandinÄ?s?
-onboarding.tor-circuit-display.intro.msg=GrandinÄ?s yra sudarytos iÅ¡ atsitiktinai priskirtų retransliavimų, kurie savo ruožtu yra kompiuteriai visame pasaulyje sukonfigÅ«ruoti persiųsti Tor duomenų srautÄ?. GrandinÄ?s jums leidžia narÅ¡yti privaÄ?iai ir prisijungti prie onion tarnybų.
-
-onboarding.tor-circuit-display.diagram.title=GrandinÄ?s rodinys
-onboarding.tor-circuit-display.diagram.msg=Å i diagrama rodo retransliavimus, kurie sudaro Å¡ios internetinÄ?s svetainÄ?s grandinÄ?. Norint neleisti susieti veiklos tarp įvairių svetainių, kiekviena svetainÄ? gauna skirtingÄ? grandinÄ?.
-
-onboarding.tor-circuit-display.new-circuit.title=Ar jums reikia naujos grandinÄ?s?
-onboarding.tor-circuit-display.new-circuit.msg=Jeigu negalite prisijungti prie norimos aplankyti internetinÄ?s svetainÄ?s arba ji nÄ?ra tinkamai įkeliama, tuomet galite pasinaudoti Å¡iuo mygtuku, kad iÅ¡ naujo įkeltumÄ?te svetainÄ?, naudojant naujÄ? grandinÄ?.
diff --git a/chrome/locale/lt/torbutton.dtd b/chrome/locale/lt/torbutton.dtd
index a03f0c34..ac9fb759 100644
--- a/chrome/locale/lt/torbutton.dtd
+++ b/chrome/locale/lt/torbutton.dtd
@@ -1,52 +1,20 @@
 <!ENTITY torbutton.context_menu.new_identity "Nauja tapatybÄ?">
-<!ENTITY torbutton.context_menu.new_identity_key "T">
-<!ENTITY torbutton.context_menu.new_circuit "Nauja Tor grandinÄ? Å¡iai svetainei">
-<!ENTITY torbutton.context_menu.new_circuit_key "G">
-<!ENTITY torbutton.context_menu.networksettings "Tor tinklo nustatymaiâ?¦">
-<!ENTITY torbutton.context_menu.networksettings.key "N">
-<!ENTITY torbutton.context_menu.downloadUpdate "Tikrinti, ar yra Tor NarÅ¡yklÄ?s atnaujinimųâ?¦">
+<!ENTITY torbutton.context_menu.new_identity_key "I">
+<!ENTITY torbutton.context_menu.networksettings "Open Network Settingsâ?¦">
+<!ENTITY torbutton.context_menu.downloadUpdate "Download Tor Browser Bundle Update...">
 <!ENTITY torbutton.context_menu.downloadUpdate.key "U">
-<!ENTITY torbutton.context_menu.cookieProtections "Slapukų apsaugos�">
-<!ENTITY torbutton.context_menu.cookieProtections.key "P">
-<!ENTITY torbutton.button.tooltip "SpustelÄ?kite, kad aktyvuotumÄ?te Torbutton">
-<!ENTITY torbutton.prefs.security_settings "Tor NarÅ¡yklÄ?s saugumo nustatymai">
-<!ENTITY torbutton.cookiedialog.title "Tvarkyti slapukų apsaugas">
-<!ENTITY torbutton.cookiedialog.lockCol "Apsaugotas">
-<!ENTITY torbutton.cookiedialog.domainCol "Serveris">
+<!ENTITY torbutton.context_menu.cookieProtections "Slapukų apsaugos">
+<!ENTITY torbutton.context_menu.cookieProtections.key "C">
+<!ENTITY torbutton.button.tooltip "Paspauskite kad aktyvuoti Torbutton">
+<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
+<!ENTITY torbutton.cookiedialog.lockCol "Protected">
+<!ENTITY torbutton.cookiedialog.domainCol "Host">
 <!ENTITY torbutton.cookiedialog.nameCol "Pavadinimas">
-<!ENTITY torbutton.cookiedialog.pathCol "Kelias">
-<!ENTITY torbutton.cookiedialog.protectCookie "Apsaugoti slapukÄ?">
-<!ENTITY torbutton.cookiedialog.removeCookie "Å alinti slapukÄ?">
-<!ENTITY torbutton.cookiedialog.unprotectCookie "Neapsaugoti slapuko">
-<!ENTITY torbutton.cookiedialog.removeAllBut "Šalinti visus, išskyrus apsaugotus">
-<!ENTITY torbutton.cookiedialog.saveAllCookies "Apsaugoti naujus slapukus">
-<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Neapsaugoti naujų slapukų">
-<!ENTITY torbutton.prefs.sec_caption "Saugumo lygmuo">
-<!ENTITY torbutton.prefs.sec_caption_tooltip "Saugumo slankiklis leidžia jums iÅ¡jungti tam tikras narÅ¡yklÄ?s ypatybes, kurios gali padaryti jÅ«sų narÅ¡yklÄ? labiau pažeidžiamÄ? bandymams įsibrauti.">
-<!ENTITY torbutton.prefs.sec_standard_label "Standartinis">
-<!ENTITY torbutton.prefs.sec_standard_description "Visos Tor NarÅ¡yklÄ?s ir internetinių svetainių ypatybÄ?s yra įjungtos.">
-<!ENTITY torbutton.prefs.sec_safer_label "Saugesnis">
-<!ENTITY torbutton.prefs.sec_safer_description "IÅ¡jungia tas internetinių svetainių ypatybes, kurios, dažnai, bÅ«na pavojingos, dÄ?l to kai kurios svetainÄ?s gali prarasti funkcionalumÄ?.">
-<!ENTITY torbutton.prefs.sec_safer_list_label "Saugesniame nustatyme:">
-<!ENTITY torbutton.prefs.sec_safest_label "Saugiausias">
-<!ENTITY torbutton.prefs.sec_safest_description "Leidžia tik tas internetinių svetainių ypatybes, kurios yra reikalingos statinÄ?ms svetainÄ?ms bei pagrindinÄ?ms paslaugoms. Å ie pakeitimai paveikia paveikslus, medija ir scenarijus.">
-<!ENTITY torbutton.prefs.sec_safest_list_label "Saugiausiame nustatyme:">
-<!ENTITY torbutton.prefs.sec_learn_more_label "Sužinoti daugiau">
-<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript yra iÅ¡jungtas ne HTTPS svetainÄ?se.">
-<!ENTITY torbutton.prefs.sec_js_disabled "Pagal numatymÄ?, Javascript yra iÅ¡jungtas visose svetainÄ?se.">
-<!ENTITY torbutton.prefs.sec_limit_typography "Kai kurie šriftai ir matematiniai simboliai yra išjungti.">
-<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Kai kurie šriftai, piktogramos, matematiniai simboliai ir paveikslai yra išjungti.">
-<!ENTITY torbutton.prefs.sec_click_to_play_media "Garsas ir vaizdas (HTML5 medija), bei WebGL yra atkuriami tik spustelÄ?jus.">
-<!ENTITY torbutton.prefs.sec_custom_warning "Tinkintas">
-<!ENTITY torbutton.prefs.sec_overview "IÅ¡jungia tam tikras saityno ypatybes, kurios gali bÅ«ti panaudotos užpulti jÅ«sų saugumÄ? ar anonimiÅ¡kumÄ?.">
-<!ENTITY torbutton.prefs.sec_standard_tooltip "Saugumo lygmuo : Standartinis">
-<!ENTITY torbutton.prefs.sec_safer_tooltip "Saugumo lygmuo : Saugesnis">
-<!ENTITY torbutton.prefs.sec_safest_tooltip "Saugumo lygmuo : Saugiausias">
-<!ENTITY torbutton.prefs.sec_custom_summary "JÅ«sų pasirinktinÄ?s narÅ¡yklÄ?s nuostatos sÄ?lygojo neįprastus saugumo nustatymus. DÄ?l saugumo ir privatumo priežasÄ?ių, rekomenduojame jums pasirinkti vienÄ? iÅ¡ numatytųjų saugumo lygių.">
-<!ENTITY torbutton.prefs.sec_restore_defaults "Atkurti numatytuosius">
-<!ENTITY torbutton.prefs.sec_advanced_security_settings "IÅ¡plÄ?stiniai saugumo nustatymaiâ?¦">
-<!ENTITY torbutton.circuit_display.title "Tor grandinÄ?">
-<!ENTITY torbutton.circuit_display.new_circuit "Nauja grandinÄ? Å¡iai svetainei">
-
-<!-- Onion services strings.  Strings are kept here for ease of translation. -->
-<!ENTITY torbutton.onionServices.authPrompt.tooltip "Atidarykite onion paslaugos kliento autentifikavimo eilutÄ?">
+<!ENTITY torbutton.cookiedialog.pathCol "Path">
+<!ENTITY torbutton.cookiedialog.protectCookie "Protect Cookie">
+<!ENTITY torbutton.cookiedialog.removeCookie "Remove Cookie">
+<!ENTITY torbutton.cookiedialog.unprotectCookie "Unprotect Cookie">
+<!ENTITY torbutton.cookiedialog.removeAllBut "Remove All But Protected">
+<!ENTITY torbutton.cookiedialog.saveAllCookies "Protect New Cookies">
+<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Do Not Protect New Cookies">
+<!ENTITY torbutton.prefs.sec_restore_defaults "Atstatyti numatytuosius">
diff --git a/chrome/locale/lt/torbutton.properties b/chrome/locale/lt/torbutton.properties
index 7bc5a23e..e3e4454c 100644
--- a/chrome/locale/lt/torbutton.properties
+++ b/chrome/locale/lt/torbutton.properties
@@ -1,70 +1,27 @@
-torbutton.circuit_display.internet = Internetas
-torbutton.circuit_display.ip_unknown = IP nežinomas
-torbutton.circuit_display.onion_site = Onion svetainÄ?
-torbutton.circuit_display.this_browser = Å i narÅ¡yklÄ?
-torbutton.circuit_display.relay = Retransliavimas
-torbutton.circuit_display.tor_bridge = Tinklų tiltas
-torbutton.circuit_display.unknown_country = Nežinoma šalis
-torbutton.circuit_display.guard = Sargybinis
-torbutton.circuit_display.guard_note = Jūsų [Sargybinis] mazgas negali pasikeisti.
-torbutton.circuit_display.learn_more = Sužinoti daugiau
-torbutton.content_sizer.margin_tooltip = Tor NarÅ¡yklÄ? prideda Å¡iÄ? paraÅ¡tÄ?, kad jÅ«sų lango plotis ir aukÅ¡tis bÅ«tų mažiau atskiriami ir, tokiu bÅ«du, žmonÄ?ms bÅ«tų sumažinta galimybÄ? sekti jus internete.
-torbutton.panel.tooltip.disabled = SpustelÄ?kite norÄ?dami įjungti Tor
-torbutton.panel.tooltip.enabled = SpustelÄ?kite norÄ?dami iÅ¡jungti Tor
-torbutton.panel.label.disabled = Tor išjungta
-torbutton.panel.label.enabled = Tor įjungta
-extensions.torbutton@xxxxxxxxxxxxxx.description = Torbutton pateikia mygtukÄ?, skirtÄ? konfigÅ«ruoti Tor nustatymus ir greitai bei lengvai iÅ¡valyti privaÄ?ius narÅ¡ymo duomenis.
-torbutton.popup.external.title = Atsisiųsti iÅ¡orinį failo tipÄ??
-torbutton.popup.external.app = Tor NarÅ¡yklÄ? negali atvaizduoti Å¡io failo. Jums teks jį atverti, naudojant kitÄ? programÄ?.\n\n
-torbutton.popup.external.note = Kai kurie failų tipai, gali priversti programas prisijungti prie interneto ne per Tor.\n\n
-torbutton.popup.external.suggest = Saugumo sumetimais, parsisiųstus failus derÄ?tų atverti, atsijungus nuo interneto arba naudojant Tor Live CD tokį kaip Tails.\n
-torbutton.popup.launch = Atsisiųsti failÄ?
-torbutton.popup.cancel = Atsisakyti
-torbutton.popup.dontask = Nuo šiol, failus atsisiųsti automatiškai
-torbutton.popup.no_newnym = Torbutton negali jums saugiai suteikti naujos tapatybÄ?s. Programa neturi prieigos prie Tor valdymo prievado.\n\nAr jÅ«s esate paleidÄ? Tor NarÅ¡yklÄ?s rinkinį?
-torbutton.security_settings.menu.title = Saugumo nustatymai
+torbutton.panel.tooltip.disabled = Paspauskite kad įgalinti Tor
+torbutton.panel.tooltip.enabled = Paspauskite kad atjungti Tor
+torbutton.panel.label.disabled = Tor atjungtas
+torbutton.panel.label.enabled = Tor įgalintas
+extensions.torbutton@xxxxxxxxxxxxxx.description = Torbutton provides a button to configure Tor settings and quickly and easily clear private browsing data.
+torbutton.popup.external.title = Load external content?
+torbutton.popup.external.app = An external application is needed to handle:\n\n
+torbutton.popup.external.note = \n\nNOTE: External applications are NOT Tor safe by default and can unmask you!\n
+torbutton.popup.external.suggest = \nIf this file is untrusted, you should either save it to view while offline or in a VM,\nor consider using a transparent Tor proxy like Tails LiveCD or torsocks.\n
+torbutton.popup.launch = Launch application
+torbutton.popup.cancel = Atšaukti
+torbutton.popup.dontask = Always launch applications from now on
+torbutton.popup.prompted_language = To give you more privacy, Torbutton can request the English language version of web pages. This may cause web pages that you prefer to read in your native language to display in English instead.\n\nWould you like to request English language web pages for better privacy?
+torbutton.popup.no_newnym = Torbutton cannot safely give you a new identity. It does not have access to the Tor Control Port.\n\nAre you running Tor Browser Bundle?
 torbutton.title.prompt_torbrowser = Svarbi Torbutton informacija
 torbutton.popup.prompt_torbrowser = Torbutton works differently now: you can't turn it off any more.\n\nWe made this change because it isn't safe to use Torbutton in a browser that's also used for non-Tor browsing. There were too many bugs there that we couldn't fix any other way.\n\nIf you want to keep using Firefox normally, you should uninstall Torbutton and download Tor Browser Bundle. The privacy properties of Tor Browser are also superior to those of normal Firefox, even when Firefox is used with Torbutton.\n\nTo remove Torbutton, go to Tools->Addons->Extensions and then click the Remove button next to Torbutton.
-torbutton.popup.short_torbrowser = Svarbi Torbutton informacija!\n\nDabar, Torbutton visada yra įjungta.\n\nIÅ¡samesnei informacijai, spustelÄ?kite ant Torbutton.
+torbutton.popup.short_torbrowser = Important Torbutton Information!\n\nTorbutton is now always enabled.\n\nClick on the Torbutton for more information.
 
-torbutton.popup.confirm_plugins = Tokie įskiepiai kaip Flash gali pažeisti jÅ«sų privatumÄ? ir anonimiÅ¡kumÄ?.\n\nJie taip pat gali apeiti Tor tam, kad atskleistų jÅ«sų dabartinÄ? buvimo vietÄ? ir IP adresÄ?.\n\nAr tikrai norite įjungti įskiepius?\n\n
-torbutton.popup.never_ask_again = Daugiau nebeklausti
-torbutton.popup.confirm_newnym = Tor NarÅ¡yklÄ? užvers visus langus ir korteles. Visi svetainių seansai bus prarasti.\n\nPaleisti Tor NarÅ¡yklÄ? iÅ¡ naujo dabar, kad bÅ«tų atstatyta jÅ«sų tapatybÄ??\n\n
-
-torbutton.maximize_warning = Tor NarÅ¡yklÄ?s iÅ¡skleidimas gali leisti svetainÄ?ms nustatyti jÅ«sų monitoriaus dydį, o tai gali bÅ«ti naudojama jÅ«sų sekimui. Rekomenduojame palikti Tor NarÅ¡yklÄ?s langus jų pradiniame numatytajame dydyje.
+torbutton.popup.confirm_plugins = Plugins such as Flash can harm your privacy and anonymity.\n\nThey can also bypass Tor to reveal your current location and IP address.\n\nAre you sure you want to enable plugins?\n\n
+torbutton.popup.never_ask_again = Never ask me again
 
 # Canvas permission prompt. Strings are kept here for ease of translation.
-canvas.siteprompt=Å i svetainÄ? (%S) bandÄ? iÅ¡skleisti HTML5 drobÄ?s paveikslo duomenis, kas gali bÅ«ti panaudota, kad jÅ«sų kompiuteris bÅ«tų unikaliai atpažįstamas.\n\nAr Tor NarÅ¡yklÄ? turÄ?tų leisti Å¡iai svetainei iÅ¡skleisti HTML5 drobÄ?s paveikslo duomenis?
-canvas.notNow=Ne dabar
-canvas.notNowAccessKey=N
+canvas.siteprompt=This website (%S) attempted to access image data on a canvas. Since canvas image data can be used to discover information about your computer, blank image data was returned this time.
 canvas.allow=Leisti ateityje
 canvas.allowAccessKey=A
-canvas.never=Niekada Å¡iai svetainei (rekomenduojama)
+canvas.never=Niekada Å¡iam puslapiui
 canvas.neverAccessKey=e
-
-# Profile/startup error messages. Strings are kept here for ease of translation.
-# LOCALIZATION NOTE: %S is the application name.
-profileProblemTitle=%S profilio problema
-profileReadOnly=Negalite paleisti %S iÅ¡ tik skaitymui skirtos failų sistemos.  PrieÅ¡ norÄ?dami ja naudotis, nukopijuokite %S į kitÄ? vietÄ?.
-profileReadOnlyMac=Negalite paleisti %S iÅ¡ tik skaitymui skirtos failų sistemos.  PrieÅ¡ bandydami jÄ? naudoti, nukopijuokite %S į savo Darbalaukio ar Programų aplankÄ?.
-profileAccessDenied=%S neturi leidimo prieigai prie profilio. PraÅ¡ome suderinti savo failų sistemos leidimus ir bandyti dar kartÄ?.
-profileMigrationFailed=JÅ«sų esamo %S profilio perkÄ?limas nepavyko.\nBus naudojami nauji nustatymai.
-
-# "Downloading update" string for the hamburger menu (see #28885).
-# This string is kept here for ease of translation.
-# LOCALIZATION NOTE: %S is the application name.
-updateDownloadingPanelUILabel=AtsisiunÄ?iamas %S atnaujinimas
-
-# .Onion Page Info prompt.  Strings are kept here for ease of translation.
-pageInfo_OnionEncryptionWithBitsAndProtocol=Šifruotas ryšys (Onion tarnyba, %1$S, %2$S bitų raktai, %3$S)
-pageInfo_OnionEncryption=Šifruotas ryšys (Onion tarnyba)
-
-# 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 paslaugai trūksta kliento leidimo
-onionServices.authPrompt.description=%S prašo jūsų asmeninio rakto.
-onionServices.authPrompt.keyPlaceholder=Ä®veskite asmeninį raktÄ? skirtÄ? Å¡iai onion paslaugai
-onionServices.authPrompt.done=Atlikta
-onionServices.authPrompt.doneAccessKey=u
-onionServices.authPrompt.invalidKey=Ä®veskite galiojantį raktÄ? (52 base32 arba 44 base64 simbolius)
-onionServices.authPrompt.failedToSetKey=Nepavyko konfigÅ«ruoti Tor naudojant jÅ«sų raktÄ?
diff --git a/chrome/locale/ms/aboutDialog.dtd b/chrome/locale/ms/aboutDialog.dtd
deleted file mode 100644
index ba27c728..00000000
--- a/chrome/locale/ms/aboutDialog.dtd
+++ /dev/null
@@ -1,19 +0,0 @@
-<!ENTITY project.start           "&brandShortName; dibangunkan oleh">
-<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org -->
-<!ENTITY project.tpoLink         "&vendorShortName;">
-<!ENTITY project.end             ", sebuah usaha tidak berasaskan keuntungan untuk melindungi kerahsiaan dan kebebasan atas talian anda.">
-
-<!ENTITY help.start              "Mahu membantu?">
-<!-- LOCALIZATION NOTE (help.donate): This is a link title that links to https://www.torproject.org/donate/donate.html.en -->
-<!ENTITY help.donateLink         "Derma">
-<!ENTITY help.or                 "atau">
-<!-- LOCALIZATION NOTE (help.getInvolvedLink): This is a link title that links to https://www.torproject.org/getinvolved/volunteer.html.en -->
-<!ENTITY help.getInvolvedLink    "sertai">
-<!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   "Ada Pertanyaan?">
-<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to https://www.torproject.org/getinvolved/relays -->
-<!ENTITY bottomLinks.grow        "Bantulah Pembangunan Rangkaian Tor!">
-<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license -->
-<!ENTITY bottomLinks.license  "Maklumat Pelesenan">
-<!ENTITY tor.TrademarkStatement   "'Tor' dan 'Logo Onion' adalah cap dagangan berdaftar bagi Projek Tor, Inc.">
diff --git a/chrome/locale/ms/aboutTBUpdate.dtd b/chrome/locale/ms/aboutTBUpdate.dtd
deleted file mode 100644
index 30470b87..00000000
--- a/chrome/locale/ms/aboutTBUpdate.dtd
+++ /dev/null
@@ -1,8 +0,0 @@
-<!ENTITY aboutTBUpdate.changelogTitle "Log Perubahan Pelayar Tor">
-<!ENTITY aboutTBUpdate.updated "Pelayar Tor telah dikemaskinikan.">
-<!ENTITY aboutTBUpdate.linkPrefix "Untuk dapatkan maklumat terkini berkenaan keluaran ini.">
-<!ENTITY aboutTBUpdate.linkLabel  "lawati laman sesawang kami">
-<!ENTITY aboutTBUpdate.linkSuffix ".">
-<!ENTITY aboutTBUpdate.version "Versi">
-<!ENTITY aboutTBUpdate.releaseDate "Tarikh Keluaran">
-<!ENTITY aboutTBUpdate.releaseNotes "Nota Keluaran">
diff --git a/chrome/locale/ms/aboutTor.dtd b/chrome/locale/ms/aboutTor.dtd
index 19fe7960..9f14022b 100644
--- a/chrome/locale/ms/aboutTor.dtd
+++ b/chrome/locale/ms/aboutTor.dtd
@@ -1,32 +1,47 @@
 <!--
-   - Copyright (c) 2019, The Tor Project, Inc.
+   - Copyright (c) 2014, The Tor Project, Inc.
    - See LICENSE for licensing information.
    - vim: set sw=2 sts=2 ts=8 et syntax=xml:
   -->
 
-<!ENTITY aboutTor.title "Perihal Tor">
+<!ENTITY aboutTor.title "About Tor">
 
-<!ENTITY aboutTor.viewChangelog.label "Lihat Log Perubahan">
+<!ENTITY aboutTor.outOfDateTorOn.label "HOWEVER, this browser is out of date.">
+<!ENTITY aboutTor.outOfDateTorOff.label "ALSO, this browser is out of date.">
+<!ENTITY aboutTor.outOfDate2.label "Click on the onion and then choose Download Tor Browser Bundle Update.">
 
-<!ENTITY aboutTor.ready.label "Menjelajahlah. Secara Persendirian.">
-<!ENTITY aboutTor.ready2.label "Anda kini bersedia menikmati pengalaman melayari Internet secara persendirian.">
-<!ENTITY aboutTor.failure.label "Sesuatu telah berlaku!">
-<!ENTITY aboutTor.failure2.label "Tor tidak berfungsi ke atas pelayar ini.">
+<!ENTITY aboutTor.check.label "Test Tor Network Settings">
 
-<!ENTITY aboutTor.search.label "Gelintar dengan DuckDuckGo">
-<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com";>
+<!ENTITY aboutTor.success.label "Congratulations!">
+<!ENTITY aboutTor.success2.label "This browser is configured to use Tor.">
+<!ENTITY aboutTor.success3.label "You are now free to browse the Internet anonymously.">
+<!ENTITY aboutTor.failure.label "Something Went Wrong!">
+<!ENTITY aboutTor.failure2.label "Tor is not working in this browser.">
+<!ENTITY aboutTor.failure3prefix.label "For assistance, please contact ">
+<!ENTITY aboutTor.failure3Link "help@xxxxxxxxxxxxxxxxx">
+<!ENTITY aboutTor.failure3suffix.label ".">
 
-<!ENTITY aboutTor.torbrowser_user_manual_questions.label "Ada Pertanyaan?">
-<!ENTITY aboutTor.torbrowser_user_manual_link.label "Periksa Panduan Pelayar Tor kami »">
-<!-- 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 "Panduan Pelayar Tor">
+<!ENTITY aboutTor.search.label "Search">
+<!ENTITY aboutTor.searchSPPost.link "https://startpage.com/do/search";>
+<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com/html/";>
 
-<!ENTITY aboutTor.tor_mission.label "Projek Tor ialah organisasi bukan-berasaskan-keuntungan US 501(c)(3) yang melindungi hak-hak kemanusian dan kebebasan dengan mencipta dan menghasilkan teknologi keawanamaan dan kerahsiaan bebas dan bersumber-terbuka, menyokong ketersediaan dan penggunaan tanpa-had, dan melanjutkan kesefahaman saintifik dan popular mereka.">
-<!ENTITY aboutTor.getInvolved.label "Sertai »">
-<!ENTITY aboutTor.getInvolved.link "https://www.torproject.org/getinvolved/volunteer.html.en";>
+<!ENTITY aboutTor.torInfo1.label "Additional Info:">
+<!ENTITY aboutTor.torInfo2.label "Country &amp; IP Address:">
+<!ENTITY aboutTor.torInfo3.label "Exit Node:">
+<!ENTITY aboutTor.torInfo4.label "This server does not log any information about visitors.">
+<!ENTITY aboutTor.whatnextQuestion.label "What Next?">
+<!ENTITY aboutTor.whatnextAnswer.label "Tor is NOT all you need to browse anonymously! You may need to change some of your browsing habits to ensure your identity stays safe.">
+<!ENTITY aboutTor.whatnext.label "Tips On Staying Anonymous »">
+<!ENTITY aboutTor.whatnext.link "https://www.torproject.org/download/download.html.en#warning";>
+<!ENTITY aboutTor.helpInfo1.label "You Can Help!">
+<!ENTITY aboutTor.helpInfo2.label "There are many ways you can help make the Tor Network faster and stronger:">
+<!ENTITY aboutTor.helpInfo3.label "Run a Tor Relay Node »">
+<!ENTITY aboutTor.helpInfo3.link "https://www.torproject.org/docs/tor-doc-relay.html.en";>
+<!ENTITY aboutTor.helpInfo4.label "Volunteer Your Services »">
+<!ENTITY aboutTor.helpInfo4.link "https://www.torproject.org/getinvolved/volunteer.html.en";>
+<!ENTITY aboutTor.helpInfo5.label "Make a Donation »">
+<!ENTITY aboutTor.helpInfo5.link "https://www.torproject.org/donate/donate.html.en";>
 
-<!ENTITY aboutTor.newsletter.tagline "Dapatkan berita terkini Tor yang terus ke dalam kotak mel anda.">
-<!ENTITY aboutTor.newsletter.link_text "Daftar untuk dapatkan Berita Tor.">
-<!ENTITY aboutTor.donationBanner.line2e "Pastika Tor kekal teguh.">
-<!ENTITY aboutTor.donationBanner.buttonA "Dermalah Sekarang">
+<!ENTITY aboutTor.footer.label "The Tor Project is a US 501(c)(3) non-profit dedicated to the research, development, and education of online anonymity and privacy.">
+<!ENTITY aboutTor.learnMore.label "Learn more about The Tor Project »">
+<!ENTITY aboutTor.learnMore.link "https://www.torproject.org/about/overview.html.en";>
diff --git a/chrome/locale/ms/brand.dtd b/chrome/locale/ms/brand.dtd
index d6f3c62d..47d33862 100644
--- a/chrome/locale/ms/brand.dtd
+++ b/chrome/locale/ms/brand.dtd
@@ -2,14 +2,7 @@
    - 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      "Pelayar Tor">
-<!ENTITY  brandShortName        "Pelayar Tor">
-<!ENTITY  brandFullName         "Pelayar Tor">
-<!ENTITY  vendorShortName       "Projek Tor">
-<!ENTITY  trademarkInfo.part1   "'Tor' dan 'Logo Onion' adalah cap dagangan berdaftar bagi Projek Tor, Inc.">
-
-<!-- The following strings are for bug #10280's UI. We place them here for our translators -->
-<!ENTITY plugins.installed.find "Klik untuk muat pemalam sistem terpasang">
-<!ENTITY plugins.installed.enable "Benarkan pemalam">
-<!ENTITY plugins.installed.disable "Lumpuhkan pemalam">
-<!ENTITY plugins.installed.disable.tip "Klik untuk elak memuatkan pemalam sistem">
+<!ENTITY  brandShortName        "Tor Browser">
+<!ENTITY  brandFullName         "Tor Browser">
+<!ENTITY  vendorShortName       "Tor Project">
+<!ENTITY  trademarkInfo.part1   "'Tor' and the 'Onion Logo' are registered trademarks of the Tor Project, Inc.">
diff --git a/chrome/locale/ms/brand.properties b/chrome/locale/ms/brand.properties
index 5adee627..f63def38 100644
--- a/chrome/locale/ms/brand.properties
+++ b/chrome/locale/ms/brand.properties
@@ -2,15 +2,14 @@
 # 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=Pelayar Tor
-brandShortName=Pelayar Tor
-brandFullName=Pelayar Tor
-vendorShortName=Projek Tor
+brandShortName=Tor Browser
+brandFullName=Tor Browser
+vendorShortName=Tor Project
 
-homePageSingleStartMain=Firefox Start, halaman utama yang pantas dan dilengkapi dengan gelintar terbina-dalam.
-homePageImport=Import halaman utama anda dari %S
+homePageSingleStartMain=Firefox Start, a fast home page with built-in search
+homePageImport=Import your home page from %S
 
-homePageMigrationPageTitle=Pemilihan Laman Utama
-homePageMigrationDescription=Sila pilih halaman utama yang ingin digunakan:
+homePageMigrationPageTitle=Home Page Selection
+homePageMigrationDescription=Please select the home page you wish to use:
 
-syncBrandShortName=Segerak
+syncBrandShortName=Sync
diff --git a/chrome/locale/ms/browserOnboarding.properties b/chrome/locale/ms/browserOnboarding.properties
deleted file mode 100644
index 2a304198..00000000
--- a/chrome/locale/ms/browserOnboarding.properties
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright (c) 2019, The Tor Project, Inc.
-# See LICENSE for licensing information.
-# vim: set sw=2 sts=2 ts=8 et:
-
-onboarding.tour-tor-welcome=Selamat Datang
-onboarding.tour-tor-welcome.title=Anda sedia.
-onboarding.tour-tor-welcome.description=Pelayar Tor menawatkan piawaian kerahsiaan dan keselamatan tertinggi ketika melayari sesawang. Anda kini dilindungi dari penjejakan, pemantauan, dan penapisan. Panduan pantas ini akan membantu anda bagaimana hendak menggunakannya.
-onboarding.tour-tor-welcome.next-button=Pergi ke Privasi
-
-onboarding.tour-tor-privacy=Privasi
-onboarding.tour-tor-privacy.title=Endah penjejak dan pengintip.
-onboarding.tour-tor-privacy.description=Pelayar Tor mengasingkan kuki dan memadam sejarah pelayar anda selepas sesi tamat. Pengubahsuaian ini memastikan kerahsiaan dan keselamatan pelayar anda dilindungi. Klik 'Rangkaian Tor' untuk mengetahui bagaiaman kami melindungi anda pada tahap rangkaian.
-onboarding.tour-tor-privacy.button=Pergi ke Rangkaian Tor
-
-onboarding.tour-tor-network=Rangkaian Tor
-onboarding.tour-tor-network.title=Menjelajah dengan rangkaian tidak terpusat.
-onboarding.tour-tor-network.description=Pelayar Tor menghubungkan anda dengan rangkaian Tor yang diurus oleh beribu-ribu para sukarelawan di seluruh dunia. Tidak seperti VPN, tiada kegagalan atau entiti terpusat yang anda kena percaya untuk menikmati internet secara persendirian.
-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=Laras Tetapan Rangkaian Tor anda
-onboarding.tour-tor-network.button=Pergi ke Paparan Litar
-
-onboarding.tour-tor-circuit-display=Paparan Litar
-onboarding.tour-tor-circuit-display.title=Lihat laluan anda.
-onboarding.tour-tor-circuit-display.description=Bagi setiap domain yang anda lawati, trafik anda disampaikan dan disulitkan dalam litar merentasi tiga geganti Tor mengelilingi dunia. Tiada laman sesawang mengetahui lokasi anda bersambung. Anda boleh pohon satu litar baharu dengan mengklik 'Litar Baharu untuk Laman ini' pada Paparan Litar kami.
-onboarding.tour-tor-circuit-display.button=Lihat Laluan Saya
-onboarding.tour-tor-circuit-display.next-button=Pergi ke Keselamatan
-
-onboarding.tour-tor-security=Keselamatan
-onboarding.tour-tor-security.title=Pilih pengalaman yang dikehendaki.
-onboarding.tour-tor-security.description=Kami juga menyediakan tetapan tambahan untuk menambahbaik keselamatan pelayar anda. Tetapan Keselamatan kami membolehkan anda sekat unsur-unsur yang boleh digunakan untuk menyerang komputer anda. Klik di bawah untuk melihat apakah perbezaan pilihan-pilihan tawarkan.
-onboarding.tour-tor-security.description-suffix=Perhatian: Secara lalai, NoScript dan HTTPS Everywhere tidak di sertakan dalam palang alat, tetapi anda boleh suaikan palang alat untuk menambahnya.
-onboarding.tour-tor-security-level.button=Lihat Tahap Keselamatan Anda
-onboarding.tour-tor-security-level.next-button=Pergi ke Peuta Pengalaman
-
-onboarding.tour-tor-expect-differences=Petua Pengalaman.
-onboarding.tour-tor-expect-differences.title=Jangkakan beberapa perbezaan.
-onboarding.tour-tor-expect-differences.description=Dengan semua fitur keselamatan dan privasi yang disediakan oleh Tor, pengalaman anda ketika melayari internet menjadi sedikit berbeza. Menjadi lebih perlahan berbanding sebelum ini dan juga bergantung pada tahap keselamatan yang anda tetapkan, sesetengah unsur-unsur mungkin tidak berfungsi atau dimuatkan. Anda juga akan ditanya sama ada manusia dan bukan robot.
-onboarding.tour-tor-expect-differences.button=Lihat FAQ
-onboarding.tour-tor-expect-differences.next-button=Pergi ke Perkhidmatan Onion
-
-onboarding.tour-tor-onion-services=Perkhidmatan Onion
-onboarding.tour-tor-onion-services.title=Mahu lebih dilindungi.
-onboarding.tour-tor-onion-services.description=Perkhidmatan Onion merupakan laman-laman berakhir dengan .onion yang menyediakan perlindungan tambahan kepada para penerbit dan pelawat, termasuklah perlindungan terhadap tapisan. Perkhidmatan Onion membolehkan sesiapa sahaja menyediakan kandungan dan perkhidmatan secara awanama. Klik di bawah untuk melawati laman onion DuckDuckGo.
-onboarding.tour-tor-onion-services.button=Lawati Onion
-onboarding.tour-tor-onion-services.next-button=Selesai
-
-onboarding.overlay-icon-tooltip-updated2=Lihat yang terbaharu\ndi dalam %S
-onboarding.tour-tor-update.prefix-new=Baharu
-onboarding.tour-tor-update.prefix-updated=Dikemaskini
-
-onboarding.tour-tor-toolbar=Palang Alat
-onboarding.tour-tor-toolbar-update-9.0.title=Selamat Tinggal Butang Onion.
-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=Pergi ke Rangkaian Tor
-
-# Circuit Display onboarding.
-onboarding.tor-circuit-display.next=Seterusnya
-onboarding.tor-circuit-display.done=Selesai
-onboarding.tor-circuit-display.one-of-three=1 dari 3
-onboarding.tor-circuit-display.two-of-three=2 dari 3
-onboarding.tor-circuit-display.three-of-three=3 dari 3
-
-onboarding.tor-circuit-display.intro.title=Bagaimanakah litar-litar ini berfungsi?
-onboarding.tor-circuit-display.intro.msg=Litar-litar diperbuat daripada geganti-geganti terumpuk secara rawak, yang merupakan komputer-komputer di seluruh dunia yang dikonfigur khas untuk memajukan trafik Tor. Litar-litar membolehkan anda melayari Internet secara persendirian yang dihubungkan dengan perkhidmatan onion.
-
-onboarding.tor-circuit-display.diagram.title=Paparan Litar
-onboarding.tor-circuit-display.diagram.msg=Rajah ini menunjukkan geganti-geganti yang terlibat dengan litar bagi laman sesawang ini. Untuk menghindari pemautan aktiviti merentasi laman-laman yang berbeza, setiap laman sesawang memperoleh satu litar yang berlainan.
-
-onboarding.tor-circuit-display.new-circuit.title=Anda perlukan satu litar baharu?
-onboarding.tor-circuit-display.new-circuit.msg=Jika anda masih tidak berjaya bersambung dengan laman sesawang yang ingin dilawati atau laman tidak dimuatkan dengan betul, anda boleh guna butang ini untuk memuatkan semula laman tersebut dengan satu litar baharu.
diff --git a/chrome/locale/ms/torbutton.dtd b/chrome/locale/ms/torbutton.dtd
index 8a63b220..fa587065 100644
--- a/chrome/locale/ms/torbutton.dtd
+++ b/chrome/locale/ms/torbutton.dtd
@@ -1,52 +1,19 @@
-<!ENTITY torbutton.context_menu.new_identity "Identiti Baharu">
+<!ENTITY torbutton.context_menu.new_identity "New Identity">
 <!ENTITY torbutton.context_menu.new_identity_key "I">
-<!ENTITY torbutton.context_menu.new_circuit "Litar Tor baharu untuk Laman ini">
-<!ENTITY torbutton.context_menu.new_circuit_key "C">
-<!ENTITY torbutton.context_menu.networksettings "Tetapan Rangkaian Tor...">
-<!ENTITY torbutton.context_menu.networksettings.key "N">
-<!ENTITY torbutton.context_menu.downloadUpdate "Periksa untuk dapatkan Kemaskini Pelayar Tor...">
+<!ENTITY torbutton.context_menu.networksettings "Open Network Settingsâ?¦">
+<!ENTITY torbutton.context_menu.downloadUpdate "Download Tor Browser Bundle Update...">
 <!ENTITY torbutton.context_menu.downloadUpdate.key "U">
-<!ENTITY torbutton.context_menu.cookieProtections "Perlindungan Kuki...">
+<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
 <!ENTITY torbutton.context_menu.cookieProtections.key "C">
-<!ENTITY torbutton.button.tooltip "Klik untuk mengawalkan Torbutton">
-<!ENTITY torbutton.prefs.security_settings "Tetapan Keselamatan Pelayar Tor">
-<!ENTITY torbutton.cookiedialog.title "Urus Perlindungan Kuki">
-<!ENTITY torbutton.cookiedialog.lockCol "Dilindungi">
-<!ENTITY torbutton.cookiedialog.domainCol "Hos">
-<!ENTITY torbutton.cookiedialog.nameCol "Nama">
-<!ENTITY torbutton.cookiedialog.pathCol "Laluan">
-<!ENTITY torbutton.cookiedialog.protectCookie "Lindung Kuki">
-<!ENTITY torbutton.cookiedialog.removeCookie "Buang Kuki">
-<!ENTITY torbutton.cookiedialog.unprotectCookie "Kuki Tidak Dilindungi">
-<!ENTITY torbutton.cookiedialog.removeAllBut "Buang Semua Kecuali Dilindungi">
-<!ENTITY torbutton.cookiedialog.saveAllCookies "Lindungi Kuki Baharu">
-<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Jangan Lindungi Kuki Baharu">
-<!ENTITY torbutton.prefs.sec_caption "Tahap Keselamatan">
-<!ENTITY torbutton.prefs.sec_caption_tooltip "Pelaras Keselamatan membolehkan anda lumpuhkan beberapa fitur pelayar yang mana ia menjadikan pelayar anda mudah terdedah dengan serangan penggodaman.">
-<!ENTITY torbutton.prefs.sec_standard_label "Piawai">
-<!ENTITY torbutton.prefs.sec_standard_description "Semua Pelayar Tor dan fitur laman sesawang telah dibenarkan.">
-<!ENTITY torbutton.prefs.sec_safer_label "Lebih Selamat">
-<!ENTITY torbutton.prefs.sec_safer_description "Fitur-fitur laman sesawang yang dilumpuhkan biasanya merbahaya, boleh menyebabkan beberapa laman kehilangan kefungsiannya.">
-<!ENTITY torbutton.prefs.sec_safer_list_label "Pada tetapan lebih selamat:">
-<!ENTITY torbutton.prefs.sec_safest_label "Paling Selamat">
-<!ENTITY torbutton.prefs.sec_safest_description "Hanya benarkan fitur-fitur laman sesawang yang diperlukan untuk laman-laman statik dan perkhidmatan asas. Perubahan ini dapat menjejaskan imej, media dan skrip.">
-<!ENTITY torbutton.prefs.sec_safest_list_label "Pada tetapan paling selamat:">
-<!ENTITY torbutton.prefs.sec_learn_more_label "Ketahui lebih lanjut">
-<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "Skrip Java dilumpuhkan pada laman-laman bukan-HTTPS.">
-<!ENTITY torbutton.prefs.sec_js_disabled "Skrip Java dilumpuhkan secara lalai untuk semua laman.">
-<!ENTITY torbutton.prefs.sec_limit_typography "Sesetengah fon dan simbol matematik dilumpuhkan.">
-<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Sesetengah fon, ikon, simbol matematik, dan imej dilumpuhkan.">
-<!ENTITY torbutton.prefs.sec_click_to_play_media "Audio dan video (media HTML5) dan WebGL adalah klik-untuk-dimainkan.">
-<!ENTITY torbutton.prefs.sec_custom_warning "Suai">
-<!ENTITY torbutton.prefs.sec_overview "Lumpuhkan beberapa fitur sesawang yang boleh digunakan untuk menyerang keselamatan dan keawanamaan anda.">
-<!ENTITY torbutton.prefs.sec_standard_tooltip "Tahap Keselamatan: Piawai">
-<!ENTITY torbutton.prefs.sec_safer_tooltip "Tahap Keselamatan : Lebih Selamat">
-<!ENTITY torbutton.prefs.sec_safest_tooltip "Tahap Keselamatan : Paling Selamat">
-<!ENTITY torbutton.prefs.sec_custom_summary "Keutamaan pelayar suai anda telah menyebabkan tetapan keselamatan luar jangkaan. Atas sebab keselamatan dan kerahsiaan, kami sarankan anda memilih salah satu daripada tahap keselamatan lalai yang ada.">
-<!ENTITY torbutton.prefs.sec_restore_defaults "Pulih Lalai">
-<!ENTITY torbutton.prefs.sec_advanced_security_settings "Tetapan Keselamatan Lanjutan...">
-<!ENTITY torbutton.circuit_display.title "Litar Tor">
-<!ENTITY torbutton.circuit_display.new_circuit "Lihat baharu untuk Laman ini">
-
-<!-- Onion services strings.  Strings are kept here for ease of translation. -->
-<!ENTITY torbutton.onionServices.authPrompt.tooltip "Buka bisikan pengesahihan klien perkhidmatan onion">
+<!ENTITY torbutton.button.tooltip "Click to initialize Torbutton">
+<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
+<!ENTITY torbutton.cookiedialog.lockCol "Protected">
+<!ENTITY torbutton.cookiedialog.domainCol "Host">
+<!ENTITY torbutton.cookiedialog.nameCol "Name">
+<!ENTITY torbutton.cookiedialog.pathCol "Path">
+<!ENTITY torbutton.cookiedialog.protectCookie "Protect Cookie">
+<!ENTITY torbutton.cookiedialog.removeCookie "Remove Cookie">
+<!ENTITY torbutton.cookiedialog.unprotectCookie "Unprotect Cookie">
+<!ENTITY torbutton.cookiedialog.removeAllBut "Remove All But Protected">
+<!ENTITY torbutton.cookiedialog.saveAllCookies "Protect New Cookies">
+<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Do Not Protect New Cookies">
diff --git a/chrome/locale/ms/torbutton.properties b/chrome/locale/ms/torbutton.properties
index 50b40d37..ee5b1f95 100644
--- a/chrome/locale/ms/torbutton.properties
+++ b/chrome/locale/ms/torbutton.properties
@@ -1,70 +1,27 @@
-torbutton.circuit_display.internet = Internet
-torbutton.circuit_display.ip_unknown = IP tidak diketahui
-torbutton.circuit_display.onion_site = Laman Onion
-torbutton.circuit_display.this_browser = Pelayar ini
-torbutton.circuit_display.relay = Geganti
-torbutton.circuit_display.tor_bridge = Titi
-torbutton.circuit_display.unknown_country = Negara tidak diketahui
-torbutton.circuit_display.guard = Jaga
-torbutton.circuit_display.guard_note = Nod [Jaga] anda tidak berubah.
-torbutton.circuit_display.learn_more = Ketahui lebih lanjut
-torbutton.content_sizer.margin_tooltip = Pelayar Tor menambah jidar ini untuk memastikan tinggi dan lebar tetingkap anda kurang dikenali, dan seterusnya mengurangkan keupayaan orang lain menjejak anda ketika berada diatas-talian.
-torbutton.panel.tooltip.disabled = Klik untuk benarkan Tor
-torbutton.panel.tooltip.enabled = Klik untuk lumpuhkan Tor
-torbutton.panel.label.disabled = Tor Dilumpuhkan
-torbutton.panel.label.enabled = Tor Dibenarkan
-extensions.torbutton@xxxxxxxxxxxxxx.description = Torbutton menyediakan butang bagi mengkonfigur tetapan Tor secara pantas dan mudah membersihkan data pelayaran persendirian anda.
-torbutton.popup.external.title = Muat turun jenis fail luar?
-torbutton.popup.external.app = Pelayar Tor tidak dapat paparkan fail ini. Anda perlu membukanya dengan aplikasi lain.\n\n
-torbutton.popup.external.note = Sesetengah jenis fail boleh menyebabkan aplikasi menyambung dengan Internet tanpa menggunakan Tor.\n\n
-torbutton.popup.external.suggest = Sebagai langkah berjaga-jaga, anda sepatutnya hanya membuka fail dimuat turun ketika berada diluar talian, atau guna CD Langsung Tor seperti Tails.\n
-torbutton.popup.launch = Muat turun fail
-torbutton.popup.cancel = Batal
-torbutton.popup.dontask = Muat turun fail secara automatik mulai sekarang
-torbutton.popup.no_newnym = Torbutton tidak dapat memberikan anda identiti baharu secara selamat. Ia tidak mempunyai capaian ke Port Kawalan Tor.\n\nAnda pasti masih menjalankan Berkas Pelayar Tor?
-torbutton.security_settings.menu.title = Tetapan Keselamatan
-torbutton.title.prompt_torbrowser = Maklumat Torbutton Penting
-torbutton.popup.prompt_torbrowser = Torbutton berfungsi secara berlainan sekarang: anda tidak boleh mematikannya lagi.\n\nKami membuat perubahan ini kerana ia tidak selamat menggunakan Torbutton dalam pelayar yang juga digunakan untuk pelayaran bukan-Tor. Terdapat terlalu banyak pepijat yang masih belum dibaiki.\n\nJika anda mahu menggunakan Firefox seperti biasa, anda patut menyahpasang Torbutton dan muat turun Berkas Pelayar Tor. Sifat kerahsiaan Pelayar Tor adalah lebih baik berbanding Firefox biasa, walaupun Firefox digandingkan dengan Torbutton.\n\nUntuk membuang Torbutton, pergi ke Alatan>Tambahan>Sambungan dan kemudian klik butang Buang bersebelahan Torbutton.
-torbutton.popup.short_torbrowser = Maklumat Torbutton Penting! \n\nTorbutton kini sentiasa dibenarkan. \n\nKlik pada Torbutton untuk maklumat lanjut.
+torbutton.panel.tooltip.disabled = Click to enable Tor
+torbutton.panel.tooltip.enabled = Click to disable Tor
+torbutton.panel.label.disabled = Tor Disabled
+torbutton.panel.label.enabled = Tor Enabled
+extensions.torbutton@xxxxxxxxxxxxxx.description = Torbutton provides a button to configure Tor settings and quickly and easily clear private browsing data.
+torbutton.popup.external.title = Load external content?
+torbutton.popup.external.app = An external application is needed to handle:\n\n
+torbutton.popup.external.note = \n\nNOTE: External applications are NOT Tor safe by default and can unmask you!\n
+torbutton.popup.external.suggest = \nIf this file is untrusted, you should either save it to view while offline or in a VM,\nor consider using a transparent Tor proxy like Tails LiveCD or torsocks.\n
+torbutton.popup.launch = Launch application
+torbutton.popup.cancel = Cancel
+torbutton.popup.dontask = Always launch applications from now on
+torbutton.popup.prompted_language = To give you more privacy, Torbutton can request the English language version of web pages. This may cause web pages that you prefer to read in your native language to display in English instead.\n\nWould you like to request English language web pages for better privacy?
+torbutton.popup.no_newnym = Torbutton cannot safely give you a new identity. It does not have access to the Tor Control Port.\n\nAre you running Tor Browser Bundle?
+torbutton.title.prompt_torbrowser = Important Torbutton Information
+torbutton.popup.prompt_torbrowser = Torbutton works differently now: you can't turn it off any more.\n\nWe made this change because it isn't safe to use Torbutton in a browser that's also used for non-Tor browsing. There were too many bugs there that we couldn't fix any other way.\n\nIf you want to keep using Firefox normally, you should uninstall Torbutton and download Tor Browser Bundle. The privacy properties of Tor Browser are also superior to those of normal Firefox, even when Firefox is used with Torbutton.\n\nTo remove Torbutton, go to Tools->Addons->Extensions and then click the Remove button next to Torbutton.
+torbutton.popup.short_torbrowser = Important Torbutton Information!\n\nTorbutton is now always enabled.\n\nClick on the Torbutton for more information.
 
-torbutton.popup.confirm_plugins = Pemalam seperti Flash boleh mengganggu privasi dan keawanamaan anda.\n\nIa juga boleh melepasi Tor dan mendedahkan lokasi dan alamat IP semasa anda.\n\nAnda pasti anda mahu benarkan pemalam tersebut?\n\n
-torbutton.popup.never_ask_again = Jangan tanya saya lagi
-torbutton.popup.confirm_newnym = Pelayar Tor akan menutup semua tetingkap dan tab. Semua sesi laman sesawang akan hilang.\n\nMulakan semula Pelayar Tor sekarang untuk tetapkan semula identiti anda?\n\n
-
-torbutton.maximize_warning = Memaksimumkan Pelayar Tor dapat membenarkan laman sesawang tentukan saiz monitor anda, yang mana boleh digunakan untuk menjejak anda. Kami sarankan anda biarkan tetingkap Pelayar Tor dalam saiz lalai asalnya.
+torbutton.popup.confirm_plugins = Plugins such as Flash can harm your privacy and anonymity.\n\nThey can also bypass Tor to reveal your current location and IP address.\n\nAre you sure you want to enable plugins?\n\n
+torbutton.popup.never_ask_again = Never ask me again
 
 # Canvas permission prompt. Strings are kept here for ease of translation.
-canvas.siteprompt=Laman sesawang (%S) ini cuba mengekstrak data imej kanvas HTML5, yang boleh digunakan untuk mengecam komputer anda secara unik.\n\nPatutkah Pelayar Tor membenarkan laman sesawang ini mengekstrak data imej kanvas HTML5?
-canvas.notNow=Bukan Sekarang
-canvas.notNowAccessKey=N
-canvas.allow=Benarkan pada masa hadapan
+canvas.siteprompt=This website (%S) attempted to access image data on a canvas. Since canvas image data can be used to discover information about your computer, blank image data was returned this time.
+canvas.allow=Allow in the Future
 canvas.allowAccessKey=A
-canvas.never=Tidak sesekali untuk laman ini (disarankan)
+canvas.never=Never for This Site
 canvas.neverAccessKey=e
-
-# Profile/startup error messages. Strings are kept here for ease of translation.
-# LOCALIZATION NOTE: %S is the application name.
-profileProblemTitle=Masalah Profil %S
-profileReadOnly=Anda tidak boleh jalankan %S dari sistem fail baca-sahaja. Sila salin %S ke lokasi lain sebelum cuba gunakannya.
-profileReadOnlyMac=Anda tidak boleh jalankan %S dari sistem fail baca-sahaja. Sila salin %S ke folder Desktop atau Aplikasi anda sebelum cuba gunakannya.
-profileAccessDenied=%S tidak mempunyai keizinan untuk mencapai profil. Sila laras keizinan sistem fail anda dan cuba sekali lagi.
-profileMigrationFailed=Pemindahan profil sedia anda telah gagal.\nTetapan baharu akan digunakan.
-
-# "Downloading update" string for the hamburger menu (see #28885).
-# This string is kept here for ease of translation.
-# LOCALIZATION NOTE: %S is the application name.
-updateDownloadingPanelUILabel=Memuat turun %S kemaskini
-
-# .Onion Page Info prompt.  Strings are kept here for ease of translation.
-pageInfo_OnionEncryptionWithBitsAndProtocol=Sambungan Tersulit (Perkhidmatan Onion, %1$S, %2$S bit kunci, %3$S)
-pageInfo_OnionEncryption=Sambungan Tersulit (Perkhidmatan 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.authPrompt.done=Selesai
-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
diff --git a/chrome/locale/th/aboutDialog.dtd b/chrome/locale/th/aboutDialog.dtd
deleted file mode 100644
index 769e8174..00000000
--- a/chrome/locale/th/aboutDialog.dtd
+++ /dev/null
@@ -1,19 +0,0 @@
-<!ENTITY project.start           "&brandShortName; �ั��า��ย">
-<!-- LOCALIZATION NOTE (project.tpoLink): This is a link title that links to https://www.torproject.org -->
-<!ENTITY project.tpoLink         "the &vendorShortName;">
-<!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.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        "��วย�ห���รือ��าย�อร���ิ���!">
-<!-- LOCALIZATION NOTE (bottom.questions): This is a link title that links to about:license -->
-<!ENTITY bottomLinks.license  "��อมูลลิ�สิ��ิ�">
-<!ENTITY tor.TrademarkStatement   "'Tor '�ละ' Onion Logo '������รื�อ�หมาย�าร��า���ะ��ีย��อ���ร��าร Tor Project, Inc.">
diff --git a/chrome/locale/th/aboutTBUpdate.dtd b/chrome/locale/th/aboutTBUpdate.dtd
deleted file mode 100644
index c0d1746b..00000000
--- a/chrome/locale/th/aboutTBUpdate.dtd
+++ /dev/null
@@ -1,8 +0,0 @@
-<!ENTITY aboutTBUpdate.changelogTitle "�ั��ึ��าร��ลี�ย���ล��อ� Tor Browser">
-<!ENTITY aboutTBUpdate.updated "Tor Browser �ู�อั�����ล�ว">
-<!ENTITY aboutTBUpdate.linkPrefix "สำหรั���อมูล�ี�อั�����ี�สุ��อ��าร��ย��ร��รั���ี�">
-<!ENTITY aboutTBUpdate.linkLabel  "�ู�ว�������อ��รา">
-<!ENTITY aboutTBUpdate.linkSuffix ".">
-<!ENTITY aboutTBUpdate.version "รุ��">
-<!ENTITY aboutTBUpdate.releaseDate "วั��ี���ย��ร�">
-<!ENTITY aboutTBUpdate.releaseNotes "หมาย�ห�ุ�าร��ย��ร�">
diff --git a/chrome/locale/th/aboutTor.dtd b/chrome/locale/th/aboutTor.dtd
index 071ec960..9f14022b 100644
--- a/chrome/locale/th/aboutTor.dtd
+++ b/chrome/locale/th/aboutTor.dtd
@@ -1,32 +1,47 @@
 <!--
-   - Copyright (c) 2019, The Tor Project, Inc.
+   - Copyright (c) 2014, The Tor Project, Inc.
    - See LICENSE for licensing information.
    - vim: set sw=2 sts=2 ts=8 et syntax=xml:
   -->
 
-<!ENTITY aboutTor.title "��ี�ยว�ั� Tor">
+<!ENTITY aboutTor.title "About Tor">
 
-<!ENTITY aboutTor.viewChangelog.label "�ู�ั��ึ��าร��ลี�ย���ล�">
+<!ENTITY aboutTor.outOfDateTorOn.label "HOWEVER, this browser is out of date.">
+<!ENTITY aboutTor.outOfDateTorOff.label "ALSO, this browser is out of date.">
+<!ENTITY aboutTor.outOfDate2.label "Click on the onion and then choose Download Tor Browser Bundle Update.">
 
-<!ENTITY aboutTor.ready.label "���หาอย�า��ลอ�ภัย">
-<!ENTITY aboutTor.ready2.label "�ุ��ร�อม�ล�วสำหรั��ระส��าร���าร��อ�อิ���อร������ี��ลอ�ภัย">
-<!ENTITY aboutTor.failure.label "�ย��ล�ว มีอะ�ร�า�อย�า��ิ��ลา�">
-<!ENTITY aboutTor.failure2.label "Tor �ำ�า��ั���ราว���อร��ี��ม����">
+<!ENTITY aboutTor.check.label "Test Tor Network Settings">
 
-<!ENTITY aboutTor.search.label "���หา��ย DuckDuckGo">
-<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com";>
+<!ENTITY aboutTor.success.label "Congratulations!">
+<!ENTITY aboutTor.success2.label "This browser is configured to use Tor.">
+<!ENTITY aboutTor.success3.label "You are now free to browse the Internet anonymously.">
+<!ENTITY aboutTor.failure.label "Something Went Wrong!">
+<!ENTITY aboutTor.failure2.label "Tor is not working in this browser.">
+<!ENTITY aboutTor.failure3prefix.label "For assistance, please contact ">
+<!ENTITY aboutTor.failure3Link "help@xxxxxxxxxxxxxxxxx">
+<!ENTITY aboutTor.failure3suffix.label ".">
 
-<!ENTITY aboutTor.torbrowser_user_manual_questions.label "มี�ำ�าม�หม">
-<!ENTITY aboutTor.torbrowser_user_manual_link.label "�ู�ู�มือ�ู�����า� Tor Browser">
-<!-- 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 "�ู�มือ�ู�����า� Tor Browser">
+<!ENTITY aboutTor.search.label "Search">
+<!ENTITY aboutTor.searchSPPost.link "https://startpage.com/do/search";>
+<!ENTITY aboutTor.searchDDGPost.link "https://duckduckgo.com/html/";>
 
-<!ENTITY aboutTor.tor_mission.label "��ร��� Tor �����อ�อ����ร�ม��สว�หา�ล�ำ�ร�ี��ำ�า���ื�อส���สริมสิ��ิม�ุษย���ละ�สรีภา� ��ย�ารสร�า��ละ�ริ�าร������ลยี�ี��รี �����วาม�����ิร�าม�ละ�อ����อร�ส �ละส���สริม�วาม����ส�ว��ัว ��ื�อส�ั�ส�ุ��าร����า��ี��ม���อ��ู��ำ�ั� �ละสร�า��วาม���า����สา�าร�ะ�ห��ว�า��ึ��">
-<!ENTITY aboutTor.getInvolved.label "มาร�วม�ั��รา">
-<!ENTITY aboutTor.getInvolved.link "https://www.torproject.org/getinvolved/volunteer.html.th";>
+<!ENTITY aboutTor.torInfo1.label "Additional Info:">
+<!ENTITY aboutTor.torInfo2.label "Country &amp; IP Address:">
+<!ENTITY aboutTor.torInfo3.label "Exit Node:">
+<!ENTITY aboutTor.torInfo4.label "This server does not log any information about visitors.">
+<!ENTITY aboutTor.whatnextQuestion.label "What Next?">
+<!ENTITY aboutTor.whatnextAnswer.label "Tor is NOT all you need to browse anonymously! You may need to change some of your browsing habits to ensure your identity stays safe.">
+<!ENTITY aboutTor.whatnext.label "Tips On Staying Anonymous »">
+<!ENTITY aboutTor.whatnext.link "https://www.torproject.org/download/download.html.en#warning";>
+<!ENTITY aboutTor.helpInfo1.label "You Can Help!">
+<!ENTITY aboutTor.helpInfo2.label "There are many ways you can help make the Tor Network faster and stronger:">
+<!ENTITY aboutTor.helpInfo3.label "Run a Tor Relay Node »">
+<!ENTITY aboutTor.helpInfo3.link "https://www.torproject.org/docs/tor-doc-relay.html.en";>
+<!ENTITY aboutTor.helpInfo4.label "Volunteer Your Services »">
+<!ENTITY aboutTor.helpInfo4.link "https://www.torproject.org/getinvolved/volunteer.html.en";>
+<!ENTITY aboutTor.helpInfo5.label "Make a Donation »">
+<!ENTITY aboutTor.helpInfo5.link "https://www.torproject.org/donate/donate.html.en";>
 
-<!ENTITY aboutTor.newsletter.tagline "ส���ร���าวสาร��ี�ยว�ั� Tor ��ยั��ล�อ���หมาย�อ��ุ�">
-<!ENTITY aboutTor.newsletter.link_text "สมั�รรั���าวสาร��ี�ยว�ั� Tor">
-<!ENTITY aboutTor.donationBanner.line2e "�ำ�ห� Tor ���ม�����ึ��">
-<!ENTITY aboutTor.donationBanner.buttonA "ร�วม�ริ�า�">
+<!ENTITY aboutTor.footer.label "The Tor Project is a US 501(c)(3) non-profit dedicated to the research, development, and education of online anonymity and privacy.">
+<!ENTITY aboutTor.learnMore.label "Learn more about The Tor Project »">
+<!ENTITY aboutTor.learnMore.link "https://www.torproject.org/about/overview.html.en";>
diff --git a/chrome/locale/th/brand.dtd b/chrome/locale/th/brand.dtd
index a3ef9518..47d33862 100644
--- a/chrome/locale/th/brand.dtd
+++ b/chrome/locale/th/brand.dtd
@@ -2,14 +2,7 @@
    - 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      "Tor Browser">
 <!ENTITY  brandShortName        "Tor Browser">
 <!ENTITY  brandFullName         "Tor Browser">
-<!ENTITY  vendorShortName       "��ร��าร Tor">
-<!ENTITY  trademarkInfo.part1   "'Tor '�ละ' Onion Logo '������รื�อ�หมาย�าร��า���ะ��ีย��อ���ร��าร Tor Project, Inc.">
-
-<!-- The following strings are for bug #10280's UI. We place them here for our translators -->
-<!ENTITY plugins.installed.find "�ลิ���ื�อ�หล��ลั��อิ��ี��ู��ิ��ั��อยู���ระ��">
-<!ENTITY plugins.installed.enable "�ลั��อิ��ี���ิ����">
-<!ENTITY plugins.installed.disable "�ลั��อิ��ี��ิ����">
-<!ENTITY plugins.installed.disable.tip "�ลิ���ื�อ�ั��ม��ห��หล��ลั��อิ��อ�ระ��">
+<!ENTITY  vendorShortName       "Tor Project">
+<!ENTITY  trademarkInfo.part1   "'Tor' and the 'Onion Logo' are registered trademarks of the Tor Project, Inc.">
diff --git a/chrome/locale/th/brand.properties b/chrome/locale/th/brand.properties
index ef2be578..f63def38 100644
--- a/chrome/locale/th/brand.properties
+++ b/chrome/locale/th/brand.properties
@@ -2,15 +2,14 @@
 # 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=Tor Browser
 brandShortName=Tor Browser
 brandFullName=Tor Browser
-vendorShortName=��ร��าร Tor
+vendorShortName=Tor Project
 
-homePageSingleStartMain=Firefox Start ห��า�หย�า�ี��หล�อย�า�รว��ร�ว�ละมี��อ����หา���ัว
-homePageImport=�ำ���าห��า�หย�า�อ��ุ��า� %S
+homePageSingleStartMain=Firefox Start, a fast home page with built-in search
+homePageImport=Import your home page from %S
 
-homePageMigrationPageTitle=�ลือ�ห��า�หย�า
-homePageMigrationDescription=�รุ�า�ลือ�ห��า�หย�า�ี��ุ���อ��าร���:
+homePageMigrationPageTitle=Home Page Selection
+homePageMigrationDescription=Please select the home page you wish to use:
 
-syncBrandShortName=��ื�อม��อมูล
+syncBrandShortName=Sync
diff --git a/chrome/locale/th/browserOnboarding.properties b/chrome/locale/th/browserOnboarding.properties
deleted file mode 100644
index 60df93d6..00000000
--- a/chrome/locale/th/browserOnboarding.properties
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright (c) 2019, The Tor Project, Inc.
-# See LICENSE for licensing information.
-# vim: set sw=2 sts=2 ts=8 et:
-
-onboarding.tour-tor-welcome=ยิ��ี��อ�รั�
-onboarding.tour-tor-welcome.title=�ุ��ร�อม�ล�ว
-onboarding.tour-tor-welcome.description=Tor Browser �ห��ริ�ารมา�ร�า�สู�สุ��รื�อ��วาม����ส�ว��ัว�ละ�วาม�ลอ�ภัย��ะ���า�ม�ว������ ��ะ�ี��ุ����รั��าร�ุ�ม�รอ��า��าร�ิ��าม �าร�รว��รา �ละ�าร�ิ��ั��อิ���อร����� �ุ���รียม�วาม�ร�อม�ะ�อ��ุ�ว�า Tor Browser�ำ�า�อย�า��ร
-onboarding.tour-tor-welcome.next-button=���ี��วาม����ส�ว��ัว
-
-onboarding.tour-tor-privacy=�วาม����ส�ว��ัว
-onboarding.tour-tor-privacy.title=Snub trackers �ละ snoopers
-onboarding.tour-tor-privacy.description=Tor Browser �ย��ุ���ี��ละล��ระวั�ิ�าร�����ราว���อร�หลั�����ส�ั�� �าร������ะ�ำ�ห������ว�า�วาม����ส�ว��ัว�ละ�วาม�ลอ�ภัย�อ��ุ����รั��าร�ุ�ม�รอ�����ราว���อร� �ลิ� 'Tor Network' ��ื�อ�รีย�รู�ว�า�รา�ุ�ม�รอ��ุ���ระ�ั�สู��ว�า�ี�อย�า��ร
-onboarding.tour-tor-privacy.button=���ี���รือ��าย Tor
-
-onboarding.tour-tor-network=��รือ��าย Tor
-onboarding.tour-tor-network.title=�ำ�า���ื�อ�ระ�าย��รือ��าย
-onboarding.tour-tor-network.description=Tor Browser ��ื�อม��อ�ุ����า�ั���รือ��าย Tor �ี��ำ�า���ยอาสาสมั�ร�ว�า�ั����ั�ว�ล� Tor Browser ��า��า� VPN ��ราะ�ม�มี��รสามาร�ระ�ุ�วาม�ิ��ลา�หรือห��วย�า��ลา���� �ุ���อ��ว�วา�����ื�อ�วาม��ลิ���ลิ����าร���อิ���อร�����อย�า�����ส�ว��ัว
-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=สำหรั��ุ�����ม��ี��ุ��ยี�ยม�ม �ริมา��าร����า��อ��ุ��ู�รี�ลย����ารหัสลั���ว��รระหว�า�Tor รี�ลย�3�ห���ั�ว�ล� �ม�มี�ว����������ี�สามาร�รู����ว�า�ุ���ื�อม��อ�า��ี��ห� �ุ�สามาร�ส���ำร�อ�สร�า�ว��ร�หม�������ลิ� ว��ร Tor �หม�สำหรั������ี���ว��รห��า�อ
-onboarding.tour-tor-circuit-display.button=�ู�า��อ��ั�
-onboarding.tour-tor-circuit-display.next-button=���ี��วาม�ลอ�ภัย
-
-onboarding.tour-tor-security=�วาม�ลอ�ภัย
-onboarding.tour-tor-security.title=�ลือ��ระส��าร���อ��ุ�
-onboarding.tour-tor-security.description=�รา�ห��ริ�าร�าร�ั����า��ิ�ม��ิมสำหรั��ุ� ���าร��ิ�ม�วาม�ลอ�ภัย�ห���ราว���อร��อ��ุ� �าร�ั����า�วาม�ลอ�ภัย�ะ�ำ�ห��ุ�สามาร��ิ��ั��อ����ระ�อ��ี�อา���ม�ี�อม�ิว��อร��อ��ุ���� �ลิ���า�ล�า���ื�อ�ูว�า�ัว�ลือ���า���ำอะ�ร�����า�
-onboarding.tour-tor-security.description-suffix=หมาย�ห�ุ ��ย�าร�ั����า�ริ�ม����ล�ว NoScript �ละ HTTPS ���ุ��ี��ม�����ู�รวม���า�������รื�อ�มือ ����ุ�สามาร��ำห���อ���ื�อ��ิ�ม�������รื�อ�มือ���
-onboarding.tour-tor-security-level.button=�ูระ�ั��วาม�ลอ�ภัย
-onboarding.tour-tor-security-level.next-button=��ยั���ล��ลั��ระส��าร��
-
-onboarding.tour-tor-expect-differences=��ล��ลั��ระส��าร��
-onboarding.tour-tor-expect-differences.title=�า�หวั��า�อย�า��ี������า�
-onboarding.tour-tor-expect-differences.description=�ี��อร���า��วาม�ลอ�ภัย�ละ�วาม����ส�ว��ัว��า���ี��ห��ริ�าร��ย Tor �ระส��าร���อ��ุ���ะ�รีย��ูอิ���อร�����อา������า�ออ�����า� อา���าล� �ึ��อยู��ั�ระ�ั��วาม�ลอ�ภัย อ����ระ�อ��า�อย�า�อา��ม��หล�หรือ�ม��ำ�า� อา�มี�ำ�าม��ื�อ�ิสู���ว�า�ุ��ือม�ุษย��ละ�ม����หุ��ย���
-onboarding.tour-tor-expect-differences.button=�ู�ำ�าม�ี�����อย
-onboarding.tour-tor-expect-differences.next-button=��ยั� �ริ�ารOnion 
-
-onboarding.tour-tor-onion-services=�ริ�าร Onion
-onboarding.tour-tor-onion-services.title=�าร��อ��ั��ี��ิ�ศษ
-onboarding.tour-tor-onion-services.description=�ริ�าร Onion �ือ�����ี�ล���าย��วย.onion �ี��ห��ริ�าร�าร�ุ�ม�รอ��ิ�ศษ�ห��ั��ู���ย��ร�หรือ�ู����า�ม รวม���ึ���ิ�ม�วาม�ุ�ม�รอ��า��าร�ิ��ั��อิ���อร����� �ริ�าร Onion อ�ุ�า�ิ�ุ���สามาร��ั�หา��ื�อหา�ละ�ริ�ารอย�า��ิร�าม �ลิ���า�ล�า���ื�อ�มDuckDuckGo ���� onion
-onboarding.tour-tor-onion-services.button=�ยียม�ม Onion
-onboarding.tour-tor-onion-services.next-button=�สร��สิ��
-
-onboarding.overlay-icon-tooltip-updated2=�ูว�ามีอะ�ร�หม�\n�� %S
-onboarding.tour-tor-update.prefix-new=สร�า��หม�
-onboarding.tour-tor-update.prefix-updated=อั����
-
-onboarding.tour-tor-toolbar=�����รื�อ�มือ
-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=���ี���รือ��าย Tor
-
-# Circuit Display onboarding.
-onboarding.tor-circuit-display.next=��อ��
-onboarding.tor-circuit-display.done=�สร��สิ��
-onboarding.tor-circuit-display.one-of-three=1 �� 3
-onboarding.tor-circuit-display.two-of-three=2 �� 3
-onboarding.tor-circuit-display.three-of-three=3 �� 3
-
-onboarding.tor-circuit-display.intro.title=ว��ร�ำ�า�อย�า��ร
-onboarding.tor-circuit-display.intro.msg=ว��ร�ระ�อ���วยรี�ลย����สุ�ม�ึ���อม�ิว��อร��ั�ว�ล��ำห����า�ว���ื�อส����อ�ารรั�ส����อมูล Tor ว��ร��วย�ห��ุ�สามาร��รีย��ู����ละ��ื�อม��อ�ั��ริ�าร Onion ���อย�า�ส�ว��ัว
-
-onboarding.tor-circuit-display.diagram.title=ว��รห��า�อ
-onboarding.tor-circuit-display.diagram.msg=���ภา��ี��ส��รี�ลย��ี��ระ�อ�����ว��รสำหรั��ว�������ี� ��ื�อ��อ��ั��าร��ื�อม�ย��ิ��รรม��าม������า� � ���ละ�ว�������ะมีว��ร�ี������า��ั�
-
-onboarding.tor-circuit-display.new-circuit.title=�ุ���อ��ารว��ร�หม�หรือ�ม�
-onboarding.tor-circuit-display.new-circuit.msg=หา��ุ��ม�สามาร���ื�อม��อ�ั��ว�������ี��ุ��ยายาม���า�มหรือมี�ั�หา���าร�หล� �ุ�สามาร�����ุ�ม�ี���ื�อ�หล������หม���วยว��ร�หม�
diff --git a/chrome/locale/th/torbutton.dtd b/chrome/locale/th/torbutton.dtd
index 1e16c404..e0da4be2 100644
--- a/chrome/locale/th/torbutton.dtd
+++ b/chrome/locale/th/torbutton.dtd
@@ -1,52 +1,19 @@
 <!ENTITY torbutton.context_menu.new_identity "สร�า��ัว���หม�">
 <!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 "�ั����า��รือ��าย Tor">
-<!ENTITY torbutton.context_menu.networksettings.key "N">
-<!ENTITY torbutton.context_menu.downloadUpdate "�รว�สอ�ส�า�ะ�าร�รั�รุ�� Tor Browser">
-<!ENTITY torbutton.context_menu.downloadUpdate.key "U">
-<!ENTITY torbutton.context_menu.cookieProtections "�าร��อ��ั��ุ��ี�">
+<!ENTITY torbutton.context_menu.networksettings "Open Network Settingsâ?¦">
+<!ENTITY torbutton.context_menu.downloadUpdate "Download Tor Browser Bundle Update...">
+<!ENTITY torbutton.context_menu.downloadUpdate.key "A">
+<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
 <!ENTITY torbutton.context_menu.cookieProtections.key "C">
-<!ENTITY torbutton.button.tooltip "�ลิ���ื�อ�ริ�ม��� Torbutton">
-<!ENTITY torbutton.prefs.security_settings "�ั����า�วาม�ลอ�ภัย Tor Browser">
-<!ENTITY torbutton.cookiedialog.title "�ั��าร��อ��ั� Cookie">
-<!ENTITY torbutton.cookiedialog.lockCol "�ู���อ��ั�อยู�">
-<!ENTITY torbutton.cookiedialog.domainCol "�ฮส��">
-<!ENTITY torbutton.cookiedialog.nameCol "�ื�อ">
-<!ENTITY torbutton.cookiedialog.pathCol "�ส���า�">
-<!ENTITY torbutton.cookiedialog.protectCookie "�าร��อ��ั��ุ��ี�">
-<!ENTITY torbutton.cookiedialog.removeCookie "�ำ�ุ��ี�ออ�">
-<!ENTITY torbutton.cookiedialog.unprotectCookie "�ุ��ี��ี��ม��ู���อ��ั�">
-<!ENTITY torbutton.cookiedialog.removeAllBut "ล��ั��หม������อ��ั��อา�ว�">
-<!ENTITY torbutton.cookiedialog.saveAllCookies "��อ��ั��ุ��ี��หม�">
-<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "�ม���อ���อ��ั��ุ��ี��หม�">
-<!ENTITY torbutton.prefs.sec_caption "ระ�ั��วาม�ลอ�ภัย">
-<!ENTITY torbutton.prefs.sec_caption_tooltip "ส�ล��อร�สำหรั��วาม�ลอ�ภัย�ำ�ห��ุ��ิ��ุ�สม�ั�ิ�า�ส�ว��อ���ราว���อร��ี��ำ�ห��ราว��อร��อ��ุ��สี�ย���อ�วาม�ยายาม�ี��ะ�ฮ��">
-<!ENTITY torbutton.prefs.sec_standard_label "มา�ร�า�">
-<!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 "�าร�ั����า�ี��ลอ�ภัย�ว�า">
-<!ENTITY torbutton.prefs.sec_safest_label "�ลอ�ภัย�ี�สุ�">
-<!ENTITY torbutton.prefs.sec_safest_description "อ�ุ�า��ห���ิ��ุ�สม�ั�ิ�ว���������า�ี��ำ����สำหรั��ำ�ห��ว�������ส�ียร�ละ�ำ�า��ื���า���� �วาม��ลี�ย���ล��หล�า�ี��ะมี�ล��อรู�ภา� ��อมูล �ละส�ริ���">
-<!ENTITY torbutton.prefs.sec_safest_list_label "�าร�ั����า�ี��ลอ�ภัย�ี�สุ�">
-<!ENTITY torbutton.prefs.sec_learn_more_label "�รีย�รู���ิ�ม��ิม">
-<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript �ู��ิ��������ี��ม���� HTTPS">
-<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript �ู�ระ�ั���ย�ริยายสำหรั��ุ�����">
-<!ENTITY torbutton.prefs.sec_limit_typography "���อั�ษร�ละสั�ลั�ษ���า���ิ�ศาส�ร��า�อย�า��ู��ิ�����า�">
-<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "���อั�ษร �อ�อ� สั�ลั�ษ���า���ิ�ศาส�ร� �ละรู�ภา��า�อย�า��ู��ิ�����า� ">
-<!ENTITY torbutton.prefs.sec_click_to_play_media "�ลิ���ื�อ�ล���สีย��ละวิ�ี�อ (HTML 5 มี��ีย) �ละ WebGL ">
-<!ENTITY torbutton.prefs.sec_custom_warning "�ำห���อ�">
-<!ENTITY torbutton.prefs.sec_overview "�ิ�����า��ุ�ลั�ษ�ะ�า�อย�า��อ� �ว�� �ี�สามาร������ื�อ �าร��ม�ี �วาม�ลอ�ภัย �ละ �วาม�����ิร�าม">
-<!ENTITY torbutton.prefs.sec_standard_tooltip "ระ�ั��วาม�ลอ�ภัย มา�ร�า�">
-<!ENTITY torbutton.prefs.sec_safer_tooltip "ระ�ั� �วาม�ลอ�ภัย : �ลอ�ภัยยิ���ึ��">
-<!ENTITY torbutton.prefs.sec_safest_tooltip "ระ�ั� �วาม�ลอ�ภัย : �ลอ�ภัย�ี�สุ�">
-<!ENTITY torbutton.prefs.sec_custom_summary "�าร�ั����า��ราว���อร��ี��ำห���อ��อ��ุ�ส���ล�ห���ิ��าร�ั����า�ี��ม��วาม�ลอ�ภัย ��ื�อ�ห�ุ�ล��า��วาม�ลอ�ภัย�ละ�วาม����ส�ว��ัว�รา �อ��ะ�ำ�ห��ุ��ลือ�ห�ึ����ระ�ั��วาม�ลอ�ภัย��า�ริ�ม���">
-<!ENTITY torbutton.prefs.sec_restore_defaults "�ลั�สู���ามา�ร�า�">
-<!ENTITY torbutton.prefs.sec_advanced_security_settings "�าร�ั����า�วาม�ลอ�ภัย�ั��สู�">
-<!ENTITY torbutton.circuit_display.title "�าร��ื�อ��ย� Tor ">
-<!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.button.tooltip "Click to initialize Torbutton">
+<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
+<!ENTITY torbutton.cookiedialog.lockCol "Protected">
+<!ENTITY torbutton.cookiedialog.domainCol "Host">
+<!ENTITY torbutton.cookiedialog.nameCol "Name">
+<!ENTITY torbutton.cookiedialog.pathCol "Path">
+<!ENTITY torbutton.cookiedialog.protectCookie "Protect Cookie">
+<!ENTITY torbutton.cookiedialog.removeCookie "Remove Cookie">
+<!ENTITY torbutton.cookiedialog.unprotectCookie "Unprotect Cookie">
+<!ENTITY torbutton.cookiedialog.removeAllBut "Remove All But Protected">
+<!ENTITY torbutton.cookiedialog.saveAllCookies "Protect New Cookies">
+<!ENTITY torbutton.cookiedialog.doNotSaveAllCookies "Do Not Protect New Cookies">
diff --git a/chrome/locale/th/torbutton.properties b/chrome/locale/th/torbutton.properties
index 44d26298..cea42065 100644
--- a/chrome/locale/th/torbutton.properties
+++ b/chrome/locale/th/torbutton.properties
@@ -1,70 +1,27 @@
-torbutton.circuit_display.internet = อิ���อร�����
-torbutton.circuit_display.ip_unknown = หมาย�ล� IP �ี��ม�รู��ั�
-torbutton.circuit_display.onion_site = ���� Onion
-torbutton.circuit_display.this_browser = ��ราว���อร��ี�
-torbutton.circuit_display.relay = รี�ลย�
-torbutton.circuit_display.tor_bridge = สะ�า�
-torbutton.circuit_display.unknown_country = �ม��รา��ระ��ศ
-torbutton.circuit_display.guard = �าร��
-torbutton.circuit_display.guard_note = [�าร��] �ห���อ��ุ�อา��ม���ลี�ย���ล�
-torbutton.circuit_display.learn_more = �รีย�รู���ิ�ม��ิม
-torbutton.content_sizer.margin_tooltip = Tor Browser ��ิ�มระยะ�อ��ี���ื�อ�ำ�ห��วาม�ว�า��ละ�วามสู��อ�ห��า��า��ุ����������อยล� �ละล��วามสามาร��อ��ุ��ลอื�����าร�ิ��าม�ุ��า�ออ��ล��
-torbutton.panel.tooltip.disabled = �ลิ���ื�อ��ิ���� Tor
-torbutton.panel.tooltip.enabled = �ลิ���ื�อ�ิ� Tor
-torbutton.panel.label.disabled = �ิ���� Tor อยู�
-torbutton.panel.label.enabled = ��ิ���� Tor อยู�
-extensions.torbutton@xxxxxxxxxxxxxx.description = Torbutton มี�ุ�ม�ห��รั������าร�ั����า Tor �ละล�า���อมูล�าร�ู�ว��ส�ว��ุ��ลอย�า�รว��ร�ว�ละ��าย�าย
-torbutton.popup.external.title = �าว���หล���ล�ภาย�อ�
-torbutton.popup.external.app = Tor Browser �ม�สามาร��ส����ล��ี� �ุ���อ���ิ�มั�����ร��รมอื��\n\n
-torbutton.popup.external.note = ��ล��า���ิ�อา��ำ�ห���ร��รม��ื�อม��อ�ั�อิ���อร�������ย�ม���า� Tor\n\n
-torbutton.popup.external.suggest = ��ื�อ�วาม�ลอ�ภัย �ุ��วร��ิ���ล���ะออ��ล��หรือ��� Tor Live CD ���� Tails\n
-torbutton.popup.launch = �าว���หล���ล�
+torbutton.panel.tooltip.disabled = Click to enable Tor
+torbutton.panel.tooltip.enabled = Click to disable Tor
+torbutton.panel.label.disabled = Tor Disabled
+torbutton.panel.label.enabled = Tor Enabled
+extensions.torbutton@xxxxxxxxxxxxxx.description = Torbutton provides a button to configure Tor settings and quickly and easily clear private browsing data.
+torbutton.popup.external.title = Load external content?
+torbutton.popup.external.app = An external application is needed to handle:\n\n
+torbutton.popup.external.note = \n\nNOTE: External applications are NOT Tor safe by default and can unmask you!\n
+torbutton.popup.external.suggest = \nIf this file is untrusted, you should either save it to view while offline or in a VM,\nor consider using a transparent Tor proxy like Tails LiveCD or torsocks.\n
+torbutton.popup.launch = Launch application
 torbutton.popup.cancel = ย��ลิ�
-torbutton.popup.dontask = �าว���หล����ม��ยอั���มั�ิ�ั������ั��ี����������
-torbutton.popup.no_newnym = Torbutton �ม�สามาร��ห�อั�ลั�ษ���หม��ั��ุ����อย�า��ลอ�ภัย มั��ม�สามาร����า�ึ� Tor Control Port ���\n\n�ุ��ำลั���ิ��ห� Tor Browser Bundle �ำ�า�อยู�หรือ�ม�?
-torbutton.security_settings.menu.title = �ั����า�วาม�ลอ�ภัย
-torbutton.title.prompt_torbrowser = ��อมูล Torbutton �ี�สำ�ั�
-torbutton.popup.prompt_torbrowser = Torbutton à¸?ำà¸?าà¸?à¸?à¹?าà¸?à¸?ัà¸?à¹?à¸?à¸?à¸?ะà¸?ีà¹? à¸?ุà¸?à¹?มà¹?สามารà¸?à¸?ิà¸?มัà¸?à¹?à¸?à¹?à¸?à¹?อà¹?à¸?\n\nà¹?ราà¸?ำà¸?ารà¹?à¸?ลีà¹?ยà¸?à¹?à¸?ลà¸?à¸?ีà¹?à¹?à¸?ราะมัà¸?à¹?มà¹?à¸?ลอà¸?ภัยà¸?ีà¹?à¸?ะà¹?à¸?à¹? Torbutton à¹?à¸?à¹?à¸?ราวà¹?à¹?à¸?อรà¹?à¸?ีà¹?à¹?มà¹?à¹?à¸?à¹?à¹?à¸?ิà¸?à¹?à¸?à¹? Tor browser à¹?à¸?à¸?à¹?วลาà¹?à¸?ียวà¸?ัà¸? มีà¸?ุà¸?à¸?à¸?à¸?รà¹?อà¸?หลายà¸?ุà¸?à¸?ีà¹?à¹?ราà¹?มà¹?สามารà¸?à¹?à¸?à¹?à¹?à¸?à¹?à¸?à¹?à¹?à¸?ยวิà¸?ีอืà¹?à¸?\n\nà¸?à¹?าà¸?ุà¸?à¸?à¹?อà¸?à¸?ารà¹?à¸?à¹? Firefox à¹?à¸?à¹?à¸?ามà¸?à¸?à¸?ิ à¸?ุà¸?à¸?à¹?อà¸?ยà¸?à¹?ลิà¸?à¸?ารà¸?ิà¸?à¸?ัà¹?à¸? Torbutton à¹?ละà¸?าวà¸?à¹?à¹?หลà¸?à¸?ุà¸?à¸?ยายรวมà¸?อà¸? Tor Browser à¸?ึà¹?à¸?à¸?ุà¸?สมà¸?ัà¸?ิà¸?วามà¹?à¸?à¹?à¸?สà¹?วà¸?à¸?ัวà¸?à
 ¸­à¸? Tor Browser à¹?หà¸?ือà¸?วà¹?าà¸?ุà¸?สมà¸?ัà¸?ิà¸?อà¸? Firefox à¸?à¸?à¸?ิ à¹?มà¹? Firefox à¸?ูà¸?à¸?ะà¹?à¸?à¹?à¸?à¹?วย Torbutton\n\nหาà¸?à¸?à¹?อà¸?à¸?ารลà¸? Torbutton à¹?à¸?à¸?ีà¹? à¹?à¸?รืà¹?อà¸?มือ->Addons->Extensions à¹?ละà¸?ลิà¸?à¸?ุà¹?มลà¸?ออà¸?à¸?ีà¹?อยูà¹?à¸?à¹?าà¸? Torbutton.
-torbutton.popup.short_torbrowser = ��อมูลสำ�ั��า� Torbutton\n\n�อ��ี� Torbutton �ู���ิ�����ลอ��วลา\n\n�ลิ��ี� Torbutton ��ื�อ�ู��อมูล��ิ�ม��ิม
+torbutton.popup.dontask = Always launch applications from now on
+torbutton.popup.prompted_language = To give you more privacy, Torbutton can request the English language version of web pages. This may cause web pages that you prefer to read in your native language to display in English instead.\n\nWould you like to request English language web pages for better privacy?
+torbutton.popup.no_newnym = Torbutton cannot safely give you a new identity. It does not have access to the Tor Control Port.\n\nAre you running Tor Browser Bundle?
+torbutton.title.prompt_torbrowser = Important Torbutton Information
+torbutton.popup.prompt_torbrowser = Torbutton works differently now: you can't turn it off any more.\n\nWe made this change because it isn't safe to use Torbutton in a browser that's also used for non-Tor browsing. There were too many bugs there that we couldn't fix any other way.\n\nIf you want to keep using Firefox normally, you should uninstall Torbutton and download Tor Browser Bundle. The privacy properties of Tor Browser are also superior to those of normal Firefox, even when Firefox is used with Torbutton.\n\nTo remove Torbutton, go to Tools->Addons->Extensions and then click the Remove button next to Torbutton.
+torbutton.popup.short_torbrowser = Important Torbutton Information!\n\nTorbutton is now always enabled.\n\nClick on the Torbutton for more information.
 
-torbutton.popup.confirm_plugins = �ลั��อิ�อย�า� Flash สามาร��ำ�ห��วาม����ส�ว��ัว�ละ�วาม�����ิร�าม�อ��ุ��สีย��\n\n�ว�มั�สามาร��ั���า���าม Tor �� �ละ��ิ���ย�ำ�ห����ี��ั���ละหมาย�ล� IP �อ��ุ�\n\n�ุ�������หมว�า��อ��าร�ะ��ิ�����ลั��อิ�?\n\n
-torbutton.popup.never_ask_again = �ม���อ��าม�ั�อี�
-torbutton.popup.confirm_newnym = Tor Browser �ะ�ิ�ห��า��า��ละ�����ั��หม� ��ส�ั��อ��ว�������ั��หม��ะสู�หาย\n\n�ริ�ม����า� Tor Browser �หม��อ��ี���ื�อรี�����อมูล�ระ�ำ�ัว
-
-torbutton.maximize_warning = �าร�ยาย Tor Browser อ�ุ�า��ห��ว������สามาร�ระ�ุ��า�ห��า�อ�อ��ุ� �ึ��อา��ู�������าร�ิ��าม�ุ� �รา��ะ�ำ�ห��ุ����ห��า��า� Tor Browser ��า��าม��า�ริ�ม��� 
+torbutton.popup.confirm_plugins = Plugins such as Flash can harm your privacy and anonymity.\n\nThey can also bypass Tor to reveal your current location and IP address.\n\nAre you sure you want to enable plugins?\n\n
+torbutton.popup.never_ask_again = Never ask me again
 
 # Canvas permission prompt. Strings are kept here for ease of translation.
-canvas.siteprompt=�ว�������ี� (%S) �ยายามส�ั� ��อมูลรู�ภา��ื���ี��ำ�า� HTML5 �ึ��อา��ู����ระ�ุ�อม�ิว��อร��อ��ุ���ย���าะ\n\n�วร�ห� Tor Browser อ�ุ�า��ว�������ี�ส�ั���อมูลรู�ภา��ื���ี��ำ�า� HTML5 หรือ�ม�
-canvas.notNow=�ม�����อ��ี�
-canvas.notNowAccessKey=N
-canvas.allow=อ�ุ�า���อ�า��
+canvas.siteprompt=This website (%S) attempted to access image data on a canvas. Since canvas image data can be used to discover information about your computer, blank image data was returned this time.
+canvas.allow=Allow in the Future
 canvas.allowAccessKey=A
-canvas.never=�ม��ลยสำหรั��ว�������ี� (��ะ�ำ)
+canvas.never=Never for This Site
 canvas.neverAccessKey=e
-
-# Profile/startup error messages. Strings are kept here for ease of translation.
-# LOCALIZATION NOTE: %S is the application name.
-profileProblemTitle=�ั�หา��ร��ล� %S
-profileReadOnly=�ุ��ม�สามาร��รีย���� %S �า�ระ����ล����อ�า����า�ั�� �รุ�า�ั�ลอ� %S ��ยั��ี��ั��อื����อ�ลอ����มั�
-profileReadOnlyMac=�ุ��ม�สามาร��รีย���� %S �า�ระ����ล����อ�า����า�ั�� �รุ�า�ั�ลอ� %S ��ยั���ส����อ�หรือ�อ��ลิ���ั���อ�ลอ����มั�
-profileAccessDenied=%S �ม����รั�อ�ุ�า��ห����า�ึ���ร��ล� �รุ�า������ารอ�ุ�า�ระ����ล��อ��ุ��ละลอ��หม�อี��รั��
-profileMigrationFailed=�ารย�าย��ร��ล� %S �ี�มีอยู��ล�ว�อ��ุ�ล�ม�หลว\n�าร�ั����า�หม��ะ�ู����
-
-# "Downloading update" string for the hamburger menu (see #28885).
-# This string is kept here for ease of translation.
-# LOCALIZATION NOTE: %S is the application name.
-updateDownloadingPanelUILabel=�ำลั��าว���หล�อั���� %S
-
-# .Onion Page Info prompt.  Strings are kept here for ease of translation.
-pageInfo_OnionEncryptionWithBitsAndProtocol=�าร��ื�อม��อ���ารหัสลั� (Onion Service, %1$S, %2$S bit keys, %3$S)
-pageInfo_OnionEncryption=�าร��ื�อม��อ���ารหัสลั� (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=�สร��สิ��
-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
diff --git a/chrome/locale/tr/torbutton.properties b/chrome/locale/tr/torbutton.properties
index 3ca2519d..1d643491 100644
--- a/chrome/locale/tr/torbutton.properties
+++ b/chrome/locale/tr/torbutton.properties
@@ -24,7 +24,7 @@ torbutton.popup.dontask = Bundan sonra dosyalar otomatik indirilsin
 torbutton.popup.no_newnym = Torbutton size yeni bir güvenli kimlik saÄ?layamadı. Tor Denetim Kapısına giriÅ? yapılamıyor.\n\nTor Browser Bundle uygulamasını çalıÅ?tırdıÄ?ınızdan emin olun.
 torbutton.security_settings.menu.title = Güvenlik Düzeyi Ayarı
 torbutton.title.prompt_torbrowser = Ã?nemli Torbutton Bilgisi
-torbutton.popup.prompt_torbrowser = Torbutton Å?imdi farklı çalıÅ?ıyor: artık kapatamıyorsunuz.\n\nBu deÄ?iÅ?ikliÄ?i yapmamızın nedeni Tor dıÅ?ında kullanılan baÅ?ka bir tarayıcıda Torbutton kullanmanın güvenli olmaması. BaÅ?ka türlü çözemeyeceÄ?imiz birçok sorun vardı.\n\nFirefox tarayıcısını normal olarak kullanmak istiyorsanız, Torbutton uygulamasını kaldırıp Tor Browser Bundle paketini indirebilirsiniz. Tor Browser kiÅ?isel gizliliÄ?i koruma özellikleri normal Firefox tarayıcısına, hatta Torbutton ile kullanılan Firefox ikilisine göre çok daha üstündür.\n\nTorbutton uygulamasını kaldırmak için, Araçlar->Eklentiler->Uzantılar bölümüne gidin ve Torbutton uygulamasının yanındaki Kaldır düÄ?mesine tıklayın.
+torbutton.popup.prompt_torbrowser = Torbutton Å?imdi farklı çalıÅ?ıyor: artık kapatamıyorsunuz.\n\nBu deÄ?iÅ?ikliÄ?i yapmamızın nedeni Tor dıÅ?ında kullanılan baÅ?ka bir tarayıcıda Torbutton kullanmanın güvenli olmaması. BaÅ?ka türlü çözemeyeceÄ?imiz birçok sorun vardı.\n\nFirefox tarayıcısını normal olarak kullanmak istiyorsanız, Torbutton uygulamasını kaldırıp Tor Browser Bundle paketini indirebilirsiniz. Tor Browser kiÅ?isel gizliliÄ?i koruma özellikleri normal Firefox tarayıcısına, hatta Torbutton ile kullanılan Firefox ikilisine göre çok daha üstündür.\n\nTorbutton uygulamasını kaldırmak için, Araçlar->Eklentiler->Uzantılar bölümüne gidin ve Torbutton yazılımının yanındaki Kaldır düÄ?mesine tıklayın.
 torbutton.popup.short_torbrowser = Ã?nemli Torbutton Bilgisi!\n\nTorbutton artık kapatılamayacak Å?ekilde etkinleÅ?tirildi.\n\nAyrıntılı bilgi almak için Torbutton üzerine tıklayın.
 
 torbutton.popup.confirm_plugins = Flash gibi eklentiler gizliliÄ?inizi ve anonim kimliÄ?inizi zedeleyebilir.\n\nBu eklentiler Tor uygulamasını atlatarak geçerli konum ve IP adresinizi ortaya çıkarabilir.\n\nBu eklentileri etkinleÅ?tirmek istediÄ?inize emin misiniz?\n
diff --git a/components/cookie-jar-selector.js b/components/cookie-jar-selector.js
new file mode 100644
index 00000000..79a66e8a
--- /dev/null
+++ b/components/cookie-jar-selector.js
@@ -0,0 +1,460 @@
+// 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@xxxxxxxxxxxxxxxxx>
+ *
+ *************************************************************************/
+
+// 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/domain-isolator.js b/components/domain-isolator.js
index 3ed6e58f..f6a6d598 100644
--- a/components/domain-isolator.js
+++ b/components/domain-isolator.js
@@ -15,6 +15,9 @@ 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 f48d1b38..9d6f74c8 100644
--- a/components/dragDropFilter.js
+++ b/components/dragDropFilter.js
@@ -6,6 +6,8 @@
  *************************************************************************/
 
 
+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/external-app-blocker.js b/components/external-app-blocker.js
index 9d5cbd79..afd5c002 100644
--- a/components/external-app-blocker.js
+++ b/components/external-app-blocker.js
@@ -16,8 +16,6 @@ const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm
 const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
 const { PromptUtils } = ChromeUtils.import("resource://gre/modules/SharedPromptUtils.jsm");
 
-let { torbutton_get_property_string } = ChromeUtils.import("resource://torbutton/modules/utils.js", {});
-
 // Module specific constants
 const kMODULE_NAME = "Torbutton External App Handler";
 const kCONTRACT_ID = "@torproject.org/torbutton-extAppBlocker;1";
@@ -84,13 +82,13 @@ ExternalAppBlocker.prototype =
       parentWin = Services.wm.getMostRecentWindow("navigator:browser");
     }
 
-    let title = torbutton_get_property_string("torbutton.popup.external.title");
-    let app = torbutton_get_property_string("torbutton.popup.external.app");
-    let note = torbutton_get_property_string("torbutton.popup.external.note");
-    let suggest = torbutton_get_property_string("torbutton.popup.external.suggest");
-    let launch = torbutton_get_property_string("torbutton.popup.launch");
-    let cancel = torbutton_get_property_string("torbutton.popup.cancel");
-    let dontask = torbutton_get_property_string("torbutton.popup.dontask");
+    let title = parentWin.torbutton_get_property_string("torbutton.popup.external.title");
+    let app = parentWin.torbutton_get_property_string("torbutton.popup.external.app");
+    let note = parentWin.torbutton_get_property_string("torbutton.popup.external.note");
+    let suggest = parentWin.torbutton_get_property_string("torbutton.popup.external.suggest");
+    let launch = parentWin.torbutton_get_property_string("torbutton.popup.launch");
+    let cancel = parentWin.torbutton_get_property_string("torbutton.popup.cancel");
+    let dontask = parentWin.torbutton_get_property_string("torbutton.popup.dontask");
 
     let args = {
       promptType:       "confirmEx",
diff --git a/components/startup-observer.js b/components/startup-observer.js
index d2d1d610..bf2f0f48 100644
--- a/components/startup-observer.js
+++ b/components/startup-observer.js
@@ -21,6 +21,7 @@ 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
@@ -28,22 +29,6 @@ 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;
@@ -77,8 +62,6 @@ 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/components/torbutton-logger.js b/components/torbutton-logger.js
index 1c946fa7..52fdfc23 100644
--- a/components/torbutton-logger.js
+++ b/components/torbutton-logger.js
@@ -13,6 +13,8 @@ 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
new file mode 100644
index 00000000..acea0a3d
--- /dev/null
+++ b/defaults/preferences/preferences.js
@@ -0,0 +1,58 @@
+// 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@xxxxxxxxxxxxxx.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.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);
+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@xxxxxxxxxxxxxx.getAddons.cache.enabled", false);
+
+// Security Slider
+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);
+
+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/import-translations.sh b/import-translations.sh
index 06060a3c..b4c22295 100755
--- a/import-translations.sh
+++ b/import-translations.sh
@@ -2,7 +2,7 @@
 
 # This var comes from the TBB locale list.
 # XXX: Find some way to keep this, tor-launcher, and Tor Browser in sync
-BUNDLE_LOCALES="ar ca cs da de el es-AR es-ES fa fr ga-IE he hu id is it ja ka ko lt nb-NO mk ms nl pl pt-BR ro ru sv-SE th tr vi zh-CN zh-TW"
+BUNDLE_LOCALES="ar ca cs da de el es-AR es-ES fa fr ga-IE he hu id is it ja ka ko nb-NO mk nl pl pt-BR ro ru sv-SE tr vi zh-CN zh-TW"
 
 # XXX: Basque (eu) by request in #10687.
 # This is not used for official builds, but should remain so Basque XPIs can be
diff --git a/jar.mn b/jar.mn
index 45c8c9b8..6697b543 100644
--- a/jar.mn
+++ b/jar.mn
@@ -6,6 +6,7 @@ torbutton.jar:
 
  content/       (chrome/content/*)
  components/    (components/*)
+ defaults/      (defaults/*)
  modules/       (modules/*)
  skin/          (chrome/skin/*)
 
@@ -59,12 +60,8 @@ torbutton.jar:
  locale/ka/ (chrome/locale/ka/*)
 % locale torbutton ko %locale/ko/
  locale/ko/ (chrome/locale/ko/*)
-% locale torbutton lt %locale/lt/
- locale/lt/ (chrome/locale/lt/*)
 % locale torbutton mk %locale/mk/
  locale/mk/ (chrome/locale/mk/*)
-% locale torbutton ms %locale/ms/
- locale/ms/ (chrome/locale/ms/*)
 % locale torbutton nb-NO %locale/nb-NO/
  locale/nb-NO/ (chrome/locale/nb-NO/*)
 % locale torbutton nl %locale/nl/
@@ -79,8 +76,6 @@ torbutton.jar:
  locale/ru/ (chrome/locale/ru/*)
 % locale torbutton sv-SE %locale/sv-SE/
  locale/sv-SE/ (chrome/locale/sv-SE/*)
-% locale torbutton th %locale/th/
- locale/th/ (chrome/locale/th/*)
 % locale torbutton tr %locale/tr/
  locale/tr/ (chrome/locale/tr/*)
 % locale torbutton vi %locale/vi/
@@ -102,6 +97,9 @@ 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}
 
@@ -111,6 +109,8 @@ 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
diff --git a/modules/default-prefs.js b/modules/default-prefs.js
new file mode 100644
index 00000000..5ea549f4
--- /dev/null
+++ b/modules/default-prefs.js
@@ -0,0 +1,36 @@
+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/modules/security-prefs.js b/modules/security-prefs.js
index 7fb2e0c4..f61f24aa 100644
--- a/modules/security-prefs.js
+++ b/modules/security-prefs.js
@@ -33,7 +33,6 @@ const kSecuritySettings = {
   "gfx.font_rendering.opentype_svg.enabled" : [,  false, false, false, true ],
   "svg.disabled" :                            [,  true,  false, false, false],
   "javascript.options.asmjs" :                [,  false, false, false, true ],
-  "javascript.options.wasm" :                 [,  false, false, false, true ],
 };
 
 // The Security Settings prefs in question.
diff --git a/modules/tor-control-port.js b/modules/tor-control-port.js
index 1b0a79ad..9f6dbeb6 100644
--- a/modules/tor-control-port.js
+++ b/modules/tor-control-port.js
@@ -7,15 +7,10 @@
 //
 // To import the module, use
 //
-//  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.
+//  let { controller } = Components.utils.import("path/to/tor-control-port.js", {});
 //
 // See the last function defined in this file:
-//   controller(onError)
+//   controller(ipcFile, host, port, password, onError)
 // for usage of the controller function.
 
 /* jshint esnext: true */
@@ -234,16 +229,7 @@ io.matchRepliesToCommands = function (asyncSend, dispatcher) {
     let [command, replyCallback, errorCallback] = commandQueue.shift();
     if (message.match(/^2/) && replyCallback) replyCallback(message);
     if (message.match(/^[45]/) && errorCallback) {
-      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);
+      errorCallback(new Error(command + " -> " + message));
     }
   });
   // Create and return a version of sendCommand that returns a Promise.
@@ -576,24 +562,6 @@ 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
 
@@ -649,9 +617,6 @@ 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,
@@ -661,53 +626,29 @@ tor.controller = function (ipcFile, host, port, password, onError) {
 
 // ## Export
 
-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.
+// __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.
 // onError is called with an error object as its single argument whenever
 // an error occurs. Example:
 //
 //     // Get the controller
-//     let c = controller(
+//     let c = controller(undefined, "127.0.0.1", 9151, "MyPassw0rd",
 //                    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 (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];
+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));
 };
 
-// Export functions for external use.
-var EXPORTED_SYMBOLS = ["configureControlPortModule", "controller"];
+// Export the controller function for external use.
+var EXPORTED_SYMBOLS = ["controller"];
diff --git a/modules/utils.js b/modules/utils.js
index b726342b..0caf475f 100644
--- a/modules/utils.js
+++ b/modules/utils.js
@@ -239,58 +239,6 @@ var getDomainForBrowser = (browser) => {
   return fpd;
 };
 
-var m_tb_torlog = Cc["@torproject.org/torbutton-logger;1"]
-.getService(Ci.nsISupports).wrappedJSObject;
-
-var m_tb_string_bundle = torbutton_get_stringbundle();
-
-function torbutton_safelog(nLevel, sMsg, scrub) {
-    m_tb_torlog.safe_log(nLevel, sMsg, scrub);
-    return true;
-}
-
-function torbutton_log(nLevel, sMsg) {
-    m_tb_torlog.log(nLevel, sMsg);
-
-    // So we can use it in boolean expressions to determine where the
-    // short-circuit is..
-    return true;
-}
-
-// load localization strings
-function torbutton_get_stringbundle()
-{
-    var o_stringbundle = false;
-
-    try {
-        var oBundle = Services.strings;
-        o_stringbundle = oBundle.createBundle("chrome://torbutton/locale/torbutton.properties");
-    } catch(err) {
-        o_stringbundle = false;
-    }
-    if (!o_stringbundle) {
-        torbutton_log(5, 'ERROR (init): failed to find torbutton-bundle');
-    }
-
-    return o_stringbundle;
-}
-
-function torbutton_get_property_string(propertyname)
-{
-    try {
-        if (!m_tb_string_bundle) {
-            m_tb_string_bundle = torbutton_get_stringbundle();
-        }
-
-        return m_tb_string_bundle.GetStringFromName(propertyname);
-    } catch(e) {
-        torbutton_log(4, "Unlocalized string "+propertyname);
-    }
-
-    return propertyname;
-}
-
 // Export utility functions for external use.
 let EXPORTED_SYMBOLS = ["bindPref", "bindPrefAndInit", "getEnv", "getLocale", "getDomainForBrowser",
-                        "getPrefValue", "observe", "showDialog", "show_torbrowser_manual", "unescapeTorString",
-                        "torbutton_safelog", "torbutton_log", "torbutton_get_property_string"];
+                        "getPrefValue", "observe", "showDialog", "show_torbrowser_manual", "unescapeTorString"];
diff --git a/moz.build b/moz.build
index 376c9976..843cee0d 100644
--- a/moz.build
+++ b/moz.build
@@ -4,3 +4,6 @@
 # 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',
+]

_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits