summaryrefslogtreecommitdiff
path: root/src/content/content.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/content/content.js')
-rw-r--r--src/content/content.js27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/content/content.js b/src/content/content.js
index 2f10d5a..8f772b1 100644
--- a/src/content/content.js
+++ b/src/content/content.js
@@ -3,23 +3,30 @@
// debug = () => {}; // REL_ONLY
{
let listenersMap = new Map();
+ let backlog = new Set();
var ns = {
on(eventName, listener) {
let listeners = listenersMap.get(eventName);
if (!listeners) listenersMap.set(eventName, listeners = new Set());
listeners.add(listener);
+ if (backlog.has(eventName)) this.fire(eventName, listener);
},
detach(eventName, listener) {
let listeners = listenersMap.get(eventName);
if (listeners) listeners.delete(listener);
},
- fire(eventName) {
+ fire(eventName, listener = null) {
+ if (listener) {
+ listener({type:eventName, source: this});
+ return;
+ }
let listeners = listenersMap.get(eventName);
if (listeners) {
for (let l of listeners) {
- l(this);
+ this.fire(eventName, l);
}
}
+ backlog.add(eventName);
},
setup(DEFAULT, MARKER) {
this.perms.DEFAULT = DEFAULT;
@@ -36,10 +43,10 @@
let tabInfoRx = new RegExp(`^${MARKER}\\[([^]*?)\\]${MARKER},`);
if (top === window) { // wrap to hide
Reflect.defineProperty(top.wrappedJSObject, "name", {
- get: exportFunction(() => _name.replace(eraseTabInfoRx, ""), top.wrappedJSObject),
+ get: exportFunction(() => top.name.replace(eraseTabInfoRx, ""), top.wrappedJSObject),
set: exportFunction(value => {
- let preamble = _name.match(tabInfoRx);
- _name = `${preamble && preamble[0] || ""}${value}`;
+ let preamble = top.name.match(tabInfoRx);
+ top.name = `${preamble && preamble[0] || ""}${value}`;
return value;
}, top.wrappedJSObject)
});
@@ -57,14 +64,14 @@
}
ns.fire("perms");
},
- storeTabInfo(info) {
- let {MARKER} = this.perms;
- window.name = `${MARKER}${JSON.stringify([info])}${MARKER},${window.name.split(marker).pop()}`;
- },
- perms: { DEFAULT: null, CURRENT: null, tabInfo: {} },
+ perms: { DEFAULT: null, CURRENT: null, tabInfo: {}, MARKER: "" },
allows(cap) {
let perms = this.perms.CURRENT;
return perms && perms.capabilities.includes(cap);
+ },
+ getWindowName() {
+ return top !== window || !this.perms.MARKER ? window.name
+ : window.name.split(this.perms.MARKER + ",").pop();
}
}
}