[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