[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-commits] [torbutton/master] Browser-based update notification.
commit 5e573e043a135d89a426f1d296d2df6944c600d0
Author: Kathleen Brade <brade@xxxxxxxxxxxxxxxxx>
Date: Wed Feb 13 18:04:47 2013 -0800
Browser-based update notification.
---
src/chrome/content/popup.xul | 9 +++++
src/chrome/content/torbutton.js | 54 ++++++++++++++++++++++++++++++-
src/chrome/locale/en/torbutton.dtd | 2 +
src/chrome/skin/tor-update-16.gif | Bin 0 -> 1304 bytes
src/chrome/skin/tor-update-24.gif | Bin 0 -> 1732 bytes
src/chrome/skin/torbutton.css | 9 +++++
src/defaults/preferences/preferences.js | 1 +
7 files changed, 74 insertions(+), 1 deletions(-)
diff --git a/src/chrome/content/popup.xul b/src/chrome/content/popup.xul
index dd7a398..6dc8451 100644
--- a/src/chrome/content/popup.xul
+++ b/src/chrome/content/popup.xul
@@ -36,6 +36,15 @@
accesskey="&torbutton.context_menu.about.key;"
insertafter="context-stop"
oncommand="window.open('chrome://torbutton/content/about.xul', '', 'chrome,centerscreen');"/>
+
+ <menuseparator hidden="true"/>
+ <menuitem id="torbutton-downloadUpdate"
+ label="&torbutton.context_menu.downloadUpdate;"
+ accesskey="&torbutton.context_menu.downloadUpdate.key;"
+ insertafter="context-stop"
+ oncommand="torbutton_download_update()"
+ hidden="true"/>
+
</menupopup>
</overlay>
diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js
index c3320f6..649cddf 100644
--- a/src/chrome/content/torbutton.js
+++ b/src/chrome/content/torbutton.js
@@ -7,6 +7,8 @@
// TODO: Double-check there are no strange exploits to defeat:
// http://kb.mozillazine.org/Links_to_local_pages_don%27t_work
+const k_tb_browser_update_needed_pref = "extensions.torbutton.updateNeeded";
+
// status
var m_tb_wasinited = false;
var m_tb_prefs = false;
@@ -69,6 +71,9 @@ var torbutton_window_pref_observer =
torbutton_update_toolbutton(mode);
torbutton_update_statusbar(mode);
break;
+ case k_tb_browser_update_needed_pref:
+ torbutton_notify_if_update_needed();
+ break;
}
}
}
@@ -441,6 +446,7 @@ function torbutton_init() {
var mode = m_tb_prefs.getBoolPref("extensions.torbutton.tor_enabled");
torbutton_update_toolbutton(mode);
torbutton_update_statusbar(mode);
+ torbutton_notify_if_update_needed();
torbutton_log(3, 'init completed');
}
@@ -593,6 +599,50 @@ function torbutton_get_statuspanel() {
return o_statuspanel;
}
+function torbutton_notify_if_update_needed() {
+ function setOrClearAttribute(aElement, aAttrName, aValue)
+ {
+ if (!aElement || !aAttrName)
+ return;
+
+ if (aValue)
+ aElement.setAttribute(aAttrName, aValue);
+ else
+ aElement.removeAttribute(aAttrName);
+ }
+
+ var updateNeeded = false;
+ try {
+ updateNeeded = m_tb_prefs.getBoolPref(k_tb_browser_update_needed_pref);
+ } catch (e) {}
+
+ // Change look of toolbar item (enable/disable animated update icon).
+ var btn = torbutton_get_toolbutton();
+ setOrClearAttribute(btn, "tbUpdateNeeded", updateNeeded);
+
+ // Hide/show download menu item and preceding separator.
+ var item = document.getElementById("torbutton-downloadUpdate");
+ setOrClearAttribute(item, "hidden", !updateNeeded);
+ if (item)
+ setOrClearAttribute(item.previousSibling, "hidden", !updateNeeded);
+}
+
+function torbutton_download_update() {
+ var downloadURI = "https://www.torproject.org/download/download-easy.html";
+ var rtSvc = Components.classes["@mozilla.org/xre/app-info;1"]
+ .getService(Components.interfaces.nsIXULRuntime);
+ downloadURI += "?os=" + rtSvc.OS + "&arch=" + rtSvc.XPCOMABI;
+ if (rtSvc.OS == "Darwin")
+ downloadURI += "#mac";
+ else if (rtSvc.OS == "WINNT")
+ downloadURI += "#win";
+ else if (rtSvc.OS == "Linux")
+ downloadURI += "#linux";
+
+ var newTab = gBrowser.addTab(downloadURI);
+ gBrowser.selectedTab = newTab;
+}
+
// Bug 1506 P0: Toggle. Kill kill kill.
function torbutton_save_nontor_settings()
{
@@ -690,7 +740,7 @@ function torbutton_do_async_versioncheck() {
}
// Suppress update check if done recently.
- const kLastCheckPref = "extension.torbutton.lastUpdateCheck";
+ const kLastCheckPref = "extensions.torbutton.lastUpdateCheck";
const kMinSecsBetweenChecks = 90 * 60; // 1.5 hours
var now = Date.now() / 1000;
var lastCheckTime;
@@ -729,6 +779,7 @@ function torbutton_do_async_versioncheck() {
for (var v in version_list) {
if (version_list[v] == my_version) {
torbutton_log(3, "Version check passed.");
+ m_tb_prefs.setBoolPref(k_tb_browser_update_needed_pref, false);
var homepage = m_tb_prefs.getComplexValue("browser.startup.homepage",
Components.interfaces.nsIPrefLocalizedString).data;
if (homepage.indexOf("https://check.torproject.org/") == 0) {
@@ -743,6 +794,7 @@ function torbutton_do_async_versioncheck() {
}
}
torbutton_log(5, "Your Tor Browser is out of date.");
+ m_tb_prefs.setBoolPref(k_tb_browser_update_needed_pref, true);
// Not up to date
var str = Components.classes["@mozilla.org/supports-string;1"]
.createInstance(Components.interfaces.nsISupportsString);
diff --git a/src/chrome/locale/en/torbutton.dtd b/src/chrome/locale/en/torbutton.dtd
index cfd014c..cbda0a2 100644
--- a/src/chrome/locale/en/torbutton.dtd
+++ b/src/chrome/locale/en/torbutton.dtd
@@ -35,6 +35,8 @@
<!ENTITY torbutton.context_menu.preferences.key "P">
<!ENTITY torbutton.context_menu.about "About Torbutton...">
<!ENTITY torbutton.context_menu.about.key "A">
+<!ENTITY torbutton.context_menu.downloadUpdate "Download Tor Browser Bundle Update...">
+<!ENTITY torbutton.context_menu.downloadUpdate.key "U">
<!ENTITY torbutton.context_menu.cookieProtections "Cookie Protections">
<!ENTITY torbutton.context_menu.cookieProtections.key "C">
<!ENTITY torbutton.context_menu.copyTor "Copy Tor URL">
diff --git a/src/chrome/skin/tor-update-16.gif b/src/chrome/skin/tor-update-16.gif
new file mode 100644
index 0000000..d006458
Binary files /dev/null and b/src/chrome/skin/tor-update-16.gif differ
diff --git a/src/chrome/skin/tor-update-24.gif b/src/chrome/skin/tor-update-24.gif
new file mode 100644
index 0000000..72591a8
Binary files /dev/null and b/src/chrome/skin/tor-update-24.gif differ
diff --git a/src/chrome/skin/torbutton.css b/src/chrome/skin/torbutton.css
index 676122e..2218e9f 100644
--- a/src/chrome/skin/torbutton.css
+++ b/src/chrome/skin/torbutton.css
@@ -7,6 +7,9 @@
#torbutton-button[tbstatus="off"] {
list-style-image: url("chrome://torbutton/skin/tor-disabled-24.png");
}
+#torbutton-button[tbUpdateNeeded="true"] {
+ list-style-image: url("chrome://torbutton/skin/tor-update-24.gif");
+}
toolbar[iconsize="small"] #torbutton-button {
list-style-image: url("chrome://torbutton/skin/tor-16.png");
}
@@ -16,6 +19,9 @@ toolbar[iconsize="small"] #torbutton-button[tbstatus="on"] {
toolbar[iconsize="small"] #torbutton-button[tbstatus="off"] {
list-style-image: url("chrome://torbutton/skin/tor-disabled-16.png");
}
+toolbar[iconsize="small"] #torbutton-button[tbUpdateNeeded="true"] {
+ list-style-image: url("chrome://torbutton/skin/tor-update-16.gif");
+}
#torbutton-panel {
list-style-image: url("chrome://torbutton/skin/tor-16.png");
@@ -86,3 +92,6 @@ statusbarpanel#plugins-status[status="0"] {
list-style-image: url("chrome://torbutton/skin/poff.png");
}
+#torbutton-downloadUpdate {
+ font-weight: bold;
+}
diff --git a/src/defaults/preferences/preferences.js b/src/defaults/preferences/preferences.js
index 26cd2f3..4f81acc 100644
--- a/src/defaults/preferences/preferences.js
+++ b/src/defaults/preferences/preferences.js
@@ -7,6 +7,7 @@ pref("extensions.torbutton.logmethod",1); // 0=stdout, 1=errorconsole, 2=debuglo
pref("extensions.torbutton.display_panel",true);
pref("extensions.torbutton.panel_style",'text');
pref("extensions.torbutton@xxxxxxxxxxxxxxxxxxxxxxxxxx", "chrome://torbutton/locale/torbutton.properties");
+pref("extensions.torbutton.updateNeeded", false);
// proxy prefs
pref("extensions.torbutton.settings_method",'recommended');
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits