commit 64a19d6e96aa456e7947aa3f96b4cd8b54f97235
parent 1b7b4ca39f9018a6dd3873a4a14cbdc3599d0bc6
Author: Gregory Pappas <gp3033@protonmail.com>
Date: Sat, 10 Jan 2026 19:46:04 +0000
Bug 208427 - Retarget originalTarget to closest non-NAC when caller is not chrome r=smaug,webidl
Differential Revision: https://phabricator.services.mozilla.com/D278560
Diffstat:
3 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/dom/events/Event.cpp b/dom/events/Event.cpp
@@ -332,6 +332,19 @@ EventTarget* Event::GetOriginalTarget() const {
return mEvent->GetOriginalDOMEventTarget();
}
+EventTarget* Event::GetOriginalTarget(CallerType aCallerType) const {
+ if (aCallerType == CallerType::System || nsContentUtils::IsCallerUAWidget()) {
+ return GetOriginalTarget();
+ }
+
+ EventTarget* et = mEvent->GetOriginalDOMEventTarget();
+ nsIContent* content = nsIContent::FromEventTargetOrNull(et);
+ if (!content) {
+ return et;
+ }
+ return content->FindFirstNonChromeOnlyAccessContent();
+}
+
EventTarget* Event::GetComposedTarget() const {
EventTarget* et = GetOriginalTarget();
nsIContent* content = nsIContent::FromEventTargetOrNull(et);
diff --git a/dom/events/Event.h b/dom/events/Event.h
@@ -360,6 +360,7 @@ class Event : public nsISupports, public nsWrapperCache {
double TimeStamp();
EventTarget* GetOriginalTarget() const;
+ EventTarget* GetOriginalTarget(CallerType aCallerType) const;
EventTarget* GetExplicitOriginalTarget() const;
EventTarget* GetComposedTarget() const;
diff --git a/dom/webidl/Event.webidl b/dom/webidl/Event.webidl
@@ -69,6 +69,7 @@ partial interface Event {
const long META_MASK = 0x00000008;
/** The original target of the event, before any retargetings. */
+ [NeedsCallerType]
readonly attribute EventTarget? originalTarget;
/**
* The explicit original target of the event. If the event was retargeted