[tor-commits] [torbutton/master] Bug 8313: Guard against multiple plugin notifications.

mikeperry at torproject.org mikeperry at torproject.org
Wed Mar 6 21:48:20 UTC 2013


commit 410b0a5391655ec9d2c740c9b69ceddf5bbf313f
Author: Mike Perry <mikeperry-git at fscked.org>
Date:   Tue Mar 5 14:28:24 2013 -0800

    Bug 8313: Guard against multiple plugin notifications.
    
    Turns out some plugins handle multiple mime types.
---
 src/chrome/content/torbutton.js |   19 +++++++++++++++++--
 1 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js
index d3c4631..2062e4d 100644
--- a/src/chrome/content/torbutton.js
+++ b/src/chrome/content/torbutton.js
@@ -17,6 +17,8 @@ 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;
 
@@ -127,7 +129,20 @@ var torbutton_unique_pref_observer =
               !m_tb_prefs.getBoolPref("extensions.torbutton.startup") &&
               m_tb_prefs.getBoolPref("extensions.torbutton.confirm_plugins")) {
              torbutton_log(3, "Got plugin enabled notification: "+subject);
-             torbutton_confirm_plugins();
+
+             /* We need to protect this call with a flag becuase we can
+              * get multiple observer events for each mime type a plugin
+              * 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();
+               m_tb_confirming_plugins = false;
+             } else {
+               torbutton_log(3, "Skipping notification for mime type: "+subject);
+             }
           }
           return;
         }
@@ -554,7 +569,7 @@ function torbutton_confirm_plugins() {
     for (var index = 0; index < numTabs; index++) {
       var currentBrowser = tabbrowser.getBrowserAtIndex(index);
       if ("about:addons" == currentBrowser.currentURI.spec) {
-        torbutton_log(5, "Got browser: "+currentBrowser.currentURI.spec);
+        torbutton_log(3, "Got browser: "+currentBrowser.currentURI.spec);
         currentBrowser.reload();
       }
     }



More information about the tor-commits mailing list