forked from mirrors/gecko-dev
Bug 1677190 - Introduce SessionStoreFunctions for GeckoView package and move the existing SessionStoreFunctions from toolkit to the browser package. r=geckoview-reviewers,farre,nika,owlish
This change utilizes components.conf to distinguish between the contract implementations of nsISessionStoreFunctions per platform. Differential Revision: https://phabricator.services.mozilla.com/D206904
This commit is contained in:
parent
5c9ae9edba
commit
c34f4a5022
13 changed files with 188 additions and 44 deletions
|
|
@ -4,38 +4,40 @@
|
|||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
import { SessionStore } from "resource:///modules/sessionstore/SessionStore.sys.mjs";
|
||||
|
||||
export function UpdateSessionStore(
|
||||
aBrowser,
|
||||
aBrowsingContext,
|
||||
aPermanentKey,
|
||||
aEpoch,
|
||||
aCollectSHistory,
|
||||
aData
|
||||
) {
|
||||
return SessionStoreFuncInternal.updateSessionStore(
|
||||
export class SessionStoreFunctions {
|
||||
UpdateSessionStore(
|
||||
aBrowser,
|
||||
aBrowsingContext,
|
||||
aPermanentKey,
|
||||
aEpoch,
|
||||
aCollectSHistory,
|
||||
aData
|
||||
);
|
||||
}
|
||||
) {
|
||||
return SessionStoreFuncInternal.updateSessionStore(
|
||||
aBrowser,
|
||||
aBrowsingContext,
|
||||
aPermanentKey,
|
||||
aEpoch,
|
||||
aCollectSHistory,
|
||||
aData
|
||||
);
|
||||
}
|
||||
|
||||
export function UpdateSessionStoreForStorage(
|
||||
aBrowser,
|
||||
aBrowsingContext,
|
||||
aPermanentKey,
|
||||
aEpoch,
|
||||
aData
|
||||
) {
|
||||
return SessionStoreFuncInternal.updateSessionStoreForStorage(
|
||||
UpdateSessionStoreForStorage(
|
||||
aBrowser,
|
||||
aBrowsingContext,
|
||||
aPermanentKey,
|
||||
aEpoch,
|
||||
aData
|
||||
);
|
||||
) {
|
||||
return SessionStoreFuncInternal.updateSessionStoreForStorage(
|
||||
aBrowser,
|
||||
aBrowsingContext,
|
||||
aPermanentKey,
|
||||
aEpoch,
|
||||
aData
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
var SessionStoreFuncInternal = {
|
||||
|
|
@ -85,3 +87,7 @@ var SessionStoreFuncInternal = {
|
|||
);
|
||||
},
|
||||
};
|
||||
|
||||
SessionStoreFunctions.prototype.QueryInterface = ChromeUtils.generateQI([
|
||||
"nsISessionStoreFunctions",
|
||||
]);
|
||||
12
browser/components/sessionstore/components.conf
Normal file
12
browser/components/sessionstore/components.conf
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
# 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/.
|
||||
|
||||
Classes = [
|
||||
{
|
||||
'cid': '{45ce6b2d-ffc8-4051-bb41-37ceeeb19e94}',
|
||||
'contract_ids': ['@mozilla.org/toolkit/sessionstore-functions;1'],
|
||||
'esModule': 'resource:///modules/sessionstore/SessionStoreFunctions.sys.mjs',
|
||||
'constructor': 'SessionStoreFunctions',
|
||||
},
|
||||
]
|
||||
|
|
@ -20,6 +20,7 @@ EXTRA_JS_MODULES.sessionstore = [
|
|||
"SessionSaver.sys.mjs",
|
||||
"SessionStartup.sys.mjs",
|
||||
"SessionStore.sys.mjs",
|
||||
"SessionStoreFunctions.sys.mjs",
|
||||
"SessionWriter.sys.mjs",
|
||||
"StartupPerformance.sys.mjs",
|
||||
"TabAttributes.sys.mjs",
|
||||
|
|
@ -28,6 +29,10 @@ EXTRA_JS_MODULES.sessionstore = [
|
|||
"TabStateFlusher.sys.mjs",
|
||||
]
|
||||
|
||||
XPCOM_MANIFESTS += [
|
||||
"components.conf",
|
||||
]
|
||||
|
||||
TESTING_JS_MODULES += [
|
||||
"test/SessionStoreTestUtils.sys.mjs",
|
||||
]
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@
|
|||
#include "nsBrowserStatusFilter.h"
|
||||
#include "nsIBrowser.h"
|
||||
#include "nsTHashSet.h"
|
||||
#include "SessionStoreFunctions.h"
|
||||
#include "nsISessionStoreFunctions.h"
|
||||
#include "nsIXPConnect.h"
|
||||
#include "nsImportModule.h"
|
||||
#include "UnitTransforms.h"
|
||||
|
|
@ -2673,13 +2673,14 @@ void CanonicalBrowsingContext::RestoreState::Resolve() {
|
|||
|
||||
nsresult CanonicalBrowsingContext::WriteSessionStorageToSessionStore(
|
||||
const nsTArray<SSCacheCopy>& aSesssionStorage, uint32_t aEpoch) {
|
||||
nsCOMPtr<nsISessionStoreFunctions> funcs = do_ImportESModule(
|
||||
"resource://gre/modules/SessionStoreFunctions.sys.mjs", fallible);
|
||||
if (!funcs) {
|
||||
nsCOMPtr<nsISessionStoreFunctions> sessionStoreFuncs =
|
||||
do_GetService("@mozilla.org/toolkit/sessionstore-functions;1");
|
||||
if (!sessionStoreFuncs) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIXPConnectWrappedJS> wrapped = do_QueryInterface(funcs);
|
||||
nsCOMPtr<nsIXPConnectWrappedJS> wrapped =
|
||||
do_QueryInterface(sessionStoreFuncs);
|
||||
AutoJSAPI jsapi;
|
||||
if (!jsapi.Init(wrapped->GetJSObjectGlobal())) {
|
||||
return NS_ERROR_FAILURE;
|
||||
|
|
@ -2700,8 +2701,8 @@ nsresult CanonicalBrowsingContext::WriteSessionStorageToSessionStore(
|
|||
update.setNull();
|
||||
}
|
||||
|
||||
return funcs->UpdateSessionStoreForStorage(Top()->GetEmbedderElement(), this,
|
||||
key, aEpoch, update);
|
||||
return sessionStoreFuncs->UpdateSessionStoreForStorage(
|
||||
Top()->GetEmbedderElement(), this, key, aEpoch, update);
|
||||
}
|
||||
|
||||
void CanonicalBrowsingContext::UpdateSessionStoreSessionStorage(
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@
|
|||
#include "mozilla/net/PCookieServiceParent.h"
|
||||
#include "mozilla/net/CookieServiceParent.h"
|
||||
|
||||
#include "SessionStoreFunctions.h"
|
||||
#include "nsISessionStoreFunctions.h"
|
||||
#include "nsIXPConnect.h"
|
||||
#include "nsImportModule.h"
|
||||
#include "nsIXULRuntime.h"
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
]);
|
||||
|
|
@ -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'):
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ EXTRA_JS_MODULES += [
|
|||
"GeckoViewStartup.sys.mjs",
|
||||
"LoginStorageDelegate.sys.mjs",
|
||||
"PromptCollection.sys.mjs",
|
||||
"SessionStoreFunctions.sys.mjs",
|
||||
"ShareDelegate.sys.mjs",
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -184,4 +184,51 @@ export var GeckoViewSessionStore = {
|
|||
|
||||
return listener;
|
||||
},
|
||||
|
||||
updateSessionStoreFromTabListener(
|
||||
browser,
|
||||
browsingContext,
|
||||
permanentKey,
|
||||
update,
|
||||
forStorage = false
|
||||
) {
|
||||
permanentKey = browser?.permanentKey ?? permanentKey;
|
||||
if (!permanentKey) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (browsingContext.isReplaced) {
|
||||
return;
|
||||
}
|
||||
|
||||
const listener = this.getOrCreateSHistoryListener(
|
||||
permanentKey,
|
||||
browsingContext
|
||||
);
|
||||
|
||||
if (listener) {
|
||||
const historychange =
|
||||
// If it is not the scheduled update (tab closed, window closed etc),
|
||||
// try to store the loading non-web-controlled page opened in _blank
|
||||
// first.
|
||||
(forStorage &&
|
||||
lazy.SessionHistory.collectNonWebControlledBlankLoadingSession(
|
||||
browsingContext
|
||||
)) ||
|
||||
listener.collect(permanentKey, browsingContext, {
|
||||
collectFull: !!update.sHistoryNeeded,
|
||||
writeToCache: false,
|
||||
});
|
||||
|
||||
if (historychange) {
|
||||
update.data.historychange = historychange;
|
||||
}
|
||||
}
|
||||
|
||||
const win =
|
||||
browsingContext.embedderElement?.ownerGlobal ||
|
||||
browsingContext.currentWindowGlobal?.browsingContext?.window;
|
||||
|
||||
this.onTabStateUpdate(permanentKey, win, update);
|
||||
},
|
||||
};
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
#include "nsIXULRuntime.h"
|
||||
#include "nsPresContext.h"
|
||||
#include "nsPrintfCString.h"
|
||||
#include "SessionStoreFunctions.h"
|
||||
#include "nsISessionStoreFunctions.h"
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
|
|
@ -436,9 +436,13 @@ void TabListener::UpdateSessionStore(bool aIsFlush) {
|
|||
data.mIsPrivate.Construct() = mSessionStore->GetPrivateModeEnabled();
|
||||
}
|
||||
|
||||
nsCOMPtr<nsISessionStoreFunctions> funcs = do_ImportESModule(
|
||||
"resource://gre/modules/SessionStoreFunctions.sys.mjs", fallible);
|
||||
nsCOMPtr<nsIXPConnectWrappedJS> wrapped = do_QueryInterface(funcs);
|
||||
nsCOMPtr<nsISessionStoreFunctions> sessionStoreFuncs =
|
||||
do_GetService("@mozilla.org/toolkit/sessionstore-functions;1");
|
||||
if (!sessionStoreFuncs) {
|
||||
return;
|
||||
}
|
||||
nsCOMPtr<nsIXPConnectWrappedJS> wrapped =
|
||||
do_QueryInterface(sessionStoreFuncs);
|
||||
if (!wrapped) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -456,7 +460,7 @@ void TabListener::UpdateSessionStore(bool aIsFlush) {
|
|||
JS::Rooted<JS::Value> key(jsapi.cx(),
|
||||
context->Canonical()->Top()->PermanentKey());
|
||||
|
||||
nsresult rv = funcs->UpdateSessionStore(
|
||||
nsresult rv = sessionStoreFuncs->UpdateSessionStore(
|
||||
mOwnerContent, context, key, mEpoch,
|
||||
mSessionStore->GetAndClearSHistoryChanged(), update);
|
||||
if (NS_FAILED(rv)) {
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@
|
|||
#include "mozilla/dom/InProcessParent.h"
|
||||
#include "mozilla/dom/SessionStoreChild.h"
|
||||
#include "mozilla/dom/SessionStoreUtilsBinding.h"
|
||||
#include "SessionStoreFunctions.h"
|
||||
#include "nsISessionStoreFunctions.h"
|
||||
#include "nsISupports.h"
|
||||
#include "nsIXULRuntime.h"
|
||||
#include "nsImportModule.h"
|
||||
|
|
@ -146,9 +146,14 @@ static void DoSessionStoreUpdate(CanonicalBrowsingContext* aBrowsingContext,
|
|||
data.mScroll.Construct(aScroll);
|
||||
}
|
||||
|
||||
nsCOMPtr<nsISessionStoreFunctions> funcs = do_ImportESModule(
|
||||
"resource://gre/modules/SessionStoreFunctions.sys.mjs", fallible);
|
||||
nsCOMPtr<nsIXPConnectWrappedJS> wrapped = do_QueryInterface(funcs);
|
||||
nsCOMPtr<nsISessionStoreFunctions> sessionStoreFuncs =
|
||||
do_GetService("@mozilla.org/toolkit/sessionstore-functions;1");
|
||||
if (!sessionStoreFuncs) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIXPConnectWrappedJS> wrapped =
|
||||
do_QueryInterface(sessionStoreFuncs);
|
||||
if (!wrapped) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -166,8 +171,8 @@ static void DoSessionStoreUpdate(CanonicalBrowsingContext* aBrowsingContext,
|
|||
JS::Rooted<JS::Value> key(jsapi.cx(),
|
||||
aBrowsingContext->Top()->PermanentKey());
|
||||
|
||||
Unused << funcs->UpdateSessionStore(nullptr, aBrowsingContext, key, aEpoch,
|
||||
aNeedCollectSHistory, update);
|
||||
Unused << sessionStoreFuncs->UpdateSessionStore(
|
||||
nullptr, aBrowsingContext, key, aEpoch, aNeedCollectSHistory, update);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -31,15 +31,11 @@ UNIFIED_SOURCES += [
|
|||
"SessionStoreUtils.cpp",
|
||||
]
|
||||
|
||||
EXTRA_JS_MODULES += [
|
||||
"SessionStoreFunctions.sys.mjs",
|
||||
]
|
||||
|
||||
XPIDL_MODULE = "sessionstore"
|
||||
|
||||
XPIDL_SOURCES += [
|
||||
"nsISessionStoreFunctions.idl",
|
||||
"nsISessionStoreRestoreData.idl",
|
||||
"SessionStoreFunctions.idl",
|
||||
]
|
||||
|
||||
IPDL_SOURCES += [
|
||||
|
|
|
|||
Loading…
Reference in a new issue