Commit 5a3d6d26 authored by Richard Pospesel's avatar Richard Pospesel Committed by Georg Koppen
Browse files

Bug 25658: Replace security slider with security level UI

This patch has security level related changes for torbutton.
Migrated 'security level' related strings from torbutton.dtd to new
securityLevel.properties file, loaded by JS in the new securitylevel
component in Tor Browser. Removed the old Security Slider xul and menu
entry in the torbutton menu. Also 'fixed' the german (de) torbutton.dtd
file (was valid listing of XML entities, but it broke my dtd parser used
to migrate strings)

Added new "extensions.torbutton.inserted_security_level" pref to
torbutton that piggy backs off the existing
"extensions.torbutton.inserted_button" pref logic. Toolbars are reset to
the Tor Browser default when the new 'inserted_security_level' pref is
false. Coupled with the changes in tor-browser, users which upgrade will
have their toolbars reset to the new design.
parent 2930d898
......@@ -27,11 +27,6 @@
insertafter="context-stop"
hidden="true"
oncommand="torbutton_open_cookie_dialog()"/>
<menuitem id="torbutton-preferences"
label="&torbutton.context_menu.preferences;"
accesskey="&torbutton.context_menu.preferences.key;"
insertafter="context-stop"
oncommand="torbutton_open_prefs_dialog()"/>
<menuitem id="torbutton-networksettings"
label="&torbutton.context_menu.networksettings;"
accesskey="&torbutton.context_menu.networksettings.key;"
......
// # Security Settings User Interface
// Utilities
let { utils: Cu } = Components;
let { getBoolPref, getIntPref, setBoolPref, setIntPref, getCharPref } =
Cu.import("resource://gre/modules/Services.jsm", {}).Services.prefs;
let { getLocale, show_torbrowser_manual } =
Cu.import("resource://torbutton/modules/utils.js", {});
// Description elements have the follow names.
const descNames =
[, "desc_safest", "desc_safer", "desc_standard"];
// "Learn-more"-elements have the follow names.
const linkNames =
[, "link_safest", "link_safer", "link_standard"];
// A single `state` object that reflects the user settings in this UI.
let state = { slider : 0, custom : false};
// Utility functions to convert between the legacy 4-value pref index
// and the 3-valued security slider.
let sliderPositionToPrefSetting = pos => [, 1, 2, 4][pos];
let prefSettingToSliderPosition = pref => [, 1, 2, 2, 3][pref];
// Set the desired slider value and update UI.
function torbutton_set_slider(sliderPosition) {
state.slider = sliderPosition;
let slider = document.getElementById("torbutton_sec_slider");
slider.value = sliderPosition;
let descs = descNames.map(name => document.getElementById(name));
descs.forEach((desc, i) => desc.collapsed = sliderPosition !== i);
};
// Set the desired custom value and update UI.
function torbutton_set_custom(customValue) {
state.custom = customValue;
let sliderSettings = document.getElementById("torbutton_slider_settings");
let customSettings = document.getElementById("torbutton_custom_settings");
sliderSettings.hidden = customValue;
customSettings.hidden = !customValue;
};
// Read prefs 'extensions.torbutton.security_slider' and
// 'extensions.torbutton.security_custom', and initialize the UI.
function torbutton_init_security_ui() {
torbutton_set_slider(prefSettingToSliderPosition(
getIntPref("extensions.torbutton.security_slider")));
torbutton_set_custom(getBoolPref("extensions.torbutton.security_custom"));
torbutton_set_learn_more_links();
// Make sure the "Accept"-button is focused when we show the dialog and not a
// possible "Learn more"-link. See: comment:16 in bug 21847.
let okBtn = document.documentElement.getButton("accept");
if (okBtn)
okBtn.focus();
setTimeout(adjustDialogSize, 0);
};
// Write the two prefs from the current settings.
function torbutton_save_security_settings() {
setIntPref("extensions.torbutton.security_slider",
sliderPositionToPrefSetting(state.slider));
setBoolPref("extensions.torbutton.security_custom", state.custom);
};
// We follow the way we treat the links to the Tor Browser User Manual on the
// Help Menu and on about:tor: if we have the manual available for a locale,
// let's show the "Learn more"-link, otherwise hide it.
function torbutton_set_learn_more_links() {
let show_manual = show_torbrowser_manual();
let locale = ""
if (show_manual) {
locale = getLocale();
}
let links = linkNames.map(name => document.getElementById(name));
links.forEach(link => {;
if (show_manual && locale != "") {
link.href= "https:/tb-manual.torproject.org/" + locale +
"/security-slider.html";
link.hidden = false;
} else {
link.hidden = true;
}
});
}
// Increase the height of this window so that a vertical scrollbar is not
// needed on the description box.
function adjustDialogSize() {
try {
// Find the height required by the tallest description element.
let descHeight = 0;
let descs = descNames.map(name => document.getElementById(name));
descs.forEach(elem => {
let origCollapsed = elem.collapsed;
elem.collapsed = false;
let h = elem.scrollHeight;
elem.collapsed = origCollapsed;
if (h > descHeight)
descHeight = h;
});
// Cap the height (just in case).
const kMaxDescriptionHeight = 550;
if (descHeight > kMaxDescriptionHeight)
descHeight = kMaxDescriptionHeight;
// Increase the height of the description container if it is too short.
let boxElem = document.getElementById("descBox");
if (boxElem.clientHeight < descHeight) {
boxElem.setAttribute("height", descHeight);
// Resize the XUL window to account for the new description height. In
// order for sizeToContent() to work correctly, it seems that we must
// remove the height attribute from the dialog (that attribute is added
// after a user manually resizes the window).
document.documentElement.removeAttribute("height");
sizeToContent();
}
} catch (e) {}
// Show a scrollbar for the description text if one is needed.
// To avoid bug 21330, we set the overflow=auto style here instead
// of directly in the XUL.
document.getElementById("descBox").style.overflow = "auto";
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://torbutton/skin/preferences.css" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://torbutton/locale/torbutton.dtd">
<dialog id="torbutton-prefs"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:html="http://www.w3.org/1999/xhtml"
title="&torbutton.prefs.security_settings;"
buttons="accept,cancel"
persist="screenX screenY width height"
onload="torbutton_init_security_ui()"
align="stretch"
pack="center"
maxheight="600"
minwidth="400"
maxwidth="800"
ondialogaccept="torbutton_save_security_settings()"
width="500" >
<script type="application/x-javascript" src="torbutton_util.js"/>
<script type="application/x-javascript" src="preferences.js"/>
<vbox flex="1" align="stretch">
<groupbox align="stretch" flex="1"> <!-- security settings container -->
<caption label="&torbutton.prefs.sec_caption;"/>
<hbox id="torbutton_slider_settings" flex="1" align="stretch" hidden="false">
<vbox>
<hbox flex="1" minheight="220">
<vbox>
<scale id="torbutton_sec_slider" flex="1" min="1" max="3"
movetoclick="true" orient="vertical"
onchange="torbutton_set_slider(this.value)"/>
</vbox>
<vbox>
<hbox flex="1" align="start">
<description id="torbutton_sec_safest"
onclick="torbutton_set_slider(1);"
tooltip="safest_preview">
&torbutton.prefs.sec_safest_label;
</description>
</hbox>
<hbox flex="1" align="center">
<description id="torbutton_sec_safer"
onclick="torbutton_set_slider(2);"
tooltip="safer_preview">
&torbutton.prefs.sec_safer_label;
</description>
</hbox>
<hbox flex="1" align="end">
<description id="torbutton_sec_standard"
onclick="torbutton_set_slider(3);"
tooltip="standard_preview">
&torbutton.prefs.sec_standard_label;
</description>
</hbox>
</vbox>
</hbox>
</vbox>
<vbox id="descBox" flex="1" style="overflow: hidden;">
<vbox id="desc_safest" collapsed="true">
<description
class="slider-text-size, slider-text-weight">
&torbutton.prefs.sec_safest_description;
</description>
<separator orient="horizontal" class="thin"/>
<description class="slider-text-size, slider-text-weight">
&torbutton.prefs.sec_safest_list_label;
</description>
<description class="slider-text-size">
&torbutton.prefs.sec_js_disabled;
</description>
<description class="slider-text-size">
&torbutton.prefs.sec_limit_graphics_and_typography;
</description>
<description class="slider-text-size">
&torbutton.prefs.sec_click_to_play_media;
</description>
<separator orient="horizontal" class="thin"/>
<label id="link_safest" class="text-link">
&torbutton.prefs.sec_learn_more_label;
</label>
</vbox>
<vbox id="desc_safer" collapsed="true">
<description
class="slider-text-size, slider-text-weight">
&torbutton.prefs.sec_safer_description;
</description>
<separator orient="horizontal" class="thin"/>
<description class="slider-text-size, slider-text-weight">
&torbutton.prefs.sec_safer_list_label;
</description>
<description class="slider-text-size">
&torbutton.prefs.sec_js_on_https_sites_only;
</description>
<description class="slider-text-size">
&torbutton.prefs.sec_limit_typography;
</description>
<description class="slider-text-size">
&torbutton.prefs.sec_click_to_play_media;
</description>
<separator orient="horizontal" class="thin"/>
<label id="link_safer" class="text-link">
&torbutton.prefs.sec_learn_more_label;
</label>
</vbox>
<vbox id="desc_standard" collapsed="false">
<description
class="slider-text-size, slider-text-weight">
&torbutton.prefs.sec_standard_description;
</description>
<separator orient="horizontal" class="thin"/>
<label id="link_standard" class="text-link">
&torbutton.prefs.sec_learn_more_label;
</label>
</vbox>
</vbox>
</hbox>
<vbox id="torbutton_custom_settings"
hidden="true"
width="300"
height="200"
style="overflow:auto;">
<description>
&torbutton.prefs.custom_warning;
</description>
<hbox>
<button id="torbutton_restore_defaults_button"
oncommand="torbutton_set_custom(false);"
label="&torbutton.prefs.restore_defaults;"/>
</hbox>
</vbox>
</groupbox>
</vbox>
<tooltip id="safest_preview">
<html:b>&torbutton.prefs.sec_safest_list_label;</html:b>
<html:br></html:br>
<html:br></html:br>
<html:div>&torbutton.prefs.sec_js_disabled;</html:div>
<html:div>&torbutton.prefs.sec_limit_graphics_and_typography;</html:div>
<html:div>&torbutton.prefs.sec_click_to_play_media;</html:div>
</tooltip>
<tooltip id="safer_preview">
<html:b>&torbutton.prefs.sec_safer_list_label;</html:b>
<html:br></html:br>
<html:br></html:br>
<html:div>&torbutton.prefs.sec_js_on_https_sites_only;</html:div>
<html:div>&torbutton.prefs.sec_limit_typography;</html:div>
<html:div>&torbutton.prefs.sec_click_to_play_media;</html:div>
</tooltip>
<tooltip id="standard_preview">
<html:b>&torbutton.prefs.sec_standard_description;</html:b>
</tooltip>
</dialog>
......@@ -125,7 +125,7 @@ var torbutton_unique_pref_observer =
* registers. Thankfully, these notifications arrive only on
* the main thread, *however*, our confirmation dialog suspends
* execution and allows more events to arrive until it is answered
*/
*/
if (!m_tb_confirming_plugins) {
m_tb_confirming_plugins = true;
torbutton_confirm_plugins();
......@@ -368,22 +368,27 @@ function torbutton_init() {
//if (contextMenu)
// contextMenu.addEventListener("popupshowing", torbutton_check_contextmenu, false);
// Add toolbutton to the bar.
// Add torbutton and security level button to the bar.
// This should maybe be in the startup function, but we want to add
// the button to the panel before it's state (color) is set..
if (!m_tb_prefs.getBoolPref("extensions.torbutton.inserted_button")) {
if (!m_tb_prefs.getBoolPref("extensions.torbutton.inserted_button") ||
!m_tb_prefs.getBoolPref("extensions.torbutton.inserted_security_level")) {
torbutton_log(3, 'Adding button');
try {
// ESR31-style toolbar is handled by the existing compiled-in pref.
// We also need to prevent first-run toolbar reorg (#13378), so we
// reset this toolbar state on first-run.
try {
// reverts the serialized toolbar state to default set in Tor Browser
m_tb_prefs.clearUserPref("browser.uiCustomization.state");
} catch(e) {}
// reverts toolbar state to firefox defaults
CustomizableUI.reset();
// 'restores' toolbar state from serialized state in "browser.uiCustomization.state"
CustomizableUI.undoReset();
torbutton_log(3, 'Button added');
m_tb_prefs.setBoolPref("extensions.torbutton.inserted_button", true);
m_tb_prefs.setBoolPref("extensions.torbutton.inserted_security_level", true);
} catch(e) {
torbutton_log(4, 'Failed to add Torbutton to toolbar: '+e);
}
......@@ -477,7 +482,7 @@ function torbutton_confirm_plugins() {
torbutton_log(3, "False positive on plugin notification. Ignoring");
return;
}
torbutton_log(3, "Confirming plugin usage.");
var prompts = Cc["@mozilla.org/embedcomp/prompt-service;1"]
......@@ -485,7 +490,7 @@ function torbutton_confirm_plugins() {
// Display two buttons, both with string titles.
var flags = prompts.STD_YES_NO_BUTTONS + prompts.BUTTON_DELAY_ENABLE;
var message = torbutton_get_property_string("torbutton.popup.confirm_plugins");
var askAgainText = torbutton_get_property_string("torbutton.popup.never_ask_again");
var askAgain = {value: false};
......@@ -500,7 +505,7 @@ function torbutton_confirm_plugins() {
// The pref observer for "plugin.disable" will set the appropriate plugin state.
// So, we only touch the pref if it has changed.
if (no_plugins !=
if (no_plugins !=
m_tb_prefs.getBoolPref("plugin.disable"))
m_tb_prefs.setBoolPref("plugin.disable", no_plugins);
else
......@@ -511,12 +516,12 @@ function torbutton_confirm_plugins() {
var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
.getService(Components.interfaces.nsIWindowMediator);
var browserEnumerator = wm.getEnumerator("navigator:browser");
// Check each browser instance for our URL
while (browserEnumerator.hasMoreElements()) {
var browserWin = browserEnumerator.getNext();
var tabbrowser = browserWin.gBrowser;
// Check each tab of this browser instance
var numTabs = tabbrowser.browsers.length;
for (var index = 0; index < numTabs; index++) {
......@@ -650,7 +655,7 @@ function torbutton_do_async_versioncheck() {
req.open('GET', url, true);
req.channel.loadFlags |= Ci.nsIRequest.LOAD_BYPASS_CACHE;
req.overrideMimeType("text/json");
req.onreadystatechange = function (oEvent) {
req.onreadystatechange = function (oEvent) {
if (req.readyState === 4) {
if(req.status == 200) {
if(!req.responseText) {
......@@ -696,8 +701,8 @@ function torbutton_do_async_versioncheck() {
}
torbutton_log(5, "Version check failed! Web server error: "+req.status);
return -1;
}
};
}
};
req.send(null);
} catch(e) {
if(e.result == 0x80004005) { // NS_ERROR_FAILURE
......@@ -1651,13 +1656,6 @@ function torbutton_open_cookie_dialog() {
'Cookie Protections', 'centerscreen,chrome,dialog,modal,resizable');
}
// Bug 1506 P2/P3: Prefs are handled differently on android, I guess?
function torbutton_open_prefs_dialog() {
showDialog(window, "chrome://torbutton/content/preferences.xul",
"torbutton-preferences","centerscreen, chrome");
torbutton_log(2, 'opened preferences window');
}
// -------------- HISTORY & COOKIES ---------------------
// Bug 1506 P4: Used by New Identity if cookie protections are
......@@ -1666,7 +1664,7 @@ function torbutton_clear_cookies() {
torbutton_log(2, 'called torbutton_clear_cookies');
var cm = Components.classes["@mozilla.org/cookiemanager;1"]
.getService(Components.interfaces.nsICookieManager);
cm.removeAll();
}
......@@ -1688,7 +1686,7 @@ function torbutton_disable_browser_js(browser) {
} catch(e) {
torbutton_log(4, "Failed to disable JS events: "+e)
}
if (browser.docShell)
browser.docShell.allowJavascript = false;
......@@ -1721,9 +1719,9 @@ function torbutton_disable_window_js(win) {
var b = browser.browsers[i];
if (b && !b.docShell) {
try {
if (b.currentURI)
if (b.currentURI)
torbutton_log(5, "DocShell is null for: "+b.currentURI.spec);
else
else
torbutton_log(5, "DocShell is null for unknown URL");
} catch(e) {
torbutton_log(5, "DocShell is null for unparsable URL: "+e);
......@@ -1867,12 +1865,12 @@ function torbutton_is_windowed(wind) {
torbutton_log(2, "Window is fullScreen");
return false;
}
if(wind.outerHeight == wind.screen.availHeight
if(wind.outerHeight == wind.screen.availHeight
&& wind.outerWidth == wind.screen.availWidth) {
torbutton_log(3, "Window is ratpoisoned/evilwm'ed");
return false;
}
torbutton_log(2, "Window is normal");
return true;
}
......@@ -1955,12 +1953,7 @@ function torbutton_new_window(event)
Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
}
// Register the TorOpenSecuritySettings observer, which is used by
// UITour to open the security slider dialog.
stopOpenSecuritySettingsObserver = observe("TorOpenSecuritySettings",
torbutton_open_prefs_dialog);
// Check the version on every new window. We're already pinging check in these cases.
// Check the version on every new window. We're already pinging check in these cases.
torbutton_do_async_versioncheck();
torbutton_do_tor_check();
......@@ -1977,9 +1970,9 @@ function torbutton_close_window(event) {
false);
// TODO: This is a real ghetto hack.. When the original window
// closes, we need to find another window to handle observing
// unique events... The right way to do this is to move the
// majority of torbutton functionality into a XPCOM component..
// closes, we need to find another window to handle observing
// unique events... The right way to do this is to move the
// majority of torbutton functionality into a XPCOM component..
// But that is a major overhaul..
if (m_tb_is_main_window) {
torbutton_log(3, "Original window closed. Searching for another");
......
......@@ -6,7 +6,6 @@
<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "Click to initialize Torbutton">
<!ENTITY torbutton.prefs.restore_defaults "Restore Defaults">
<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
<!ENTITY torbutton.cookiedialog.lockCol "Protected">
<!ENTITY torbutton.cookiedialog.domainCol "Host">
......
......@@ -6,7 +6,6 @@
<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "Click to initialize Torbutton">
<!ENTITY torbutton.prefs.restore_defaults "Restore Defaults">
<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
<!ENTITY torbutton.cookiedialog.lockCol "Protected">
<!ENTITY torbutton.cookiedialog.domainCol "Host">
......
......@@ -6,7 +6,6 @@
<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "Click to initialize Torbutton">
<!ENTITY torbutton.prefs.restore_defaults "Restore Defaults">
<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
<!ENTITY torbutton.cookiedialog.lockCol "Protected">
<!ENTITY torbutton.cookiedialog.domainCol "Host">
......
securityLevel.securityLevel = مستوى الأمان
securityLevel.standard.level = عادي
securityLevel.standard.summary = كل خصائص متصفح تور ومواقع الوب مفعلة
securityLevel.safer.level = آمِن
securityLevel.safer.summary = يعطل مميزات مواقع الوب التي عادة ما تكون خطيرة. يتسبب في تعطل خصائص بعض المواقع.
securityLevel.safer.description1 = تعطل جافا سكربت على المواقع التي لا تستخدم HTTPS
securityLevel.safer.description2 = تعطّل بعض الخطوط والرموز الرياضية.
securityLevel.safer.description3 = الصوت والفيديو يحتاج للنقر لتشغيله.
securityLevel.safest.level = الأكثر أمنا
securityLevel.safest.summary = اسمح فقط بالخصائص المطلوبة للمواقع غير الديناميكية والخدمات الأساسية. تؤثر هذه التغييرات على الصور والوسائط والنصوص البرمجية.
securityLevel.safest.description1 = تعطل جافا سكربت مبدئيا على جميع المواقع.
securityLevel.safest.description2 = تعطّل بعض الخطوط والأيقونات والرموز الرياضية والصور.
securityLevel.safest.description3 = الصوت والفيديو يحتاج للنقر لتشغيله.
securityLevel.custom.summary = تفضيلاتك الخاصة للمتصفح تسببت في إعدادات أمان غير معتادة. لأمان وخصوصية أفضل ننصح باستخدام أحد مستويات الأمان المبدئية.
securityLevel.learnMore = تعرّف على المزيد
securityLevel.restoreDefaults = استعد الإعادات المبدئية
......@@ -2,8 +2,6 @@
<!ENTITY torbutton.context_menu.new_identity_key "I">
<!ENTITY torbutton.context_menu.new_circuit "دائرة تور جديدة لهذا الموقع">
<!ENTITY torbutton.context_menu.new_circuit_key "C">
<!ENTITY torbutton.context_menu.preferences "إعدادات الأمان...">
<!ENTITY torbutton.context_menu.preferences.key "S">
<!ENTITY torbutton.context_menu.networksettings "إعدادات شبكة تور...">
<!ENTITY torbutton.context_menu.networksettings.key "N">
<!ENTITY torbutton.context_menu.downloadUpdate "تحقق من تحديثات متصفح تور...">
......@@ -12,8 +10,6 @@
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "انقر لبدء زر تور">
<!ENTITY torbutton.prefs.security_settings "إعدادات أمان متصفح طور">
<!ENTITY torbutton.prefs.restore_defaults "استعد الإعادات المبدئية">
<!ENTITY torbutton.prefs.custom_warning "تفضيلاتك الخاصة للمتصفح تسببت في إعدادات أمان غير معتادة. لأمان وخصوصية أفضل ننصح باستخدام أحد مستويات الأمان المبدئية.">
<!ENTITY torbutton.cookiedialog.title "إدارة إعدادت الحماية لملفات تعريف الارتباط">
<!ENTITY torbutton.cookiedialog.lockCol "محمية">
<!ENTITY torbutton.cookiedialog.domainCol "استضافة">
......
......@@ -6,7 +6,6 @@
<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "Click to initialize Torbutton">
<!ENTITY torbutton.prefs.restore_defaults "Restore Defaults">
<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
<!ENTITY torbutton.cookiedialog.lockCol "Protected">
<!ENTITY torbutton.cookiedialog.domainCol "Host">
......
......@@ -6,7 +6,6 @@
<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "Click to initialize Torbutton">
<!ENTITY torbutton.prefs.restore_defaults "Restore Defaults">
<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
<!ENTITY torbutton.cookiedialog.lockCol "Protected">
<!ENTITY torbutton.cookiedialog.domainCol "Host">
......
securityLevel.restoreDefaults = Varsayılanları yenidən yüklə
......@@ -6,7 +6,6 @@
<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "Tordüyməsini başlatmaq üçün klikləyin">
<!ENTITY torbutton.prefs.restore_defaults "Varsayılanları yenidən yüklə">
<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
<!ENTITY torbutton.cookiedialog.lockCol "Protected">
<!ENTITY torbutton.cookiedialog.domainCol "Host">
......
......@@ -6,7 +6,6 @@
<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "Click to initialize Torbutton">
<!ENTITY torbutton.prefs.restore_defaults "Restore Defaults">
<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
<!ENTITY torbutton.cookiedialog.lockCol "Protected">
<!ENTITY torbutton.cookiedialog.domainCol "Host">
......
securityLevel.restoreDefaults = Възстанови стандартните
......@@ -6,7 +6,6 @@
<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "Click to initialize Torbutton">
<!ENTITY torbutton.prefs.restore_defaults "Възстанови стандартните">
<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
<!ENTITY torbutton.cookiedialog.lockCol "Protected">
<!ENTITY torbutton.cookiedialog.domainCol "Host">
......
securityLevel.restoreDefaults = မူလအေျခအေနသို႕ ျပန္လည္ ထည့္သြင္းရန္
<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.button.tooltip "Torbutton စတင္ရန္ ကလစ္လုပ္ပါ">
<!ENTITY torbutton.prefs.restore_defaults "မူလအေျခအေနသို႕ ျပန္လည္ ထည့္သြင္းရန္">
<!ENTITY torbutton.cookiedialog.title "Manage Cookie Protections">
<!ENTITY torbutton.cookiedialog.lockCol "Protected">
<!ENTITY torbutton.cookiedialog.domainCol "Host">
......
securityLevel.securityLevel = নিরাপত্তার মাত্রা
securityLevel.standard.level = মান
securityLevel.standard.summary = সমস্ত টর ব্রাউজার এবং ওয়েবসাইট বৈশিষ্ট্য সক্ষম করা হয়।
securityLevel.safer.level = নিরাপদ
securityLevel.safer.summary = ওয়েবসাইটের বৈশিষ্ট্যগুলি প্রায়ই বিপজ্জনক করে, যা কিছু সাইটগুলি কার্যকারিতা হারাতে বাধা দেয়।
securityLevel.safer.description1 = Non-HTTPS সাইটগুলিতে জাভাস্ক্রিপ্ট অক্