[Pkg-mozext-commits] [tabmixplus] 20/123: [e10s] Add maps from a <browser> element to a CPOW that gives synchronous access to docShell capabilities
David Prévot
taffit at moszumanska.debian.org
Wed Sep 17 21:16:23 UTC 2014
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository tabmixplus.
commit f0f2ec7f3a6cb8c1490006b2627c8e96cd51c6dd
Author: onemen <tabmix.onemen at gmail.com>
Date: Fri Aug 15 09:59:55 2014 +0300
[e10s] Add maps from a <browser> element to a CPOW that gives synchronous access to docShell capabilities
---
chrome/content/content.js | 8 ++++++++
modules/DocShellCapabilities.jsm | 31 +++++++++++++++++++++++--------
2 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/chrome/content/content.js b/chrome/content/content.js
index 7d2d1cf..478327c 100644
--- a/chrome/content/content.js
+++ b/chrome/content/content.js
@@ -19,6 +19,10 @@ let MessageListener = {
init: function () {
this.MESSAGES.forEach(m => addMessageListener(m, this));
+
+ // Send a CPOW to the parent so that it can synchronously request
+ // docShell capabilities.
+ sendSyncMessage("Tabmix:SetSyncHandler", {}, {syncHandler: this});
},
receiveMessage: function ({name, data}) {
@@ -36,6 +40,10 @@ let MessageListener = {
sendSyncMessage("Tabmix:collectPermissionsComplete", {caps: caps});
break;
}
+ },
+
+ getCapabilities: function() {
+ return DocShellCapabilities.collect(docShell).join(",") || "";
}
};
diff --git a/modules/DocShellCapabilities.jsm b/modules/DocShellCapabilities.jsm
index e430801..0e3b9f2 100644
--- a/modules/DocShellCapabilities.jsm
+++ b/modules/DocShellCapabilities.jsm
@@ -16,6 +16,7 @@ this.DocShellCapabilities = {
this.useFrameScript = TabmixSvc.version(320);
if (this.useFrameScript) {
let mm = window.getGroupMessageManager("browsers");
+ mm.addMessageListener("Tabmix:SetSyncHandler", this);
mm.addMessageListener("Tabmix:restoPermissionsComplete", this);
mm.loadFrameScript("chrome://tabmixplus/content/content.js", true);
}
@@ -24,29 +25,43 @@ this.DocShellCapabilities = {
deinit: function(window) {
if (this.useFrameScript) {
let mm = window.getGroupMessageManager("browsers");
+ mm.removeMessageListener("Tabmix:SetSyncHandler", this);
mm.removeMessageListener("Tabmix:restoPermissionsComplete", this);
}
},
+ _syncHandlers: new WeakMap(),
+
receiveMessage: function(message) {
- if (message.name == "Tabmix:restoPermissionsComplete") {
- let browser = message.target;
- if (message.data.reload)
- browser.reload();
- else {
+ let browser = message.target;
+ switch (message.name) {
+ case "Tabmix:SetSyncHandler":
+ this._syncHandlers.set(browser.permanentKey, message.objects.syncHandler);
+ break;
+ case "Tabmix:restoPermissionsComplete":
// Update the persistent tab state cache
TabStateCache.update(browser, {
disallow: message.data.disallow || null
});
- }
+ if (message.data.reload)
+ browser.reload();
+ break;
}
},
caps: ["Images","Subframes","MetaRedirects","Plugins","Javascript"],
collect: function(tab) {
- let state = TabmixSvc.ss.getTabState(tab);
- return TabmixSvc.JSON.parse(state).disallow || "";
+ let browser = tab.linkedBrowser;
+
+ if (!this.useFrameScript)
+ return this.caps.filter(function(cap) !browser.docShell["allow" + cap]);
+
+ try {
+ let handler = this._syncHandlers.get(browser.permanentKey);
+ return handler.getCapabilities();
+ } catch(ex) { }
+ return "";
},
restore: function(tab, disallow, reload) {
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/tabmixplus.git
More information about the Pkg-mozext-commits
mailing list