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:
@@ -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());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user