Bug 1879820 - Consume user activation when clicking link opens a new window; r=smaug,zcorpan

Differential Revision: https://phabricator.services.mozilla.com/D201373
This commit is contained in:
Oliver Medhurst
2024-11-19 08:19:04 +00:00
parent 1a6cc5f943
commit 55e56cc12f
16 changed files with 224 additions and 35 deletions

View File

@@ -12694,7 +12694,7 @@ class OnLinkClickEvent : public Runnable {
public:
OnLinkClickEvent(nsDocShell* aHandler, nsIContent* aContent,
nsDocShellLoadState* aLoadState, bool aNoOpenerImplied,
bool aIsTrusted, nsIPrincipal* aTriggeringPrincipal);
nsIPrincipal* aTriggeringPrincipal);
NS_IMETHOD Run() override {
// We need to set up an AutoJSAPI here for the following reason: When we
@@ -12702,9 +12702,9 @@ class OnLinkClickEvent : public Runnable {
// nsGlobalWindow::OpenInternal which only does popup blocking if
// !LegacyIsCallerChromeOrNativeCode(). So we need to fake things so that
// we don't look like native code as far as LegacyIsCallerNativeCode() is
// concerned.
// concerned. (Bug 1930445)
AutoJSAPI jsapi;
if (mIsTrusted || jsapi.Init(mContent->OwnerDoc()->GetScopeObject())) {
if (jsapi.Init(mContent->OwnerDoc()->GetScopeObject())) {
mHandler->OnLinkClickSync(mContent, mLoadState, mNoOpenerImplied,
mTriggeringPrincipal);
}
@@ -12717,25 +12717,23 @@ class OnLinkClickEvent : public Runnable {
RefPtr<nsDocShellLoadState> mLoadState;
nsCOMPtr<nsIPrincipal> mTriggeringPrincipal;
bool mNoOpenerImplied;
bool mIsTrusted;
};
OnLinkClickEvent::OnLinkClickEvent(nsDocShell* aHandler, nsIContent* aContent,
nsDocShellLoadState* aLoadState,
bool aNoOpenerImplied, bool aIsTrusted,
bool aNoOpenerImplied,
nsIPrincipal* aTriggeringPrincipal)
: mozilla::Runnable("OnLinkClickEvent"),
mHandler(aHandler),
mContent(aContent),
mLoadState(aLoadState),
mTriggeringPrincipal(aTriggeringPrincipal),
mNoOpenerImplied(aNoOpenerImplied),
mIsTrusted(aIsTrusted) {}
mNoOpenerImplied(aNoOpenerImplied) {}
nsresult nsDocShell::OnLinkClick(
nsIContent* aContent, nsIURI* aURI, const nsAString& aTargetSpec,
const nsAString& aFileName, nsIInputStream* aPostDataStream,
nsIInputStream* aHeadersDataStream, bool aIsUserTriggered, bool aIsTrusted,
nsIInputStream* aHeadersDataStream, bool aIsUserTriggered,
nsIPrincipal* aTriggeringPrincipal, nsIContentSecurityPolicy* aCsp) {
#ifndef ANDROID
MOZ_ASSERT(aTriggeringPrincipal, "Need a valid triggeringPrincipal");
@@ -12794,9 +12792,8 @@ nsresult nsDocShell::OnLinkClick(
ownerDoc->ConsumeTextDirectiveUserActivation() ||
hasValidUserGestureActivation);
nsCOMPtr<nsIRunnable> ev =
new OnLinkClickEvent(this, aContent, loadState, noOpenerImplied,
aIsTrusted, aTriggeringPrincipal);
nsCOMPtr<nsIRunnable> ev = new OnLinkClickEvent(
this, aContent, loadState, noOpenerImplied, aTriggeringPrincipal);
return Dispatch(ev.forget());
}