mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
52356e8a4b
addOneTab uses the existence of a referrer URI to determine where to
position the newly opened tab. Bug 1031264
changed callsites so that a
referrer URI was no longer passed in if the opening link had
rel=noreferrer set on it. This change, then, broke placement of newly
opened tabs if their opening link had rel=noreferrer on it.
Instead of not passing in the referrer URI if rel=noreferrer, let's
instead explicitly tell addOneTab whether rel=noreferrer was present on
the opening link. Then addOneTab can hide the referrer URI from the
actual network request, while still using the referrer URI to determine
tab placement.
86 lines
3.1 KiB
JavaScript
86 lines
3.1 KiB
JavaScript
/* -*- 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";
|
|
|
|
let Cc = Components.classes;
|
|
let Ci = Components.interfaces;
|
|
let 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");
|
|
|
|
let ContentClick = {
|
|
init: function() {
|
|
let mm = Cc["@mozilla.org/globalmessagemanager;1"].getService(Ci.nsIMessageListenerManager);
|
|
mm.addMessageListener("Content:Click", this);
|
|
},
|
|
|
|
receiveMessage: function (message) {
|
|
switch (message.name) {
|
|
case "Content:Click":
|
|
this.contentAreaClick(message.json, message.target)
|
|
break;
|
|
}
|
|
},
|
|
|
|
contentAreaClick: function (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.ownerDocument.defaultView;
|
|
|
|
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, null, null)
|
|
, title: json.title
|
|
, loadBookmarkInSidebar: true
|
|
, hiddenRows: [ "description"
|
|
, "location"
|
|
, "keyword" ]
|
|
}, window);
|
|
return;
|
|
}
|
|
|
|
// Note: We don't need the sidebar code here.
|
|
|
|
// This part is based on handleLinkClick.
|
|
var where = window.whereToOpenLink(json);
|
|
if (where == "current")
|
|
return false;
|
|
|
|
// Todo(903022): code for where == save
|
|
|
|
let params = { charset: browser.characterSet,
|
|
referrerURI: browser.documentURI,
|
|
noReferrer: json.noReferrer };
|
|
window.openLinkIn(json.href, where, params);
|
|
|
|
// 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(href);
|
|
} catch (ex) { /* Skip invalid URIs. */ }
|
|
}
|
|
};
|