commit 12c885354d8d68651d3641d735f25088ca2b5ba9
parent cc62581d15f70fcc46b53feb5a89e77580e76d83
Author: Andreas Farre <farre@mozilla.com>
Date: Mon, 10 Nov 2025 14:51:43 +0000
Bug 1998735 - Pass user navigation involvment from form submission. r=dom-core,smaug
Differential Revision: https://phabricator.services.mozilla.com/D271621
Diffstat:
3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
@@ -13440,6 +13440,7 @@ class OnLinkClickEvent : public Runnable {
// concerned. (Bug 1930445)
AutoJSAPI jsapi;
if (jsapi.Init(mContent->OwnerDoc()->GetScopeObject())) {
+ mLoadState->SetSourceElement(mContent->AsElement());
mHandler->OnLinkClickSync(mContent, mLoadState, mNoOpenerImplied,
mTriggeringPrincipal);
}
@@ -13790,7 +13791,6 @@ nsresult nsDocShell::OnLinkClickSync(nsIContent* aContent,
aLoadState->SetInternalLoadFlags(flags);
aLoadState->SetLoadType(loadType);
aLoadState->SetSourceBrowsingContext(mBrowsingContext);
- aLoadState->SetSourceElement(aContent->AsElement());
nsresult rv = InternalLoad(aLoadState);
diff --git a/dom/html/HTMLFormElement.cpp b/dom/html/HTMLFormElement.cpp
@@ -884,6 +884,16 @@ nsresult HTMLFormElement::SubmitSubmission(
doc->ConsumeTextDirectiveUserActivation() ||
hasValidUserGestureActivation);
loadState->SetFormDataEntryList(aFormSubmission->GetFormData());
+ if (aFormSubmission->IsInitiatedFromUserInput()) {
+ loadState->SetUserNavigationInvolvement(
+ UserNavigationInvolvement::Activation);
+ }
+ if (FormData* formData = aFormSubmission->GetFormData();
+ formData && formData->GetSubmitterElement()) {
+ loadState->SetSourceElement(formData->GetSubmitterElement());
+ } else {
+ loadState->SetSourceElement(this);
+ }
nsCOMPtr<nsIPrincipal> nodePrincipal = NodePrincipal();
rv = container->OnLinkClickSync(this, loadState, false, nodePrincipal);
diff --git a/testing/web-platform/meta/navigation-api/navigate-event/navigate-form-userInitiated.html.ini b/testing/web-platform/meta/navigation-api/navigate-event/navigate-form-userInitiated.html.ini
@@ -1,5 +0,0 @@
-[navigate-form-userInitiated.html]
- expected:
- if (processor == "x86") and debug: [OK, ERROR]
- [<form> submission fires navigate event]
- expected: FAIL