summaryrefslogtreecommitdiffstats
path: root/application/basilisk/modules/ContentClick.jsm
diff options
context:
space:
mode:
authorMatt A. Tobin <email@mattatobin.com>2018-02-02 03:32:58 -0500
committerMatt A. Tobin <email@mattatobin.com>2018-02-02 03:32:58 -0500
commite72ef92b5bdc43cd2584198e2e54e951b70299e8 (patch)
tree01ceb4a897c33eca9e7ccf2bc3aefbe530169fe5 /application/basilisk/modules/ContentClick.jsm
parent0d19b77d3eaa5b8d837bf52c19759e68e42a1c4c (diff)
downloadUXP-e72ef92b5bdc43cd2584198e2e54e951b70299e8.tar
UXP-e72ef92b5bdc43cd2584198e2e54e951b70299e8.tar.gz
UXP-e72ef92b5bdc43cd2584198e2e54e951b70299e8.tar.lz
UXP-e72ef92b5bdc43cd2584198e2e54e951b70299e8.tar.xz
UXP-e72ef92b5bdc43cd2584198e2e54e951b70299e8.zip
Add Basilisk
Diffstat (limited to 'application/basilisk/modules/ContentClick.jsm')
-rw-r--r--application/basilisk/modules/ContentClick.jsm97
1 files changed, 97 insertions, 0 deletions
diff --git a/application/basilisk/modules/ContentClick.jsm b/application/basilisk/modules/ContentClick.jsm
new file mode 100644
index 000000000..451d31d6a
--- /dev/null
+++ b/application/basilisk/modules/ContentClick.jsm
@@ -0,0 +1,97 @@
+/* -*- mode: js; indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+var Cc = Components.classes;
+var Ci = Components.interfaces;
+var Cu = Components.utils;
+
+this.EXPORTED_SYMBOLS = [ "ContentClick" ];
+
+Cu.import("resource:///modules/PlacesUIUtils.jsm");
+Cu.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
+Cu.import("resource://gre/modules/Services.jsm");
+
+var ContentClick = {
+ init() {
+ let mm = Cc["@mozilla.org/globalmessagemanager;1"].getService(Ci.nsIMessageListenerManager);
+ mm.addMessageListener("Content:Click", this);
+ },
+
+ receiveMessage(message) {
+ switch (message.name) {
+ case "Content:Click":
+ this.contentAreaClick(message.json, message.target)
+ break;
+ }
+ },
+
+ contentAreaClick(json, browser) {
+ // This is heavily based on contentAreaClick from browser.js (Bug 903016)
+ // The json is set up in a way to look like an Event.
+ let window = browser.ownerGlobal;
+
+ if (!json.href) {
+ // Might be middle mouse navigation.
+ if (Services.prefs.getBoolPref("middlemouse.contentLoadURL") &&
+ !Services.prefs.getBoolPref("general.autoScroll")) {
+ window.middleMousePaste(json);
+ }
+ return;
+ }
+
+ if (json.bookmark) {
+ // This is the Opera convention for a special link that, when clicked,
+ // allows to add a sidebar panel. The link's title attribute contains
+ // the title that should be used for the sidebar panel.
+ PlacesUIUtils.showBookmarkDialog({ action: "add"
+ , type: "bookmark"
+ , uri: Services.io.newURI(json.href)
+ , title: json.title
+ , loadBookmarkInSidebar: true
+ , hiddenRows: [ "description"
+ , "location"
+ , "keyword" ]
+ }, window);
+ return;
+ }
+
+ // Note: We don't need the sidebar code here.
+
+ // Mark the page as a user followed link. This is done so that history can
+ // distinguish automatic embed visits from user activated ones. For example
+ // pages loaded in frames are embed visits and lost with the session, while
+ // visits across frames should be preserved.
+ try {
+ if (!PrivateBrowsingUtils.isWindowPrivate(window))
+ PlacesUIUtils.markPageAsFollowedLink(json.href);
+ } catch (ex) { /* Skip invalid URIs. */ }
+
+ // This part is based on handleLinkClick.
+ var where = window.whereToOpenLink(json);
+ if (where == "current")
+ return;
+
+ // Todo(903022): code for where == save
+
+ let params = {
+ charset: browser.characterSet,
+ referrerURI: browser.documentURI,
+ referrerPolicy: json.referrerPolicy,
+ noReferrer: json.noReferrer,
+ allowMixedContent: json.allowMixedContent,
+ isContentWindowPrivate: json.isContentWindowPrivate,
+ originPrincipal: json.originPrincipal,
+ };
+
+ // The new tab/window must use the same userContextId.
+ if (json.originAttributes.userContextId) {
+ params.userContextId = json.originAttributes.userContextId;
+ }
+
+ window.openLinkIn(json.href, where, params);
+ }
+};