From d02a7b27c620ac4433466d42e01473413692c542 Mon Sep 17 00:00:00 2001 From: Edgar Chen Date: Tue, 19 Nov 2024 08:19:04 +0000 Subject: [PATCH] Bug 1879820 - Consume user activation when submitting form opens a new window; r=smaug,zcorpan Differential Revision: https://phabricator.services.mozilla.com/D228648 --- dom/base/nsGlobalWindowOuter.cpp | 15 ++++- dom/base/test/useractivation/mochitest.toml | 3 + .../test_popup_blocker_form_target_blank.html | 59 ++++++++++++++++++ ...lank-useractivation-multi-globals.html.ini | 3 + .../form-target-blank-useractivation.html.ini | 3 + ...et-blank-useractivation-multi-globals.html | 60 +++++++++++++++++++ .../form-target-blank-useractivation.html | 53 ++++++++++++++++ 7 files changed, 193 insertions(+), 3 deletions(-) create mode 100644 dom/base/test/useractivation/test_popup_blocker_form_target_blank.html create mode 100644 testing/web-platform/meta/html/semantics/forms/form-submission-target/form-target-blank-useractivation-multi-globals.html.ini create mode 100644 testing/web-platform/meta/html/semantics/forms/form-submission-target/form-target-blank-useractivation.html.ini create mode 100644 testing/web-platform/tests/html/semantics/forms/form-submission-target/form-target-blank-useractivation-multi-globals.html create mode 100644 testing/web-platform/tests/html/semantics/forms/form-submission-target/form-target-blank-useractivation.html diff --git a/dom/base/nsGlobalWindowOuter.cpp b/dom/base/nsGlobalWindowOuter.cpp index b44e136ea8b1..d8ba9e36c981 100644 --- a/dom/base/nsGlobalWindowOuter.cpp +++ b/dom/base/nsGlobalWindowOuter.cpp @@ -6767,9 +6767,18 @@ nsresult nsGlobalWindowOuter::OpenInternal( // (indirectly) maybe we can nix the AutoJSAPI usage OnLinkClickEvent::Run. // But note that if you change this to GetEntryGlobal(), say, then // OnLinkClickEvent::Run will need a full-blown AutoEntryScript. (Bug 1930445) - const bool checkForPopup = - !nsContentUtils::LegacyIsCallerChromeOrNativeCode() && !aDialog && - !windowExists; + const bool checkForPopup = [&]() { + if (aDialog) { + return false; + } + if (windowExists) { + return false; + } + if (aLoadState && aLoadState->IsFormSubmission()) { + return true; + } + return !nsContentUtils::LegacyIsCallerChromeOrNativeCode(); + }(); nsCOMPtr uri; diff --git a/dom/base/test/useractivation/mochitest.toml b/dom/base/test/useractivation/mochitest.toml index 2c8b7fe589ed..f5b49a38d9ac 100644 --- a/dom/base/test/useractivation/mochitest.toml +++ b/dom/base/test/useractivation/mochitest.toml @@ -14,6 +14,9 @@ prefs = ["formhelper.autozoom.force-disable.test-only=true"] ["test_popup_blocker_async_callback.html"] +["test_popup_blocker_form_target_blank.html"] +support-files = ["file_self_close.html"] + ["test_popup_blocker_link_target_blank.html"] support-files = ["file_self_close.html"] diff --git a/dom/base/test/useractivation/test_popup_blocker_form_target_blank.html b/dom/base/test/useractivation/test_popup_blocker_form_target_blank.html new file mode 100644 index 000000000000..a79f99fe8647 --- /dev/null +++ b/dom/base/test/useractivation/test_popup_blocker_form_target_blank.html @@ -0,0 +1,59 @@ + + + + +Test for triggering the popup blocker by submitting a target=_blank form + + + + + +
+ + + diff --git a/testing/web-platform/meta/html/semantics/forms/form-submission-target/form-target-blank-useractivation-multi-globals.html.ini b/testing/web-platform/meta/html/semantics/forms/form-submission-target/form-target-blank-useractivation-multi-globals.html.ini new file mode 100644 index 000000000000..da60c7b38360 --- /dev/null +++ b/testing/web-platform/meta/html/semantics/forms/form-submission-target/form-target-blank-useractivation-multi-globals.html.ini @@ -0,0 +1,3 @@ +# XXX(edgar): Need to enable popup blocker due to bug 1930458. +prefs: [dom.disable_open_during_load:true] + diff --git a/testing/web-platform/meta/html/semantics/forms/form-submission-target/form-target-blank-useractivation.html.ini b/testing/web-platform/meta/html/semantics/forms/form-submission-target/form-target-blank-useractivation.html.ini new file mode 100644 index 000000000000..da60c7b38360 --- /dev/null +++ b/testing/web-platform/meta/html/semantics/forms/form-submission-target/form-target-blank-useractivation.html.ini @@ -0,0 +1,3 @@ +# XXX(edgar): Need to enable popup blocker due to bug 1930458. +prefs: [dom.disable_open_during_load:true] + diff --git a/testing/web-platform/tests/html/semantics/forms/form-submission-target/form-target-blank-useractivation-multi-globals.html b/testing/web-platform/tests/html/semantics/forms/form-submission-target/form-target-blank-useractivation-multi-globals.html new file mode 100644 index 000000000000..af241016386e --- /dev/null +++ b/testing/web-platform/tests/html/semantics/forms/form-submission-target/form-target-blank-useractivation-multi-globals.html @@ -0,0 +1,60 @@ + +Multi-globals: which userActivation should be consumed when submitting a target=_blank form? + + + + + + +
+ diff --git a/testing/web-platform/tests/html/semantics/forms/form-submission-target/form-target-blank-useractivation.html b/testing/web-platform/tests/html/semantics/forms/form-submission-target/form-target-blank-useractivation.html new file mode 100644 index 000000000000..6d8506ac9824 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/forms/form-submission-target/form-target-blank-useractivation.html @@ -0,0 +1,53 @@ + +Test that submitting a target=_blank form consumes userActivation + + + + + + +
+
+ + +
+