Bug 1515073 - Part 3 - Add support for skipping session entries without user interaction on desktop. r=JanH,Gijs

Depends on D27586

Differential Revision: https://phabricator.services.mozilla.com/D27587
This commit is contained in:
Johann Hofmann
2020-06-09 14:50:18 +00:00
parent 210b8937d3
commit fb76d2ce00
6 changed files with 44 additions and 8 deletions

View File

@@ -1693,6 +1693,12 @@ pref("browser.tabs.crashReporting.requestEmail", false);
pref("browser.tabs.crashReporting.emailMe", false); pref("browser.tabs.crashReporting.emailMe", false);
pref("browser.tabs.crashReporting.email", ""); pref("browser.tabs.crashReporting.email", "");
#ifdef NIGHTLY_BUILD
pref("browser.navigation.requireUserInteraction", true);
#else
pref("browser.navigation.requireUserInteraction", false);
#endif
// If true, unprivileged extensions may use experimental APIs on // If true, unprivileged extensions may use experimental APIs on
// nightly and developer edition. // nightly and developer edition.
pref("extensions.experiments.enabled", false); pref("extensions.experiments.enabled", false);

View File

@@ -4549,6 +4549,17 @@ function FillHistoryMenu(aParent) {
for (let j = end - 1; j >= start; j--) { for (let j = end - 1; j >= start; j--) {
let entry = sessionHistory.entries[j]; let entry = sessionHistory.entries[j];
// Explicitly check for "false" to stay backwards-compatible with session histories
// from before the hasUserInteraction was implemented.
if (
BrowserUtils.navigationRequireUserInteraction &&
entry.hasUserInteraction === false &&
// Always allow going to the first and last navigation points.
j != end - 1 &&
j != start
) {
continue;
}
let uri = entry.url; let uri = entry.url;
let item = let item =

View File

@@ -441,12 +441,12 @@
return this.selectedBrowser.canGoForward; return this.selectedBrowser.canGoForward;
}, },
goBack() { goBack(requireUserInteraction) {
return this.selectedBrowser.goBack(); return this.selectedBrowser.goBack(requireUserInteraction);
}, },
goForward() { goForward(requireUserInteraction) {
return this.selectedBrowser.goForward(); return this.selectedBrowser.goForward(requireUserInteraction);
}, },
reload() { reload() {

View File

@@ -208,8 +208,9 @@ class SessionHistoryListener extends Handler {
} }
OnHistoryNewEntry(newURI, oldIndex) { OnHistoryNewEntry(newURI, oldIndex) {
// We ought to collect the previously current entry as well, see bug 1350567. // Collect the current entry as well, to make sure to collect any changes
this.collectFrom(oldIndex); // that were made to the entry while the document was active.
this.collectFrom(oldIndex == -1 ? oldIndex : oldIndex - 1);
} }
OnHistoryGotoIndex() { OnHistoryGotoIndex() {

View File

@@ -14,6 +14,10 @@
"resource://gre/modules/AppConstants.jsm" "resource://gre/modules/AppConstants.jsm"
); );
const { BrowserUtils } = ChromeUtils.import(
"resource://gre/modules/BrowserUtils.jsm"
);
let LazyModules = {}; let LazyModules = {};
ChromeUtils.defineModuleGetter( ChromeUtils.defineModuleGetter(
@@ -855,7 +859,9 @@
} }
} }
goBack(requireUserInteraction = false) { goBack(
requireUserInteraction = BrowserUtils.navigationRequireUserInteraction
) {
var webNavigation = this.webNavigation; var webNavigation = this.webNavigation;
if (webNavigation.canGoBack) { if (webNavigation.canGoBack) {
this._wrapURIChangeCall(() => this._wrapURIChangeCall(() =>
@@ -864,7 +870,9 @@
} }
} }
goForward(requireUserInteraction = false) { goForward(
requireUserInteraction = BrowserUtils.navigationRequireUserInteraction
) {
var webNavigation = this.webNavigation; var webNavigation = this.webNavigation;
if (webNavigation.canGoForward) { if (webNavigation.canGoForward) {
this._wrapURIChangeCall(() => this._wrapURIChangeCall(() =>

View File

@@ -8,6 +8,9 @@
var EXPORTED_SYMBOLS = ["BrowserUtils"]; var EXPORTED_SYMBOLS = ["BrowserUtils"];
const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm"); const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
const { XPCOMUtils } = ChromeUtils.import(
"resource://gre/modules/XPCOMUtils.jsm"
);
ChromeUtils.defineModuleGetter( ChromeUtils.defineModuleGetter(
this, this,
"PlacesUtils", "PlacesUtils",
@@ -959,3 +962,10 @@ var BrowserUtils = {
return bag; return bag;
}, },
}; };
XPCOMUtils.defineLazyPreferenceGetter(
BrowserUtils,
"navigationRequireUserInteraction",
"browser.navigation.requireUserInteraction",
false
);