From 0c3ec0fea82c18c709a9e2b7ace95b6fe2305df7 Mon Sep 17 00:00:00 2001 From: gorhill Date: Sat, 11 Oct 2014 16:44:56 -0400 Subject: [PATCH] see if this fixes #307 --- js/messaging-handlers.js | 25 ++++++++++++++++++------- js/xal.js | 8 ++++---- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/js/messaging-handlers.js b/js/messaging-handlers.js index 727645c27..008b6eb54 100644 --- a/js/messaging-handlers.js +++ b/js/messaging-handlers.js @@ -654,15 +654,26 @@ var getUserData = function(callback) { /******************************************************************************/ var restoreUserData = function(userData) { + var countdown = 5; + var onCountdown = function() { + countdown -= 1; + if ( countdown === 0 ) { + µb.XAL.restart(); + } + }; + + var onAllRemoved = function() { + // Be sure to adjust `countdown` if adding/removing anything below + µBlock.saveLocalSettings(onCountdown); + µb.XAL.keyvalSetMany(userData.userSettings, onCountdown); + µb.XAL.keyvalSetOne('remoteBlacklists', userData.filterLists, onCountdown); + µb.XAL.keyvalSetOne('netWhitelist', userData.netWhitelist, onCountdown); + µb.assets.put('assets/user/filters.txt', userData.userFilters, onCountdown); + }; + // If we are going to restore all, might as well wipe out clean local // storage - µb.XAL.keyvalRemoveAll(); - µBlock.saveLocalSettings(); - µb.XAL.keyvalSetMany(userData.userSettings); - µb.XAL.keyvalSetOne('remoteBlacklists', userData.filterLists); - µb.XAL.keyvalSetOne('netWhitelist', userData.netWhitelist); - µb.assets.put('assets/user/filters.txt', userData.userFilters); - µb.XAL.restart(); + µb.XAL.keyvalRemoveAll(onAllRemoved); }; /******************************************************************************/ diff --git a/js/xal.js b/js/xal.js index 51ef83d9a..3ddc6e452 100644 --- a/js/xal.js +++ b/js/xal.js @@ -60,16 +60,16 @@ exports.injectScript = function(id, details) { /******************************************************************************/ -exports.keyvalSetOne = function(key, val) { +exports.keyvalSetOne = function(key, val, callback) { var bin = {}; bin[key] = val; - chrome.storage.local.set(bin); + chrome.storage.local.set(bin, callback || noopFunc); }; /******************************************************************************/ -exports.keyvalSetMany = function(dict) { - chrome.storage.local.set(dict); +exports.keyvalSetMany = function(dict, callback) { + chrome.storage.local.set(dict, callback || noopFunc); }; /******************************************************************************/