diff options
Diffstat (limited to 'toolkit/actors/AutoScrollParent.sys.mjs')
-rw-r--r-- | toolkit/actors/AutoScrollParent.sys.mjs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/toolkit/actors/AutoScrollParent.sys.mjs b/toolkit/actors/AutoScrollParent.sys.mjs new file mode 100644 index 0000000000..1f9f780902 --- /dev/null +++ b/toolkit/actors/AutoScrollParent.sys.mjs @@ -0,0 +1,48 @@ +/* vim: set ts=2 sw=2 sts=2 et tw=80: */ +/* 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/. */ + +export class AutoScrollParent extends JSWindowActorParent { + receiveMessage(msg) { + let browser = this.manager.browsingContext.top.embedderElement; + if (!browser) { + return null; + } + + // If another tab is activated, we shouldn't start autoscroll requested + // for the previous active window if and only if the browser is a remote + // browser. This is required for web apps which don't prevent default of + // middle click after opening a new window. If the active tab is our + // documents like about:*, we don't need this check since our documents + // should do it correctly. + const requestedInForegroundTab = browser.isRemoteBrowser + ? Services.focus.focusedElement == browser + : true; + + let data = msg.data; + switch (msg.name) { + case "Autoscroll:Start": + // Don't start autoscroll if the tab has already been a background tab. + if (!requestedInForegroundTab) { + return Promise.resolve({ autoscrollEnabled: false, usingAPZ: false }); + } + return Promise.resolve(browser.startScroll(data)); + case "Autoscroll:MaybeStartInParent": + // Don't start autoscroll if the tab has already been a background tab. + if (!requestedInForegroundTab) { + return Promise.resolve({ autoscrollEnabled: false, usingAPZ: false }); + } + let parent = this.browsingContext.parent; + if (parent) { + let actor = parent.currentWindowGlobal.getActor("AutoScroll"); + actor.sendAsyncMessage("Autoscroll:MaybeStart", data); + } + break; + case "Autoscroll:Cancel": + browser.cancelScroll(); + break; + } + return null; + } +} |