[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