Skip to content
This repository was archived by the owner on Sep 21, 2021. It is now read-only.

Commit 7f085e5

Browse files
committed
Add an ObserverService on Services.obs
1 parent 9ea8e38 commit 7f085e5

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

packages/devtools-services/index.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -498,6 +498,33 @@ PrefBranch.prototype = {
498498
},
499499
};
500500

501+
class ObserverService {
502+
constructor() {
503+
this._observers = new Map();
504+
}
505+
506+
addObserver(observer, topic) {
507+
const topicObservers = this._observers.get(topic) || [];
508+
this._observers.set(topic, topicObservers.concat(observer));
509+
}
510+
511+
removeObserver(observer, topic) {
512+
let topicObservers = this._observers.get(topic) || [];
513+
topicObservers = topicObservers.filter(obs => obs != observer);
514+
if (topicObservers.length === 0) {
515+
this._observers.delete(topic);
516+
} else {
517+
this._observers.set(topic, topicObservers.concat(observer));
518+
}
519+
}
520+
521+
notifyObservers(topic, data) {
522+
for (const observer of this._observers.get(topic) || []) {
523+
observer(data);
524+
}
525+
}
526+
}
527+
501528
window.telemetry = {}
502529
window.telemetry.histograms = {}
503530
window.telemetry.scalars = {}
@@ -524,6 +551,12 @@ const Services = {
524551
return this._prefs;
525552
},
526553

554+
555+
/**
556+
* An implementation of nsIObserverService.
557+
*/
558+
obs: new ObserverService(),
559+
527560
/**
528561
* An implementation of Services.appinfo that holds just the
529562
* properties needed by devtools.

0 commit comments

Comments
 (0)