diff options
Diffstat (limited to 'mobile/android/components')
5 files changed, 86 insertions, 4 deletions
diff --git a/mobile/android/components/extensions/ext-android.js b/mobile/android/components/extensions/ext-android.js index 4524c4529b..13f91fb617 100644 --- a/mobile/android/components/extensions/ext-android.js +++ b/mobile/android/components/extensions/ext-android.js @@ -129,8 +129,7 @@ class WindowTracker extends WindowTrackerBase { getCurrentWindow(context) { // In GeckoView the popup is on a separate window so getCurrentWindow for // the popup should return whatever is the topWindow. - // TODO: Bug 1651506 use context?.viewType === "popup" instead - if (context?.currentWindow?.moduleManager.settings.isPopup) { + if (context?.viewType === "popup") { return this.topWindow; } return super.getCurrentWindow(context); @@ -283,6 +282,18 @@ class TabTracker extends TabTrackerBase { }; } + getBrowserDataForContext(context) { + if (["tab", "background"].includes(context.viewType)) { + return this.getBrowserData(context.xulBrowser); + } else if (context.viewType === "popup") { + const chromeWindow = windowTracker.getCurrentWindow(context); + const windowId = chromeWindow ? windowTracker.getId(chromeWindow) : -1; + return { tabId: -1, windowId }; + } + + return { tabId: -1, windowId: -1 }; + } + get activeTab() { const window = windowTracker.topWindow; if (window) { @@ -467,8 +478,7 @@ class Window extends WindowBase { isCurrentFor(context) { // In GeckoView the popup is on a separate window so the current window for // the popup is whatever is the topWindow. - // TODO: Bug 1651506 use context?.viewType === "popup" instead - if (context?.currentWindow?.moduleManager.settings.isPopup) { + if (context?.viewType === "popup") { return mobileWindowTracker.topWindow == this.window; } return super.isCurrentFor(context); diff --git a/mobile/android/components/geckoview/GeckoViewStartup.sys.mjs b/mobile/android/components/geckoview/GeckoViewStartup.sys.mjs index e8114b7581..4483941f8e 100644 --- a/mobile/android/components/geckoview/GeckoViewStartup.sys.mjs +++ b/mobile/android/components/geckoview/GeckoViewStartup.sys.mjs @@ -243,6 +243,10 @@ export class GeckoViewStartup { }); ChromeUtils.importESModule( + "resource://gre/modules/MemoryNotificationDB.sys.mjs" + ); + + ChromeUtils.importESModule( "resource://gre/modules/NotificationDB.sys.mjs" ); diff --git a/mobile/android/components/geckoview/SessionStoreFunctions.sys.mjs b/mobile/android/components/geckoview/SessionStoreFunctions.sys.mjs new file mode 100644 index 0000000000..16acc2789f --- /dev/null +++ b/mobile/android/components/geckoview/SessionStoreFunctions.sys.mjs @@ -0,0 +1,61 @@ +/* -*- 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/. */ +import { GeckoViewSessionStore } from "resource://gre/modules/GeckoViewSessionStore.sys.mjs"; + +export class SessionStoreFunctions { + UpdateSessionStore( + aBrowser, + aBrowsingContext, + aPermanentKey, + aEpoch, + aCollectSHistory, + aData + ) { + return GeckoViewSessionStoreFuncInternal.updateSessionStore( + aBrowser, + aBrowsingContext, + aPermanentKey, + aEpoch, + aCollectSHistory, + aData + ); + } +} + +var GeckoViewSessionStoreFuncInternal = { + updateSessionStore: function SSF_updateSessionStore( + aBrowser, + aBrowsingContext, + aPermanentKey, + aEpoch, + aCollectSHistory, + aData + ) { + const { formdata, scroll } = aData; + + if (formdata) { + aData.formdata = formdata.toJSON(); + } + + if (scroll) { + aData.scroll = scroll.toJSON(); + } + + GeckoViewSessionStore.updateSessionStoreFromTabListener( + aBrowser, + aBrowsingContext, + aPermanentKey, + { + data: aData, + epoch: aEpoch, + sHistoryNeeded: aCollectSHistory, + } + ); + }, +}; + +SessionStoreFunctions.prototype.QueryInterface = ChromeUtils.generateQI([ + "nsISessionStoreFunctions", +]); diff --git a/mobile/android/components/geckoview/components.conf b/mobile/android/components/geckoview/components.conf index ea9b9eba09..230abc5cf4 100644 --- a/mobile/android/components/geckoview/components.conf +++ b/mobile/android/components/geckoview/components.conf @@ -91,6 +91,12 @@ Classes = [ ], }, }, + { + 'cid': '{ad643d9e-52e3-4385-a57c-b42deb2f5daf}', + 'contract_ids': ['@mozilla.org/toolkit/sessionstore-functions;1'], + 'esModule': 'resource://gre/modules/SessionStoreFunctions.sys.mjs', + 'constructor': 'SessionStoreFunctions', + }, ] if defined('MOZ_ANDROID_HISTORY'): diff --git a/mobile/android/components/geckoview/moz.build b/mobile/android/components/geckoview/moz.build index 7b115ed03b..75b8c1bf32 100644 --- a/mobile/android/components/geckoview/moz.build +++ b/mobile/android/components/geckoview/moz.build @@ -49,6 +49,7 @@ EXTRA_JS_MODULES += [ "GeckoViewStartup.sys.mjs", "LoginStorageDelegate.sys.mjs", "PromptCollection.sys.mjs", + "SessionStoreFunctions.sys.mjs", "ShareDelegate.sys.mjs", ] |