From da4c7e7ed675c3bf405668739c3012d140856109 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 15 May 2024 05:34:42 +0200 Subject: Adding upstream version 126.0. Signed-off-by: Daniel Baumann --- .../android/actors/GeckoViewContentChild.sys.mjs | 85 ++++++++++------------ 1 file changed, 37 insertions(+), 48 deletions(-) (limited to 'mobile/android/actors') diff --git a/mobile/android/actors/GeckoViewContentChild.sys.mjs b/mobile/android/actors/GeckoViewContentChild.sys.mjs index 97691c97fd..50d799e131 100644 --- a/mobile/android/actors/GeckoViewContentChild.sys.mjs +++ b/mobile/android/actors/GeckoViewContentChild.sys.mjs @@ -23,7 +23,6 @@ const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { PrivacyFilter: "resource://gre/modules/sessionstore/PrivacyFilter.sys.mjs", SessionHistory: "resource://gre/modules/sessionstore/SessionHistory.sys.mjs", - Utils: "resource://gre/modules/sessionstore/Utils.sys.mjs", }); export class GeckoViewContentChild extends GeckoViewActorChild { @@ -154,36 +153,7 @@ export class GeckoViewContentChild extends GeckoViewActorChild { }, "apz-repaints-flushed"); }; - const { force } = message.data; - - let gotResize = false; - const onResize = function () { - gotResize = true; - if (dwu.isMozAfterPaintPending) { - contentWindow.windowRoot.addEventListener( - "MozAfterPaint", - () => zoomToFocusedInput(), - { capture: true, once: true } - ); - } else { - zoomToFocusedInput(); - } - }; - - contentWindow.addEventListener("resize", onResize, { capture: true }); - - // When the keyboard is displayed, we can get one resize event, - // multiple resize events, or none at all. Try to handle all these - // cases by allowing resizing within a set interval, and still zoom to - // input if there is no resize event at the end of the interval. - contentWindow.setTimeout(() => { - contentWindow.removeEventListener("resize", onResize, { - capture: true, - }); - if (!gotResize && force) { - onResize(); - } - }, 500); + zoomToFocusedInput(); break; } case "RestoreSessionState": { @@ -271,29 +241,48 @@ export class GeckoViewContentChild extends GeckoViewActorChild { const { contentWindow } = this; const { formdata, scrolldata } = message.data; - if (formdata) { - lazy.Utils.restoreFrameTreeData( - contentWindow, - formdata, - (frame, data) => { - // restore() will return false, and thus abort restoration for the - // current |frame| and its descendants, if |data.url| is given but - // doesn't match the loaded document's URL. - return SessionStoreUtils.restoreFormData(frame.document, data); + /** + * Restores frame tree |data|, starting at the given root |frame|. As the + * function recurses into descendant frames it will call cb(frame, data) for + * each frame it encounters, starting with the given root. + */ + function restoreFrameTreeData(frame, data, cb) { + // Restore data for the root frame. + // The callback can abort by returning false. + if (cb(frame, data) === false) { + return; + } + + if (!data.hasOwnProperty("children")) { + return; + } + + // Recurse into child frames. + SessionStoreUtils.forEachNonDynamicChildFrame( + frame, + (subframe, index) => { + if (data.children[index]) { + restoreFrameTreeData(subframe, data.children[index], cb); + } } ); } + if (formdata) { + restoreFrameTreeData(contentWindow, formdata, (frame, data) => { + // restore() will return false, and thus abort restoration for the + // current |frame| and its descendants, if |data.url| is given but + // doesn't match the loaded document's URL. + return SessionStoreUtils.restoreFormData(frame.document, data); + }); + } + if (scrolldata) { - lazy.Utils.restoreFrameTreeData( - contentWindow, - scrolldata, - (frame, data) => { - if (data.scroll) { - SessionStoreUtils.restoreScrollPosition(frame, data); - } + restoreFrameTreeData(contentWindow, scrolldata, (frame, data) => { + if (data.scroll) { + SessionStoreUtils.restoreScrollPosition(frame, data); } - ); + }); } if (scrolldata && scrolldata.zoom && scrolldata.zoom.displaySize) { -- cgit v1.2.3