Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: adblockplus/Api.jsm

Issue 29350065: Issue 2853 - Settings changes are sometimes not saved if the user quits the app (Closed)
Patch Set: Created Aug. 23, 2016, 12:39 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: adblockplus/Api.jsm
===================================================================
--- a/adblockplus/Api.jsm
+++ b/adblockplus/Api.jsm
@@ -32,23 +32,72 @@ function require(module)
{
let result = {};
result.wrappedJSObject = result;
Services.obs.notifyObservers(result, "adblockplus-require", module);
return result.exports;
}
let {Filter} = require("filterClasses");
+let {FilterNotifier} = require("filterNotifier");
anton 2016/09/30 06:51:03 Please make sure it does not interfere with https:
diegocarloslima 2016/10/26 13:48:04 Yes, they don't conflict to each other, altough th
let {FilterStorage} = require("filterStorage");
let {defaultMatcher} = require("matcher");
let {Prefs} = require("prefs");
let {Subscription, SpecialSubscription, RegularSubscription, DownloadableSubscription, ExternalSubscription} = require("subscriptionClasses");
let {Synchronizer} = require("synchronizer");
let {UI} = require("ui");
+let shouldSaveFiltersPref = "should_save_filters";
+
+function initListeners()
+{
+ FilterNotifier.on("filter.added", onFiltersChanged);
+ FilterNotifier.on("filter.removed", onFiltersChanged);
+ FilterNotifier.on("subscription.added", onFiltersChanged);
+ FilterNotifier.on("subscription.removed", onFiltersChanged);
+ FilterNotifier.on("save", onSave);
+}
+
+function onFiltersChanged()
+{
+ setBoolPref(shouldSaveFiltersPref, true);
+}
+
+function onSave()
+{
+ setBoolPref(shouldSaveFiltersPref, false);
+}
+
+function getBoolPref(name)
+{
+ let branch = getPrefsBranch();
+ try
+ {
+ return branch.getBoolPref(name);
+ }
+ catch (e)
+ {
+ return null;
+ }
+}
+
+function setBoolPref(name, value)
+{
+ let branch = getPrefsBranch();
+ branch.setBoolPref(name, value);
+ Services.prefs.savePrefFile(null);
+}
+
+function getPrefsBranch()
+{
+ let {addonRoot, addonName} = require("info");
+ let branchName = "extensions." + addonName + ".";
+ return Services.prefs.getBranch(branchName);
+}
+
function getWhitelistingFilter(url)
{
let uriObject = Services.io.newURI(url, null, null);
try
{
return defaultMatcher.whitelist.matchesAny(
uriObject.spec, "DOCUMENT", uriObject.host, false, null);
}
@@ -59,16 +108,20 @@ function getWhitelistingFilter(url)
}
var AdblockPlusApi =
{
get filtersLoaded()
{
return !FilterStorage._loading;
},
+ get requestsSaved()
+ {
+ return !getBoolPref(shouldSaveFiltersPref) && !FilterStorage._saving && !FilterStorage._needsSave;
+ },
get acceptableAdsEnabled()
{
return FilterStorage.subscriptions.some(
(subscription) => subscription.url == Prefs.subscriptions_exceptionsurl);
},
set acceptableAdsEnabled(acceptableAdsEnabled)
{
if (acceptableAdsEnabled != AdblockPlusApi.acceptableAdsEnabled)
@@ -157,29 +210,33 @@ var AdblockPlusApi =
if (filter.subscriptions.length)
filter.disabled = true;
filter = getWhitelistingFilter(url);
}
}
},
initCommunication: function()
{
+ initListeners();
+
Messaging.addListener((function(data)
{
if (!data)
return {"success": false, "error": "malformed request"};
if (data["action"] == "getFiltersLoaded")
return {"success": true, "value": this.filtersLoaded};
if (!this.filtersLoaded)
return {"success": false, "error": "filters not loaded"};
switch (data["action"])
{
+ case "getRequestsSaved":
+ return {"success": true, "value": this.requestsSaved};
case "getAcceptableAdsEnabled":
return {"success": true, "value": this.acceptableAdsEnabled};
case "setAcceptableAdsEnabled":
if ("enable" in data)
{
this.acceptableAdsEnabled = !!data["enable"];
return {"success": true};
}

Powered by Google App Engine
This is Rietveld