[Pkg-mozext-commits] [requestpolicy] 105/280: integrate ObserverManager into Environment
David Prévot
taffit at moszumanska.debian.org
Sat May 2 20:30:07 UTC 2015
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository requestpolicy.
commit 2c9d9443139c3e8d31f2317eb8c6dfaf98393ec6
Author: Martin Kimmerle <dev at 256k.de>
Date: Sun Jan 4 16:34:29 2015 +0100
integrate ObserverManager into Environment
ObserverManager has been converted from a singleton object to a
class and must from now on be bound to an Environment. As the
environment has to be created *before* the ObserverManager, the
Lazy Getter `Environment.obMan` is a convenient method for
getting an ObserverManager for an existing Environment.
---
src/content/lib/environment.jsm | 18 ++++
src/content/lib/observer-manager.jsm | 144 +++++++++++++------------
src/content/lib/request-processor.redirects.js | 4 +-
src/content/lib/requestpolicy-service.jsm | 5 +-
src/content/settings/advancedprefs.js | 2 +-
src/content/settings/basicprefs.js | 2 +-
src/content/settings/common.js | 6 +-
src/content/settings/defaultpolicy.js | 2 +-
src/content/settings/subscriptions.js | 6 +-
src/content/settings/yourpolicy.js | 2 +-
10 files changed, 113 insertions(+), 78 deletions(-)
diff --git a/src/content/lib/environment.jsm b/src/content/lib/environment.jsm
index c22d66b..e4c266f 100644
--- a/src/content/lib/environment.jsm
+++ b/src/content/lib/environment.jsm
@@ -27,6 +27,17 @@ const Cu = Components.utils;
let EXPORTED_SYMBOLS = ["Environment"];
+let globalScope = this;
+
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+XPCOMUtils.defineLazyModuleGetter(globalScope, "ScriptLoader",
+ "chrome://requestpolicy/content/lib/script-loader.jsm");
+XPCOMUtils.defineLazyGetter(globalScope, "ObserverManager", function() {
+ return ScriptLoader.importModule("observer-manager").ObserverManager;
+});
+
+
/**
* The `Environment` class can take care of the "startup" (=initialization) and
@@ -67,6 +78,13 @@ function Environment() {
// The function queues
self.startupFnQueue = [];
self.shutdownFnStack = [];
+
+ // Define a Lazy Getter to get an ObserverManager for this Environment.
+ // Using that Getter is more convenient than doing it manually, as the
+ // Environment has to be created *before* the ObserverManager.
+ XPCOMUtils.defineLazyGetter(self, "obMan", function() {
+ return new ObserverManager(self);
+ });
}
Environment.STATE_SHUT_DOWN = 0;
diff --git a/src/content/lib/observer-manager.jsm b/src/content/lib/observer-manager.jsm
index cef0a1c..efbe16c 100644
--- a/src/content/lib/observer-manager.jsm
+++ b/src/content/lib/observer-manager.jsm
@@ -33,87 +33,99 @@ Cu.import("chrome://requestpolicy/content/lib/script-loader.jsm");
let {ProcessEnvironment} = ScriptLoader.importModule("process-environment");
// Load the Logger at startup-time, not at load-time!
-// ( On load-time Looger might be null. )
+// ( On load-time Logger might be null. )
let Logger;
ProcessEnvironment.enqueueStartupFunction(function() {
Logger = ScriptLoader.importModule("logger").Logger;
});
+
/**
- * The ObserverManager provides an interface to `nsIObserverService` which takes
- * care of unregistering the observed topics.
+ * An instance of this class registers itself to `nsIObserverService` on behalf
+ * of some other object.
*/
-let ObserverManager = (function() {
- let self = {};
-
- /**
- * This Object registers itself to `nsIObserverService` on behalf of some other
- * object.
- */
- function SingleTopicObserver(aTopic, aFunctionToCall) {
- // save the parameters
- this.topic = aTopic;
- // As the `observe` function, take directly the parameter.
- this.observe = aFunctionToCall;
-
- // currently this obserer is not rgistered yet
+function SingleTopicObserver(aTopic, aFunctionToCall) {
+ // save the parameters
+ this.topic = aTopic;
+ // As the `observe` function, take directly the parameter.
+ this.observe = aFunctionToCall;
+
+ // currently this obserer is not rgistered yet
+ this.isRegistered = false;
+
+ // register this observer
+ this.register();
+}
+SingleTopicObserver.prototype.register = function() {
+ if (!this.isRegistered) {
+ Services.obs.addObserver(this, this.topic, false);
+ this.isRegistered = true;
+ }
+};
+SingleTopicObserver.prototype.unregister = function() {
+ if (this.isRegistered) {
+ Services.obs.removeObserver(this, this.topic);
this.isRegistered = false;
-
- // register this observer
- this.register();
}
- SingleTopicObserver.prototype.register = function() {
- if (!this.isRegistered) {
- Services.obs.addObserver(this, this.topic, false);
- this.isRegistered = true;
- }
- };
- SingleTopicObserver.prototype.unregister = function() {
- if (this.isRegistered) {
- Services.obs.removeObserver(this, this.topic);
- this.isRegistered = false;
- }
- };
-
+};
-
- // an object holding all observers for unregistering when unloading the page
- let observers = [];
-
- /**
- * This function can be called from anywhere; the caller hands over an object
- * with the keys being the *topic* and the values being the function that
- * should be called when the topic is observed.
- */
- self.observe = function(aList) {
- for (let topic in aList) {
- if (aList.hasOwnProperty(topic)) {
- observers.push(new SingleTopicObserver(topic, aList[topic]));
- }
+/**
+ * An ObserverManager provides an interface to `nsIObserverService` which takes
+ * care of unregistering the observed topics. Every ObserverManager is bound to
+ * an environment.
+ */
+function ObserverManager(aEnv) {
+ let self = this;
+
+ self.environment = aEnv;
+
+ if (!!aEnv) {
+ self.environment.pushShutdownFunction(function() {
+ self.unregisterAllObservers();
+ });
+ } else {
+ // aEnv is not defined! Try to report an error.
+ if (!!Logger) {
+ Logger.warning(Logger.TYPE_INTERNAL, "No Environment was specified for " +
+ "a new ObserverManager! This means that the observers " +
+ "won't be unregistered!");
}
- };
-
- self.observePrefChanges = self.observe.bind(self,
- "requestpolicy-prefs-changed");
-
-
-
-
+ }
+ // an object holding all observers for unregistering when unloading the page
+ self.observers = [];
+}
- /**
- * The function will unregister all registered observers.
- */
- ProcessEnvironment.pushShutdownFunction(function() {
- while (observers.length > 0) {
- let observer = observers.pop();
- Logger.dump("Unregistering observer for topic " + observer.topic);
- observer.unregister();
+/**
+ * This function can be called from anywhere; the caller hands over an object
+ * with the keys being the *topic* and the values being the function that
+ * should be called when the topic is observed.
+ */
+ObserverManager.prototype.observe = function(aList) {
+ let self = this;
+ for (let topic in aList) {
+ if (aList.hasOwnProperty(topic)) {
+ self.observers.push(new SingleTopicObserver(topic, aList[topic]));
}
- });
+ }
+};
+
+ObserverManager.prototype.observePrefChanges = function(aFunctionToCall) {
+ let self = this;
+ self.observe({"requestpolicy-prefs-changed": aFunctionToCall});
+};
- return self;
-}());
+/**
+ * The function will unregister all registered observers.
+ */
+ObserverManager.prototype.unregisterAllObservers = function() {
+ let self = this;
+ while (self.observers.length > 0) {
+ let observer = self.observers.pop();
+ Logger.dump("Unregistering observer for topic " + observer.topic);
+ observer.unregister();
+ }
+};
diff --git a/src/content/lib/request-processor.redirects.js b/src/content/lib/request-processor.redirects.js
index cd676ee..0644ee9 100644
--- a/src/content/lib/request-processor.redirects.js
+++ b/src/content/lib/request-processor.redirects.js
@@ -36,7 +36,7 @@ ScriptLoader.importModules([
"request",
"request-result",
"http-response",
- "observer-manager"
+ "process-environment"
], this);
ScriptLoader.defineLazyModuleGetters({
"requestpolicy-service": ["rpService"]
@@ -58,7 +58,7 @@ let RequestProcessor = (function(self) {
- ObserverManager.observe({
+ ProcessEnvironment.obMan.observe({
"http-on-examine-response": function(subject) {
examineHttpResponse(subject);
},
diff --git a/src/content/lib/requestpolicy-service.jsm b/src/content/lib/requestpolicy-service.jsm
index 9bfa004..85364de 100644
--- a/src/content/lib/requestpolicy-service.jsm
+++ b/src/content/lib/requestpolicy-service.jsm
@@ -42,8 +42,7 @@ ScriptLoader.importModules([
"utils",
"content-policy",
"constants",
- "process-environment",
- "observer-manager"
+ "process-environment"
], this);
@@ -383,7 +382,7 @@ let rpService = (function() {
}
function register() {
- ObserverManager.observe({
+ ProcessEnvironment.obMan.observe({
"http-on-modify-request": self.observe,
"sessionstore-windows-restored": self.observe,
"private-browsing": self.observe,
diff --git a/src/content/settings/advancedprefs.js b/src/content/settings/advancedprefs.js
index 4879d96..b426b10 100644
--- a/src/content/settings/advancedprefs.js
+++ b/src/content/settings/advancedprefs.js
@@ -135,5 +135,5 @@ function onload() {
);
// call updateDisplay() every time a preference gets changed
- ObserverManager.observePrefChanges(updateDisplay);
+ WinEnv.obMan.observePrefChanges(updateDisplay);
}
diff --git a/src/content/settings/basicprefs.js b/src/content/settings/basicprefs.js
index 6bdb8ac..b89e195 100644
--- a/src/content/settings/basicprefs.js
+++ b/src/content/settings/basicprefs.js
@@ -78,5 +78,5 @@ function onload() {
);
// call updateDisplay() every time a preference gets changed
- ObserverManager.observePrefChanges(updateDisplay);
+ WinEnv.obMan.observePrefChanges(updateDisplay);
}
diff --git a/src/content/settings/common.js b/src/content/settings/common.js
index b4bb872..e864b1d 100644
--- a/src/content/settings/common.js
+++ b/src/content/settings/common.js
@@ -15,9 +15,13 @@ ScriptLoader.importModules([
"subscription",
"policy-manager",
"requestpolicy-service",
- "observer-manager"
+ "environment"
], this);
+// create a new Environment for this window
+var WinEnv = new Environment();
+WinEnv.shutdownOnWindowUnload(content);
+
const COMMON_STRINGS = [
'preferences',
diff --git a/src/content/settings/defaultpolicy.js b/src/content/settings/defaultpolicy.js
index b3aed6c..a89b64b 100644
--- a/src/content/settings/defaultpolicy.js
+++ b/src/content/settings/defaultpolicy.js
@@ -75,5 +75,5 @@ function onload() {
);
// call updateDisplay() every time a preference gets changed
- ObserverManager.observePrefChanges(updateDisplay);
+ WinEnv.obMan.observePrefChanges(updateDisplay);
}
diff --git a/src/content/settings/subscriptions.js b/src/content/settings/subscriptions.js
index 379811e..ae6cbc5 100644
--- a/src/content/settings/subscriptions.js
+++ b/src/content/settings/subscriptions.js
@@ -135,6 +135,8 @@ function onload() {
}
// call updateDisplay() every time a subscription is added or removed
- ObserverManager.observe({SUBSCRIPTION_ADDED_TOPIC: updateDisplay});
- ObserverManager.observe({SUBSCRIPTION_REMOVED_TOPIC: updateDisplay});
+ WinEnv.obMan.observe({
+ SUBSCRIPTION_ADDED_TOPIC: updateDisplay,
+ SUBSCRIPTION_REMOVED_TOPIC: updateDisplay
+ });
}
diff --git a/src/content/settings/yourpolicy.js b/src/content/settings/yourpolicy.js
index 3776639..108e84e 100644
--- a/src/content/settings/yourpolicy.js
+++ b/src/content/settings/yourpolicy.js
@@ -230,7 +230,7 @@ function onload() {
}
// observe rule changes and update the table then
- ObserverManager.observe({
+ WinEnv.obMan.observe({
"requestpolicy-rules-changed": function(subject, topic, data) {
var search = document.getElementById('rulesearch');
populateRuleTable(search.value);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/requestpolicy.git
More information about the Pkg-mozext-commits
mailing list