[Pkg-mozext-commits] [tabmixplus] 41/107: [e10s] Add content script to handle drop event, open new tab when url dropped on locked tab content

David Prévot taffit at moszumanska.debian.org
Tue Dec 29 19:02:48 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository tabmixplus.

commit 0dad42ed626e88b65da94c6f1cc065ec49ad9e91
Author: onemen <tabmix.onemen at gmail.com>
Date:   Fri Oct 30 19:03:23 2015 +0200

    [e10s] Add content script to handle drop event, open new tab when url dropped on locked tab content
---
 chrome/content/content.js      | 36 ++++++++++++++++++++++++++++++++++--
 chrome/content/minit/tablib.js | 20 +++++++++++++-------
 modules/Utils.jsm              | 15 +++++++++++++++
 3 files changed, 62 insertions(+), 9 deletions(-)

diff --git a/chrome/content/content.js b/chrome/content/content.js
index f5e3d1b..068a4a9 100644
--- a/chrome/content/content.js
+++ b/chrome/content/content.js
@@ -27,6 +27,9 @@ XPCOMUtils.defineLazyModuleGetter(this, "TabmixUtils",
 
 var self = this;
 
+var PROCESS_TYPE_CONTENT = TabmixSvc.version(380) &&
+    Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT;
+
 var TabmixContentHandler = {
   MESSAGES: [
     "Tabmix:restorePermissions",
@@ -47,6 +50,10 @@ var TabmixContentHandler = {
     // Send a CPOW to the parent so that it can synchronously request
     // docShell capabilities.
     sendSyncMessage("Tabmix:SetSyncHandler", {}, {syncHandler: this});
+
+    if (PROCESS_TYPE_CONTENT) {
+      addEventListener("drop", this.onDrop);
+    }
   },
 
   receiveMessage: function({name, data}) {
@@ -134,14 +141,39 @@ var TabmixContentHandler = {
   wrapNode: function(node) {
     let window = TabmixClickEventHandler._focusedWindow;
     return LinkNodeUtils.wrap(node, window);
+  },
+
+  onDrop: function(event) {
+    let uri, name = { };
+    let linkHandler = Cc["@mozilla.org/content/dropped-link-handler;1"].
+    getService(Ci.nsIDroppedLinkHandler);
+    try {
+      // Pass true to prevent the dropping of javascript:/data: URIs
+      uri = linkHandler.dropLink(event, name, true);
+    } catch (ex) {
+      return;
+    }
+    let data = {
+      json: {
+        dataTransfer: {dropEffect: event.dataTransfer.dropEffect},
+        ctrlKey: event.ctrlKey, metaKey: event.metaKey,
+        shiftKey: event.shiftKey, altKey: event.altKey
+      },
+      uri: uri, name: name.value
+    };
+    let result = sendSyncMessage("Tabmix:contentDrop", data);
+    if (result[0]) {
+      event.stopPropagation();
+      event.preventDefault();
+    }
   }
 };
 
 var TabmixClickEventHandler = {
   init: function init() {
-    if (TabmixSvc.version(380) &&
-        Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT)
+    if (PROCESS_TYPE_CONTENT) {
       self.addEventListener("click", this, true);
+    }
   },
 
   handleEvent: function(event) {
diff --git a/chrome/content/minit/tablib.js b/chrome/content/minit/tablib.js
index 39064bc..cb9c48b 100644
--- a/chrome/content/minit/tablib.js
+++ b/chrome/content/minit/tablib.js
@@ -1903,22 +1903,28 @@ var tablib = { // eslint-disable-line
     return canClose;
   },
 
-  contentAreaOnDrop: function TMP_contentAreaOnDrop(aEvent, aUri, aPostData) {
-    var where;
-    var browser = gBrowser.selectedBrowser;
+  whereToOpenDrop: function(aEvent, aUri) {
+    let browser = gBrowser.selectedBrowser;
+    let where = "current";
     if (aUri != browser.currentURI.spec) {
       let tab = gBrowser.mCurrentTab;
       let isCopy = "dataTransfer" in aEvent ?
-                   (aEvent.dataTransfer.dropEffect == "copy") :
-                   (aEvent.ctrlKey || aEvent.metaKey);
+          TMP_tabDNDObserver.isCopyDropEffect(aEvent.dataTransfer, aEvent, 0) :
+          (aEvent.ctrlKey || aEvent.metaKey);
       if (!isCopy && tab.getAttribute("locked") &&
           !gBrowser.isBlankNotBusyTab(tab) &&
           !Tabmix.ContentClick.isUrlForDownload(aUri)) {
         where = "tab";
       }
-      else
-        browser.tabmix_allowLoad = true;
     }
+    if (where == "current") {
+      browser.tabmix_allowLoad = true;
+    }
+    return where;
+  },
+
+  contentAreaOnDrop: function TMP_contentAreaOnDrop(aEvent, aUri, aPostData) {
+    let where = aEvent.tabmixContentDrop || this.whereToOpenDrop(aEvent, aUri);
     if (where == "tab")
       gBrowser.loadOneTab(aUri, null, null, aPostData, false, false);
     else
diff --git a/modules/Utils.jsm b/modules/Utils.jsm
index eeb1b58..4cbfaf0 100644
--- a/modules/Utils.jsm
+++ b/modules/Utils.jsm
@@ -11,6 +11,7 @@ const FMM_MESSAGES = [
   "Tabmix:updateScrollPosition",
   "Tabmix:reloadTab",
   "Tabmix:getOpener",
+  "Tabmix:contentDrop",
 ];
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
@@ -66,6 +67,20 @@ this.TabmixUtils = {
         tab = win.gBrowser.getTabForBrowser(browser);
         MergeWindows.moveTabsFromPopups(null, tab, message.objects.opener);
         break;
+      case "Tabmix:contentDrop": {
+        let {json, uri, name} = message.data;
+        win = browser.ownerDocument.defaultView;
+        let where = win.tablib.whereToOpenDrop(json, uri);
+        if (where == "tab") {
+          // handleDroppedLink call preventDefault
+          json.preventDefault = function() {};
+          json.tabmixContentDrop = "tab";
+          browser.droppedLinkHandler(json, uri, name);
+          // prevent default
+          return true;
+        }
+        return false;
+      }
     }
   },
 

-- 
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