[or-cvs] [torbutton/master 19/31] Explicitly write prefs to disk for crash detection.

mikeperry at torproject.org mikeperry at torproject.org
Tue Jan 4 07:02:19 UTC 2011


Author: Mike Perry <mikeperry-git at fscked.org>
Date: Tue, 28 Dec 2010 18:53:02 -0600
Subject: Explicitly write prefs to disk for crash detection.
Commit: 27af24fe205a2b515feaac18bf3ac1268ee102c5

---
 src/chrome/content/preferences.js |    5 +++++
 src/chrome/content/torbutton.js   |   23 ++++++++++++++++++++++-
 src/components/crash-observer.js  |   16 +++++++++++-----
 3 files changed, 38 insertions(+), 6 deletions(-)

diff --git a/src/chrome/content/preferences.js b/src/chrome/content/preferences.js
index cfcfe2d..379a04b 100644
--- a/src/chrome/content/preferences.js
+++ b/src/chrome/content/preferences.js
@@ -717,4 +717,9 @@ function torbutton_prefs_reset_defaults() {
 
     torbutton_log(4, "Preferences reset to defaults");
     torbutton_prefs_init(window.document);
+
+    // In all cases, force prefs to be synced to disk
+    var prefService = Components.classes["@mozilla.org/preferences-service;1"]
+        .getService(Components.interfaces.nsIPrefService);
+    prefService.savePrefFile(null);
 }
diff --git a/src/chrome/content/torbutton.js b/src/chrome/content/torbutton.js
index 558737e..022d62d 100644
--- a/src/chrome/content/torbutton.js
+++ b/src/chrome/content/torbutton.js
@@ -1519,8 +1519,13 @@ function torbutton_update_status(mode, force_update) {
     }
 
     // No need to clear cookies if just updating prefs
-    if(!changed && force_update)
+    if(!changed && force_update) {
+        // Force prefs to be synced to disk
+        var prefService = Components.classes["@mozilla.org/preferences-service;1"]
+            .getService(Components.interfaces.nsIPrefService);
+        prefService.savePrefFile(null);
         return;
+    }
 
     torbutton_set_timezone(mode, false);
 
@@ -1590,6 +1595,12 @@ function torbutton_update_status(mode, force_update) {
     }
 
     m_tb_prefs.setBoolPref("extensions.torbutton.settings_applied", mode);
+
+    // Force prefs to be synced to disk
+    var prefService = Components.classes["@mozilla.org/preferences-service;1"]
+        .getService(Components.interfaces.nsIPrefService);
+    prefService.savePrefFile(null);
+
     torbutton_log(3, "Settings applied for mode: "+mode);
 }
 
@@ -2564,6 +2575,11 @@ function torbutton_crash_recover()
         }
 
         m_tb_prefs.setBoolPref("extensions.torbutton.crashed", false);
+
+        // Force prefs to be synced to disk
+        var prefService = Components.classes["@mozilla.org/preferences-service;1"]
+                                           .getService(Components.interfaces.nsIPrefService);
+        prefService.savePrefFile(null);
     }
 
     torbutton_log(3, "End crash recover check");
@@ -3303,6 +3319,11 @@ function torbutton_set_initial_state() {
         } // 2 means leave it as it was
 
         m_tb_prefs.setBoolPref("extensions.torbutton.noncrashed", false);
+
+        // Force prefs to be synced to disk
+        var prefService = Components.classes["@mozilla.org/preferences-service;1"]
+                                           .getService(Components.interfaces.nsIPrefService);
+        prefService.savePrefFile(null);
     }
 }
 
diff --git a/src/components/crash-observer.js b/src/components/crash-observer.js
index 39db181..5f9c291 100644
--- a/src/components/crash-observer.js
+++ b/src/components/crash-observer.js
@@ -5,11 +5,12 @@
  * pref event) that the browser in fact crashed.
  *
  * XXX: Cases to test (each during Tor and Non-Tor)
- *    0. Crash (watch cookies!)
- *    1. Fresh install
- *    2. Uninstall
- *    3. Upgrade
- *    4. Profile restore without crash
+ *    0. Crash
+ *       * XXX: Sometimes just saves window list..
+ *    2. Upgrade
+ *    1. Uninstall
+ *    3. Profile restore without crash
+ *    4. Fresh install
  *
  *************************************************************************/
 
@@ -116,6 +117,11 @@ CrashObserver.prototype = {
         this.logger.log(3, "Torbutton normal exit.");
         //this.unregister();
       }
+
+      // In all cases, force prefs to be synced to disk
+      var prefService = Components.classes["@mozilla.org/preferences-service;1"]
+          .getService(Components.interfaces.nsIPrefService);
+      prefService.savePrefFile(null);
     },
   QueryInterface: function(iid) {
     if (iid.equals(Components.interfaces.nsISupports)) {
-- 
1.7.1




More information about the tor-commits mailing list