[tor-commits] [torbutton/master] Browser-based update notification.

mikeperry at torproject.org mikeperry at torproject.org
Thu Feb 14 06:09:26 UTC 2013


commit 5e573e043a135d89a426f1d296d2df6944c600d0
Author: Kathleen Brade <brade at pearlcrescent.com>
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 at torproject.org.description", "chrome://torbutton/locale/torbutton.properties");
+pref("extensions.torbutton.updateNeeded", false);
 
 // proxy prefs
 pref("extensions.torbutton.settings_method",'recommended');





More information about the tor-commits mailing list