Get started cleaning up interesttarget implementation [1/N]
This is the first in a series of patches to clean up and update the
`interesttarget` implementation to match recent OpenUI discussions.
This CL:
- Gets rid of `interestaction`. See the large comment posted here:
https://github.com/openui/open-ui/issues/1064#issuecomment-2581511411
- Adds a connection to `InterestLost` when elements are de-focused.
- Adds support (tentatively) for dialogs being shown modally.
- Remove keyboard/focus support for `interesttarget`. This will
get re-added later in its new form, via a hotkey rather than
focus.
Bug: 326681249
Change-Id: I26f07a00c4fb1d2b1da92b64d91f330c02a11468
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6166890
Auto-Submit: Mason Freed <masonf@chromium.org>
Reviewed-by: David Baron <dbaron@chromium.org>
Commit-Queue: Mason Freed <masonf@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1408202}
diff --git a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
index 8ac3e4f..2dd6f7fc 100644
--- a/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/android_webview/test/data/web_tests/webexposed/global-interface-listing-expected.txt
@@ -3412,7 +3412,6 @@
getter hostname
getter href
getter hreflang
- getter interestAction
getter interestTargetElement
getter name
getter origin
@@ -3442,7 +3441,6 @@
setter hostname
setter href
setter hreflang
- setter interestAction
setter interestTargetElement
setter name
setter password
@@ -3470,7 +3468,6 @@
getter host
getter hostname
getter href
- getter interestAction
getter interestTargetElement
getter noHref
getter origin
@@ -3496,7 +3493,6 @@
setter host
setter hostname
setter href
- setter interestAction
setter interestTargetElement
setter noHref
setter password
@@ -3602,7 +3598,6 @@
getter formMethod
getter formNoValidate
getter formTarget
- getter interestAction
getter interestTargetElement
getter labels
getter name
@@ -3625,7 +3620,6 @@
setter formMethod
setter formNoValidate
setter formTarget
- setter interestAction
setter interestTargetElement
setter name
setter popoverTargetAction
@@ -4281,7 +4275,6 @@
getter height
getter incremental
getter indeterminate
- getter interestAction
getter interestTargetElement
getter labels
getter list
@@ -4342,7 +4335,6 @@
setter height
setter incremental
setter indeterminate
- setter interestAction
setter interestTargetElement
setter max
setter maxLength
@@ -5450,8 +5442,7 @@
method getTargetRanges
interface InterestEvent : Event
attribute @@toStringTag
- getter action
- getter invoker
+ getter source
method constructor
interface IntersectionObserver
attribute @@toStringTag
@@ -7673,11 +7664,9 @@
interface SVGAElement : SVGGraphicsElement
attribute @@toStringTag
getter href
- getter interestAction
getter interestTargetElement
getter target
method constructor
- setter interestAction
setter interestTargetElement
interface SVGAngle
attribute @@toStringTag
diff --git a/third_party/blink/renderer/core/dom/element.cc b/third_party/blink/renderer/core/dom/element.cc
index b64fcd3..eb91d32 100644
--- a/third_party/blink/renderer/core/dom/element.cc
+++ b/third_party/blink/renderer/core/dom/element.cc
@@ -1273,45 +1273,63 @@
void Element::InterestGained() {
CHECK(RuntimeEnabledFeatures::HTMLInterestTargetAttributeEnabled());
+ CHECK(IsInTreeScope());
+ CHECK(GetDocument().IsActive());
- if (!IsInTreeScope()) {
- return;
- }
-
- Element* interest_target_element = this->interestTargetElement();
- AtomicString interest_action = this->interestAction();
- if (interest_target_element && !interest_action.IsNull()) {
- // TODO(crbug.com/326681249): This should only fire if action is valid.
- Event* interest_event = InterestEvent::Create(event_type_names::kInterest,
- interest_action, this);
+ if (Element* interest_target_element = this->interestTargetElement()) {
+ Event* interest_event =
+ InterestEvent::Create(event_type_names::kInterest, this);
interest_target_element->DispatchEvent(*interest_event);
if (!interest_event->defaultPrevented()) {
if (auto* popover = DynamicTo<HTMLElement>(interest_target_element);
popover && popover->PopoverType() != PopoverValueType::kNone) {
- if (!(interest_action.empty() ||
- EqualIgnoringASCIICase(interest_action,
- keywords::kTogglePopover))) {
- return;
- }
-
// TODO(crbug.com/326681249): This might need to queue a task with a
// delay based on CSS properties.
- auto& document = GetDocument();
- bool can_show = popover->IsPopoverReady(
- PopoverTriggerAction::kShow,
- /*exception_state=*/nullptr,
- /*include_event_handler_text=*/true, &document);
- bool can_hide = popover->IsPopoverReady(
- PopoverTriggerAction::kHide,
- /*exception_state=*/nullptr,
- /*include_event_handler_text=*/true, &document);
- if (can_hide) {
+ if (popover->IsPopoverReady(PopoverTriggerAction::kShow,
+ /*exception_state=*/nullptr,
+ /*include_event_handler_text=*/true,
+ &GetDocument())) {
+ popover->InvokePopover(*this);
+ }
+ } else if (auto* dialog =
+ DynamicTo<HTMLDialogElement>(interest_target_element)) {
+ if (!dialog->IsOpen()) {
+ dialog->showModal(ASSERT_NO_EXCEPTION);
+ }
+ }
+ }
+ }
+}
+
+void Element::InterestLost() {
+ CHECK(RuntimeEnabledFeatures::HTMLInterestTargetAttributeEnabled());
+ CHECK(IsInTreeScope());
+
+ // TODO(masonf): It would be a good idea to add a DHECK method that makes sure
+ // we never get InterestLost without first getting an InterestGained.
+
+ if (Element* interest_target_element = this->interestTargetElement()) {
+ Event* lose_interest_event =
+ InterestEvent::Create(event_type_names::kLoseinterest, this);
+ interest_target_element->DispatchEvent(*lose_interest_event);
+ if (!lose_interest_event->defaultPrevented()) {
+ if (auto* popover = DynamicTo<HTMLElement>(interest_target_element);
+ popover && popover->PopoverType() != PopoverValueType::kNone) {
+ // TODO(crbug.com/326681249): This might need to queue a task with a
+ // delay based on CSS properties.
+ if (popover->IsPopoverReady(PopoverTriggerAction::kHide,
+ /*exception_state=*/nullptr,
+ /*include_event_handler_text=*/true,
+ &GetDocument())) {
popover->HidePopoverInternal(
HidePopoverFocusBehavior::kFocusPreviousElement,
HidePopoverTransitionBehavior::kFireEventsAndWaitForTransitions,
/*exception_state=*/nullptr);
- } else if (can_show) {
- popover->InvokePopover(*this);
+ }
+ } else if (auto* dialog =
+ DynamicTo<HTMLDialogElement>(interest_target_element)) {
+ if (dialog->IsOpen()) {
+ dialog->close();
}
}
}
@@ -6625,11 +6643,6 @@
FocusStateChanged();
- if (received &&
- RuntimeEnabledFeatures::HTMLInterestTargetAttributeEnabled()) {
- InterestGained();
- }
-
if (GetLayoutObject() || received) {
return;
}
@@ -10205,8 +10218,13 @@
InvalidateIfHasEffectiveAppearance();
- if (hovered && RuntimeEnabledFeatures::HTMLInterestTargetAttributeEnabled()) {
- InterestGained();
+ if (RuntimeEnabledFeatures::HTMLInterestTargetAttributeEnabled() &&
+ IsInTreeScope() && GetDocument().IsActive()) {
+ if (hovered) {
+ InterestGained();
+ } else {
+ InterestLost();
+ }
}
}
diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/renderer/core/dom/element.h
index 356ebee..026f1c33 100644
--- a/third_party/blink/renderer/core/dom/element.h
+++ b/third_party/blink/renderer/core/dom/element.h
@@ -1071,10 +1071,10 @@
return false;
}
+ // Implementation of the `interesttarget` feature.
void InterestGained();
-
+ void InterestLost();
virtual Element* interestTargetElement() { return nullptr; }
- virtual AtomicString interestAction() const { return g_null_atom; }
// The implementations of |innerText()| and |GetInnerTextWithoutUpdate()| are
// found in "element_inner_text.cc".
diff --git a/third_party/blink/renderer/core/dom/interest_invoker_element.idl b/third_party/blink/renderer/core/dom/interest_invoker_element.idl
index 95f7549..e47885c 100644
--- a/third_party/blink/renderer/core/dom/interest_invoker_element.idl
+++ b/third_party/blink/renderer/core/dom/interest_invoker_element.idl
@@ -5,5 +5,4 @@
[RuntimeEnabled=HTMLInterestTargetAttribute]
interface mixin InterestInvokerElement {
[CEReactions,Reflect=interesttarget] attribute Element? interestTargetElement;
- [CEReactions,Reflect=interestaction] attribute DOMString interestAction;
};
diff --git a/third_party/blink/renderer/core/events/interest_event.cc b/third_party/blink/renderer/core/events/interest_event.cc
index b943932..8eec3c0 100644
--- a/third_party/blink/renderer/core/events/interest_event.cc
+++ b/third_party/blink/renderer/core/events/interest_event.cc
@@ -16,39 +16,33 @@
const InterestEventInit* initializer)
: Event(type, initializer) {
DCHECK(RuntimeEnabledFeatures::HTMLInterestTargetAttributeEnabled());
- if (initializer->hasInvoker()) {
- invoker_ = initializer->invoker();
- }
- if (initializer->hasAction()) {
- action_ = initializer->action();
+ if (initializer->hasSource()) {
+ source_ = initializer->source();
}
}
-InterestEvent::InterestEvent(const AtomicString& type,
- const String& action,
- Element* invoker)
+InterestEvent::InterestEvent(const AtomicString& type, Element* source)
: Event(type, Bubbles::kNo, Cancelable::kYes, ComposedMode::kComposed),
- invoker_(invoker),
- action_(action) {
+ source_(source) {
DCHECK(RuntimeEnabledFeatures::HTMLInterestTargetAttributeEnabled());
}
-Element* InterestEvent::invoker() const {
- Element* invoker = invoker_.Get();
- if (!invoker) {
+Element* InterestEvent::source() const {
+ Element* source = source_.Get();
+ if (!source) {
return nullptr;
}
if (auto* current = currentTarget()) {
CHECK(current->ToNode());
- return ¤t->ToNode()->GetTreeScope().Retarget(*invoker);
+ return ¤t->ToNode()->GetTreeScope().Retarget(*source);
}
DCHECK_EQ(eventPhase(), Event::PhaseType::kNone);
- return invoker;
+ return source;
}
void InterestEvent::Trace(Visitor* visitor) const {
- visitor->Trace(invoker_);
+ visitor->Trace(source_);
Event::Trace(visitor);
}
diff --git a/third_party/blink/renderer/core/events/interest_event.h b/third_party/blink/renderer/core/events/interest_event.h
index fed5bd7..6db27e7 100644
--- a/third_party/blink/renderer/core/events/interest_event.h
+++ b/third_party/blink/renderer/core/events/interest_event.h
@@ -23,16 +23,12 @@
return MakeGarbageCollected<InterestEvent>(type, initializer);
}
- static InterestEvent* Create(const AtomicString& type,
- const String& action,
- Element* invoker) {
- return MakeGarbageCollected<InterestEvent>(type, action, invoker);
+ static InterestEvent* Create(const AtomicString& type, Element* source) {
+ return MakeGarbageCollected<InterestEvent>(type, source);
}
InterestEvent(const AtomicString& type, const InterestEventInit* initializer);
- InterestEvent(const AtomicString& type,
- const String& action,
- Element* invoker);
+ InterestEvent(const AtomicString& type, Element* source);
const AtomicString& InterfaceName() const override {
return event_interface_names::kInterestEvent;
@@ -40,14 +36,11 @@
void Trace(Visitor*) const override;
- const String& action() const { return action_; }
-
- Element* invoker() const;
- void SetInvoker(Element* invoker) { invoker_ = invoker; }
+ Element* source() const;
+ void SetSource(Element* source) { source_ = source; }
private:
- Member<Element> invoker_;
- String action_;
+ Member<Element> source_;
};
} // namespace blink
diff --git a/third_party/blink/renderer/core/events/interest_event.idl b/third_party/blink/renderer/core/events/interest_event.idl
index 4b71a42..2717627 100644
--- a/third_party/blink/renderer/core/events/interest_event.idl
+++ b/third_party/blink/renderer/core/events/interest_event.idl
@@ -7,11 +7,9 @@
Exposed=Window
] interface InterestEvent : Event {
constructor(DOMString type, optional InterestEventInit eventInitDict = {});
- readonly attribute Element? invoker;
- readonly attribute DOMString action;
+ readonly attribute Element? source;
};
dictionary InterestEventInit : EventInit {
- Element? invoker = null;
- DOMString action = "";
+ Element? source = null;
};
diff --git a/third_party/blink/renderer/core/html/forms/html_form_control_element.cc b/third_party/blink/renderer/core/html/forms/html_form_control_element.cc
index 22ee4d2..a755f48 100644
--- a/third_party/blink/renderer/core/html/forms/html_form_control_element.cc
+++ b/third_party/blink/renderer/core/html/forms/html_form_control_element.cc
@@ -417,17 +417,6 @@
setAttribute(html_names::kPopovertargetactionAttr, value);
}
-AtomicString HTMLFormControlElement::interestAction() const {
- CHECK(RuntimeEnabledFeatures::HTMLInterestTargetAttributeEnabled());
- const AtomicString& attribute_value =
- FastGetAttribute(html_names::kInterestactionAttr);
- if (attribute_value && !attribute_value.IsNull() &&
- !attribute_value.empty()) {
- return attribute_value;
- }
- return g_empty_atom;
-}
-
void HTMLFormControlElement::DefaultEventHandler(Event& event) {
// Buttons that aren't form participants might be Invoker buttons or Popover
// buttons.
diff --git a/third_party/blink/renderer/core/html/forms/html_form_control_element.h b/third_party/blink/renderer/core/html/forms/html_form_control_element.h
index 2352765..e26d943f 100644
--- a/third_party/blink/renderer/core/html/forms/html_form_control_element.h
+++ b/third_party/blink/renderer/core/html/forms/html_form_control_element.h
@@ -117,8 +117,6 @@
Element* interestTargetElement() override;
- AtomicString interestAction() const override;
-
void DefaultEventHandler(Event&) override;
void SetHovered(bool hovered) override;
diff --git a/third_party/blink/renderer/core/html/html_anchor_element.cc b/third_party/blink/renderer/core/html/html_anchor_element.cc
index 2a34e87..e1440edf 100644
--- a/third_party/blink/renderer/core/html/html_anchor_element.cc
+++ b/third_party/blink/renderer/core/html/html_anchor_element.cc
@@ -629,17 +629,6 @@
html_names::kInteresttargetAttr);
}
-AtomicString HTMLAnchorElementBase::interestAction() const {
- CHECK(RuntimeEnabledFeatures::HTMLInterestTargetAttributeEnabled());
- const AtomicString& attribute_value =
- FastGetAttribute(html_names::kInterestactionAttr);
- if (attribute_value && !attribute_value.IsNull() &&
- !attribute_value.empty()) {
- return attribute_value;
- }
- return g_empty_atom;
-}
-
void HTMLAnchorElementBase::HandleClick(MouseEvent& event) {
event.SetDefaultHandled();
diff --git a/third_party/blink/renderer/core/html/html_anchor_element.h b/third_party/blink/renderer/core/html/html_anchor_element.h
index ae3a23b..f9dcb765 100644
--- a/third_party/blink/renderer/core/html/html_anchor_element.h
+++ b/third_party/blink/renderer/core/html/html_anchor_element.h
@@ -114,8 +114,6 @@
Element* interestTargetElement() override;
- AtomicString interestAction() const override;
-
void Trace(Visitor*) const override;
protected:
diff --git a/third_party/blink/renderer/core/html/html_area_element.cc b/third_party/blink/renderer/core/html/html_area_element.cc
index 699ddc0..0602e0e 100644
--- a/third_party/blink/renderer/core/html/html_area_element.cc
+++ b/third_party/blink/renderer/core/html/html_area_element.cc
@@ -239,17 +239,6 @@
html_names::kInteresttargetAttr);
}
-AtomicString HTMLAreaElement::interestAction() const {
- CHECK(RuntimeEnabledFeatures::HTMLInterestTargetAttributeEnabled());
- const AtomicString& attribute_value =
- FastGetAttribute(html_names::kInterestactionAttr);
- if (attribute_value && !attribute_value.IsNull() &&
- !attribute_value.empty()) {
- return attribute_value;
- }
- return g_empty_atom;
-}
-
void HTMLAreaElement::UpdateSelectionOnFocus(
SelectionBehaviorOnFocus selection_behavior,
const FocusOptions* options) {
diff --git a/third_party/blink/renderer/core/html/html_area_element.h b/third_party/blink/renderer/core/html/html_area_element.h
index c99edcb8..7622ae2 100644
--- a/third_party/blink/renderer/core/html/html_area_element.h
+++ b/third_party/blink/renderer/core/html/html_area_element.h
@@ -72,7 +72,6 @@
void SetFocused(bool, mojom::blink::FocusType) override;
Element* interestTargetElement() override;
- AtomicString interestAction() const override;
enum Shape { kDefault, kPoly, kRect, kCircle };
void InvalidateCachedPath();
diff --git a/third_party/blink/renderer/core/html/html_attribute_names.json5 b/third_party/blink/renderer/core/html/html_attribute_names.json5
index 868d155..ccb30fd 100644
--- a/third_party/blink/renderer/core/html/html_attribute_names.json5
+++ b/third_party/blink/renderer/core/html/html_attribute_names.json5
@@ -118,7 +118,6 @@
"inert",
"inputmode",
"integrity",
- "interestaction",
"interesttarget",
"is",
"ismap",
diff --git a/third_party/blink/renderer/core/svg/svg_a_element.cc b/third_party/blink/renderer/core/svg/svg_a_element.cc
index 09f7ae3..9bac8ecb8 100644
--- a/third_party/blink/renderer/core/svg/svg_a_element.cc
+++ b/third_party/blink/renderer/core/svg/svg_a_element.cc
@@ -179,17 +179,6 @@
svg_names::kInteresttargetAttr);
}
-AtomicString SVGAElement::interestAction() const {
- CHECK(RuntimeEnabledFeatures::HTMLInterestTargetAttributeEnabled());
- const AtomicString& attribute_value =
- FastGetAttribute(svg_names::kInterestactionAttr);
- if (attribute_value && !attribute_value.IsNull() &&
- !attribute_value.empty()) {
- return attribute_value;
- }
- return g_empty_atom;
-}
-
bool SVGAElement::HasActivationBehavior() const {
return true;
}
diff --git a/third_party/blink/renderer/core/svg/svg_a_element.h b/third_party/blink/renderer/core/svg/svg_a_element.h
index 0515d909a..59cb21f 100644
--- a/third_party/blink/renderer/core/svg/svg_a_element.h
+++ b/third_party/blink/renderer/core/svg/svg_a_element.h
@@ -38,7 +38,6 @@
explicit SVGAElement(Document&);
Element* interestTargetElement() override;
- AtomicString interestAction() const override;
void Trace(Visitor*) const override;
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations
index 60ea43a..fde4eb7 100644
--- a/third_party/blink/web_tests/TestExpectations
+++ b/third_party/blink/web_tests/TestExpectations
@@ -1556,6 +1556,9 @@
crbug.com/335223786 virtual/html-anchor-attribute-disabled/external/wpt/html/semantics/popovers/popover-anchor-nested-display.tentative.html [ Failure ]
crbug.com/335223786 virtual/html-anchor-attribute-disabled/external/wpt/html/semantics/popovers/popover-anchor-scroll-display.tentative.html [ Failure ]
+# Interesttarget related tests
+crbug.com/326681249 external/wpt/html/semantics/the-button-element/interest-target/interesttarget-svg-a-event-dispatch.tentative.html [ Failure ]
+
crbug.com/1107923 inspector-protocol/debugger/wasm-streaming-url.js [ Failure Pass Timeout ]
crbug.com/350730710 inspector-protocol/css/css-get-position-try.js [ Failure Skip ]
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestelement-interface.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestelement-interface.tentative.html
index 8b1e375..bc68dc5 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestelement-interface.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestelement-interface.tentative.html
@@ -84,82 +84,4 @@
"interestTargetElement attribute value must be an instance of Element",
);
}, "interestTargetElement throws error on assignment of non Element");
-
- test(function () {
- assert_false(buttonInvoker.hasAttribute("interestaction"));
- assert_equals(buttonInvoker.interestAction, "");
- assert_false(aInvoker.hasAttribute("interestaction"));
- assert_equals(aInvoker.interestAction, "");
- assert_false(inputInvoker.hasAttribute("interestaction"));
- assert_equals(inputInvoker.interestAction, "");
- }, "interestAction reflects '' when attribute not present");
-
- test(function () {
- buttonInvoker.setAttribute("interestaction", "");
- assert_equals(buttonInvoker.getAttribute("interestaction"), "");
- assert_equals(buttonInvoker.interestAction, "");
- aInvoker.setAttribute("interestaction", "");
- assert_equals(aInvoker.getAttribute("interestaction"), "");
- assert_equals(aInvoker.interestAction, "");
- inputInvoker.setAttribute("interestaction", "");
- assert_equals(inputInvoker.getAttribute("interestaction"), "");
- assert_equals(inputInvoker.interestAction, "");
- }, "interestAction reflects '' when attribute empty, setAttribute version");
-
- test(function () {
- buttonInvoker.interestAction = "";
- assert_equals(buttonInvoker.getAttribute("interestaction"), "");
- assert_equals(buttonInvoker.interestAction, "");
- aInvoker.interestAction = "";
- assert_equals(aInvoker.getAttribute("interestaction"), "");
- assert_equals(aInvoker.interestAction, "");
- inputInvoker.interestAction = "";
- assert_equals(inputInvoker.getAttribute("interestaction"), "");
- assert_equals(inputInvoker.interestAction, "");
- }, "interestAction reflects '' when attribute empty, IDL setter version");
-
- test(function () {
- buttonInvoker.interestAction = "fooBarBaz";
- assert_equals(buttonInvoker.getAttribute("interestaction"), "fooBarBaz");
- assert_equals(buttonInvoker.interestAction, "fooBarBaz");
- aInvoker.interestAction = "fooBarBaz";
- assert_equals(aInvoker.getAttribute("interestaction"), "fooBarBaz");
- assert_equals(aInvoker.interestAction, "fooBarBaz");
- inputInvoker.interestAction = "fooBarBaz";
- assert_equals(inputInvoker.getAttribute("interestaction"), "fooBarBaz");
- assert_equals(inputInvoker.interestAction, "fooBarBaz");
- }, "interestAction reflects same casing");
-
- test(function () {
- buttonInvoker.interestAction = [];
- assert_equals(buttonInvoker.getAttribute("interestaction"), "");
- assert_equals(buttonInvoker.interestAction, "");
- aInvoker.interestAction = [];
- assert_equals(aInvoker.getAttribute("interestaction"), "");
- assert_equals(aInvoker.interestAction, "");
- inputInvoker.interestAction = [];
- assert_equals(inputInvoker.getAttribute("interestaction"), "");
- assert_equals(inputInvoker.interestAction, "");
- }, "interestAction reflects '' when attribute set to []");
-
- test(function () {
- buttonInvoker.interestAction = [1, 2, 3];
- assert_equals(buttonInvoker.getAttribute("interestaction"), "1,2,3");
- assert_equals(buttonInvoker.interestAction, "1,2,3");
- aInvoker.interestAction = [1, 2, 3];
- assert_equals(aInvoker.getAttribute("interestaction"), "1,2,3");
- assert_equals(aInvoker.interestAction, "1,2,3");
- inputInvoker.interestAction = [1, 2, 3];
- assert_equals(inputInvoker.getAttribute("interestaction"), "1,2,3");
- assert_equals(inputInvoker.interestAction, "1,2,3");
- }, "interestAction reflects tostring value");
-
- test(function () {
- buttonInvoker.interestAction = {};
- assert_equals(buttonInvoker.interestAction, "[object Object]");
- aInvoker.interestAction = {};
- assert_equals(aInvoker.interestAction, "[object Object]");
- inputInvoker.interestAction = {};
- assert_equals(inputInvoker.interestAction, "[object Object]");
- }, "interestAction reflects tostring value 2");
</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestevent-dispatch-shadow.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestevent-dispatch-shadow.tentative.html
index d96907e..9911357e 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestevent-dispatch-shadow.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestevent-dispatch-shadow.tentative.html
@@ -1,8 +1,11 @@
-<!doctype html>
+<!DOCTYPE html>
<meta charset="utf-8" />
<meta name="author" title="Keith Cirkel" href="mailto:keithamus@github.com" />
<meta name="author" title="Luke Warlow" href="mailto:lwarlow@igalia.com" />
-<link rel="help" href="https://open-ui.org/components/interest-invokers.explainer/" />
+<link
+ rel="help"
+ href="https://open-ui.org/components/interest-invokers.explainer/"
+/>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
@@ -20,63 +23,35 @@
const slot = shadow.appendChild(document.createElement("slot"));
let childEvent = null;
let childEventTarget = null;
- let childEventInvoker = null;
+ let childEventSource = null;
let hostEvent = null;
let hostEventTarget = null;
- let hostEventInvoker = null;
- slot.addEventListener(
- "interest",
- (e) => {
+ let hostEventSource = null;
+ slot.addEventListener("interest", (e) => {
childEvent = e;
childEventTarget = e.target;
- childEventInvoker = e.invoker;
- },
- { once: true },
- );
- host.addEventListener(
- "interest",
- (e) => {
+ childEventSource = e.source;
+ }, { once: true });
+ host.addEventListener("interest", (e) => {
hostEvent = e;
hostEventTarget = e.target;
- hostEventInvoker = e.invoker;
- },
- { once: true },
- );
+ hostEventSource = e.source;
+ }, { once: true });
const event = new InterestEvent("interest", {
bubbles: true,
- invoker: slot,
+ source: slot,
composed: true,
});
slot.dispatchEvent(event);
assert_true(childEvent instanceof InterestEvent, "slot saw interest event");
- assert_equals(
- childEventTarget,
- slot,
- "target is child inside shadow boundary",
- );
- assert_equals(
- childEventInvoker,
- slot,
- "invoker is child inside shadow boundary",
- );
- assert_equals(
- hostEvent,
- childEvent,
- "event dispatch propagates across shadow boundary",
- );
- assert_equals(
- hostEventTarget,
- host,
- "target is retargeted to shadowroot host",
- );
- assert_equals(
- hostEventInvoker,
- host,
- "invoker is retargeted to shadowroot host",
- );
- }, "InterestEvent propagates across shadow boundaries retargeting invoker");
+ assert_equals(childEventTarget, slot, "target is child inside shadow boundary");
+ assert_equals(childEventSource, slot, "source is child inside shadow boundary");
+ assert_equals(hostEvent, childEvent, "event dispatch propagates across shadow boundary");
+ assert_equals(hostEventTarget, host, "target is retargeted to shadowroot host");
+ assert_equals(hostEventSource, host, "source is retargeted to shadowroot host");
+ }, "InterestEvent propagates across shadow boundaries retargeting invoker source");
- test(function (t) {
+ promise_test(async (t) => {
const host = document.createElement("div");
document.body.append(host);
t.add_cleanup(() => host.remove());
@@ -86,19 +61,16 @@
button.interestTargetElement = interestee;
let event = null;
let eventTarget = null;
- let eventInvoker = null;
- interestee.addEventListener(
- "interest",
- (e) => {
+ let eventSource = null;
+ interestee.addEventListener("interest", (e) => {
event = e;
eventTarget = e.target;
- eventInvoker = e.invoker;
- },
- { once: true },
- );
- button.focus();
+ eventSource = e.source;
+ },{ once: true });
+ await hoverOver(button);
+ assert_true(!!event,"InterestEvent gets fired");
assert_true(event instanceof InterestEvent);
assert_equals(eventTarget, interestee, "target is interestee");
- assert_equals(eventInvoker, host, "interestee is host");
+ assert_equals(eventSource, host, "interestee is host");
}, "cross shadow InterestEvent retargets interestee to host element");
</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestevent-interface.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestevent-interface.tentative.html
index ed7d82f..9ed95a6 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestevent-interface.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interestevent-interface.tentative.html
@@ -16,152 +16,80 @@
<script>
test(function () {
const event = new InterestEvent("test");
- assert_equals(event.action, "");
- assert_readonly(event, "action", "readonly attribute value");
- }, "action is a readonly defaulting to ''");
+ assert_equals(event.source, null);
+ assert_readonly(event, "source", "readonly attribute value");
+ }, "source is readonly defaulting to null");
test(function () {
- const event = new InterestEvent("test");
- assert_equals(event.invoker, null);
- assert_readonly(event, "invoker", "readonly attribute value");
- }, "invoker is readonly defaulting to null");
-
- test(function () {
- const event = new InterestEvent("test", { action: "sAmPle" });
- assert_equals(event.action, "sAmPle");
- }, "action reflects initialized attribute");
-
- test(function () {
- const event = new InterestEvent("test", { action: undefined });
- assert_equals(event.action, "");
- }, "action set to undefined");
-
- test(function () {
- const event = new InterestEvent("test", { action: null });
- assert_equals(event.action, "null");
- }, "action set to null");
-
- test(function () {
- const event = new InterestEvent("test", { action: false });
- assert_equals(event.action, "false");
- }, "action set to false");
-
- test(function () {
- const event = new InterestEvent("test", { action: "" });
- assert_equals(event.action, "");
- }, "action explicitly set to empty string");
-
- test(function () {
- const event = new InterestEvent("test", { action: true });
- assert_equals(event.action, "true");
- }, "action set to true");
-
- test(function () {
- const event = new InterestEvent("test", { action: 0.5 });
- assert_equals(event.action, "0.5");
- }, "action set to a number");
-
- test(function () {
- const event = new InterestEvent("test", { action: [] });
- assert_equals(event.action, "");
- }, "action set to []");
-
- test(function () {
- const event = new InterestEvent("test", { action: [1, 2, 3] });
- assert_equals(event.action, "1,2,3");
- }, "action set to [1, 2, 3]");
-
- test(function () {
- const event = new InterestEvent("test", { action: { sample: 0.5 } });
- assert_equals(event.action, "[object Object]");
- }, "action set to an object");
-
- test(function () {
- const event = new InterestEvent("test", {
- action: {
- toString() {
- return "sample";
- },
- },
- });
- assert_equals(event.action, "sample");
- }, "action set to an object with a toString function");
-
- test(function () {
- const eventInit = { action: "sample", invoker: document.body };
+ const eventInit = { source: document.body };
const event = new InterestEvent("test", eventInit);
- assert_equals(event.action, "sample");
- assert_equals(event.invoker, document.body);
- }, "InterestEventInit properties set value");
+ assert_equals(event.source, document.body);
+ }, "InterestEventInit properties set value (manual event)");
test(function () {
const eventInit = {
- action: "open",
- invoker: document.getElementById("div"),
+ source: document.getElementById("div"),
};
const event = new InterestEvent("beforetoggle", eventInit);
- assert_equals(event.action, "open");
- assert_equals(event.invoker, document.getElementById("div"));
- }, "InterestEventInit properties set value 2");
+ assert_equals(event.source, document.getElementById("div"));
+ }, "InterestEventInit properties set value (beforetoggle event)");
test(function () {
const eventInit = {
- action: "closed",
- invoker: document.getElementById("button"),
+ source: document.getElementById("button"),
};
const event = new InterestEvent("toggle", eventInit);
- assert_equals(event.action, "closed");
- assert_equals(event.invoker, document.getElementById("button"));
- }, "InterestEventInit properties set value 3");
+ assert_equals(event.source, document.getElementById("button"));
+ }, "InterestEventInit properties set value (toggle event)");
test(function () {
- const event = new InterestEvent("test", { invoker: undefined });
- assert_equals(event.invoker, null);
- }, "invoker set to undefined");
+ const event = new InterestEvent("test", { source: undefined });
+ assert_equals(event.source, null);
+ }, "source set to undefined");
test(function () {
- const event = new InterestEvent("test", { invoker: null });
- assert_equals(event.invoker, null);
- }, "invoker set to null");
+ const event = new InterestEvent("test", { source: null });
+ assert_equals(event.source, null);
+ }, "source set to null");
test(function () {
assert_throws_js(
TypeError,
function () {
- new InterestEvent("test", { invoker: false });
+ new InterestEvent("test", { source: false });
},
- "invoker is not an object",
+ "source is not an object",
);
- }, "invoker set to false");
+ }, "source set to false");
test(function () {
assert_throws_js(
TypeError,
function () {
- const event = new InterestEvent("test", { invoker: true });
+ const event = new InterestEvent("test", { source: true });
},
- "invoker is not an object",
+ "source is not an object",
);
- }, "invoker set to true");
+ }, "source set to true");
test(function () {
assert_throws_js(
TypeError,
function () {
- const event = new InterestEvent("test", { invoker: {} });
+ const event = new InterestEvent("test", { source: {} });
},
- "invoker is not an object",
+ "source is not an object",
);
- }, "invoker set to {}");
+ }, "source set to {}");
test(function () {
assert_throws_js(
TypeError,
function () {
- const eventInit = { action: "closed", invoker: new XMLHttpRequest() };
+ const eventInit = { source: new XMLHttpRequest() };
const event = new InterestEvent("toggle", eventInit);
},
- "invoker is not an Element",
+ "source is not an Element",
);
- }, "invoker set to non-Element EventTarget");
+ }, "source set to non-Element EventTarget");
</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-anchor-event-dispatch.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-anchor-event-dispatch.tentative.html
index b5a481a..88a54c2 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-anchor-event-dispatch.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-anchor-event-dispatch.tentative.html
@@ -19,29 +19,14 @@
t.add_cleanup(() => otherbutton.focus());
let event = null;
interestee.addEventListener("interest", (e) => (event = e), { once: true });
- interestanchor.focus();
- assert_true(event instanceof InterestEvent, "event is InterestEvent");
- assert_equals(event.type, "interest", "type");
- assert_equals(event.bubbles, false, "bubbles");
- assert_equals(event.composed, true, "composed");
- assert_equals(event.isTrusted, true, "isTrusted");
- assert_equals(event.action, "", "action");
- assert_equals(event.target, interestee, "target");
- assert_equals(event.invoker, interestanchor, "invoker");
- }, "InterestEvent dispatches on anchor focus");
-
- promise_test(async function (t) {
- t.add_cleanup(() => otherbutton.focus());
- let event = null;
- interestee.addEventListener("interest", (e) => (event = e), { once: true });
await hoverOver(interestanchor);
+ assert_true(!!event, "InterestEvent is fired");
assert_true(event instanceof InterestEvent, "event is InterestEvent");
assert_equals(event.type, "interest", "type");
assert_equals(event.bubbles, false, "bubbles");
assert_equals(event.composed, true, "composed");
assert_equals(event.isTrusted, true, "isTrusted");
- assert_equals(event.action, "", "action");
assert_equals(event.target, interestee, "target");
- assert_equals(event.invoker, interestanchor, "invoker");
+ assert_equals(event.source, interestanchor, "source");
}, "InterestEvent dispatches on anchor hover");
</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-area-event-dispatch.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-area-event-dispatch.tentative.html
index 358acbb..5573235 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-area-event-dispatch.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-area-event-dispatch.tentative.html
@@ -22,29 +22,14 @@
t.add_cleanup(() => otherbutton.focus());
let event = null;
interestee.addEventListener("interest", (e) => (event = e), { once: true });
- interestarea.focus();
- assert_true(event instanceof InterestEvent, "event is InterestEvent");
- assert_equals(event.type, "interest", "type");
- assert_equals(event.bubbles, false, "bubbles");
- assert_equals(event.composed, true, "composed");
- assert_equals(event.isTrusted, true, "isTrusted");
- assert_equals(event.action, "", "action");
- assert_equals(event.target, interestee, "target");
- assert_equals(event.invoker, interestarea, "invoker");
- }, "InterestEvent dispatches on area focus");
-
- promise_test(async function (t) {
- t.add_cleanup(() => otherbutton.focus());
- let event = null;
- interestee.addEventListener("interest", (e) => (event = e), { once: true });
await hoverOver(interestarea);
+ assert_true(!!event, "InterestEvent is fired");
assert_true(event instanceof InterestEvent, "event is InterestEvent");
assert_equals(event.type, "interest", "type");
assert_equals(event.bubbles, false, "bubbles");
assert_equals(event.composed, true, "composed");
assert_equals(event.isTrusted, true, "isTrusted");
- assert_equals(event.action, "", "action");
assert_equals(event.target, interestee, "target");
- assert_equals(event.invoker, interestarea, "invoker");
+ assert_equals(event.source, interestarea, "source");
}, "InterestEvent dispatches on area hover");
</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-button-event-dispatch.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-button-event-dispatch.tentative.html
index 69126dbe..a9d68bb03 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-button-event-dispatch.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-button-event-dispatch.tentative.html
@@ -16,71 +16,23 @@
<script>
promise_test(async function (t) {
- t.add_cleanup(() => otherbutton.focus());
- let event = null;
- interestee.addEventListener("interest", (e) => (event = e), { once: true });
- interestbutton.focus();
- assert_true(event instanceof InterestEvent, "event is InterestEvent");
- assert_equals(event.type, "interest", "type");
- assert_equals(event.bubbles, false, "bubbles");
- assert_equals(event.composed, true, "composed");
- assert_equals(event.isTrusted, true, "isTrusted");
- assert_equals(event.action, "", "action");
- assert_equals(event.target, interestee, "target");
- assert_equals(event.invoker, interestbutton, "invoker");
- }, "InterestEvent dispatches on button focus");
-
- promise_test(async function (t) {
- t.add_cleanup(() => otherbutton.focus());
let event = null;
interestee.addEventListener("interest", (e) => (event = e), { once: true });
await hoverOver(interestbutton);
+ assert_true(!!event, "InterestEvent is fired");
assert_true(event instanceof InterestEvent, "event is InterestEvent");
assert_equals(event.type, "interest", "type");
assert_equals(event.bubbles, false, "bubbles");
assert_equals(event.composed, true, "composed");
assert_equals(event.isTrusted, true, "isTrusted");
- assert_equals(event.action, "", "action");
assert_equals(event.target, interestee, "target");
- assert_equals(event.invoker, interestbutton, "invoker");
+ assert_equals(event.source, interestbutton, "source");
}, "InterestEvent dispatches on button hover");
promise_test(async function (t) {
- t.add_cleanup(() => otherbutton.focus());
- let event = null;
- interestee.addEventListener("interest", (e) => (event = e), { once: true });
- interestbutton.interestAction = "fooBar";
- interestbutton.focus();
- assert_true(event instanceof InterestEvent, "event is InterestEvent");
- assert_equals(event.type, "interest", "type");
- assert_equals(event.bubbles, false, "bubbles");
- assert_equals(event.composed, true, "composed");
- assert_equals(event.isTrusted, true, "isTrusted");
- assert_equals(event.action, "fooBar", "action");
- assert_equals(event.target, interestee, "target");
- assert_equals(event.invoker, interestbutton, "invoker");
- }, "event action is set to interestAction");
-
- promise_test(async function (t) {
- t.add_cleanup(() => otherbutton.focus());
- let event = null;
- interestee.addEventListener("interest", (e) => (event = e), { once: true });
- interestbutton.setAttribute("interestaction", "BaRbAz");
- interestbutton.focus();
- assert_true(event instanceof InterestEvent, "event is InterestEvent");
- assert_equals(event.type, "interest", "type");
- assert_equals(event.bubbles, false, "bubbles");
- assert_equals(event.composed, true, "composed");
- assert_equals(event.isTrusted, true, "isTrusted");
- assert_equals(event.action, "BaRbAz", "action");
- assert_equals(event.target, interestee, "target");
- assert_equals(event.invoker, interestbutton, "invoker");
- }, "event action is set to interestaction attribute");
-
- promise_test(async function (t) {
- t.add_cleanup(() => {
+ t.add_cleanup(async () => {
interestbutton.removeAttribute('disabled');
- otherbutton.focus();
+ await hoverOver(otherbutton);
});
let called = false;
interestee.addEventListener(
@@ -91,34 +43,27 @@
{ once: true },
);
interestbutton.setAttribute("disabled", "");
- interestbutton.focus();
+ await hoverOver(interestbutton);
assert_false(called, "event was not called");
}, "event does not dispatch if invoker is disabled");
promise_test(async function (t) {
svgInterestee = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
- t.add_cleanup(() => {
+ t.add_cleanup(async () => {
interestbutton.interestTargetElement = interestee;
svgInterestee.remove();
- otherbutton.focus();
+ await hoverOver(otherbutton);
});
document.body.append(svgInterestee);
let called = false;
assert_false(svgInterestee instanceof HTMLElement);
assert_true(svgInterestee instanceof Element);
let event = null;
- svgInterestee.addEventListener(
- "interest",
- (e) => {
- event = e;
- called = true;
- },
- { once: true },
- );
+ svgInterestee.addEventListener("interest", (e) => (event = e), { once: true });
interestbutton.interestTargetElement = svgInterestee;
- interestbutton.focus();
- assert_true(called, "event was called");
- assert_equals(event.invoker, interestbutton, "event.invoker is set to right element");
+ await hoverOver(interestbutton);
+ assert_true(!!event, "InterestEvent is fired");
+ assert_equals(event.source, interestbutton, "event.source is set to right element");
assert_equals(event.target, svgInterestee, "event.target is set to right element");
}, "event dispatches if interestee is non-HTML Element");
</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-on-popover-behavior.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-on-popover-behavior.tentative.html
index fd0a77b9..cbb5e40 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-on-popover-behavior.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-on-popover-behavior.tentative.html
@@ -17,44 +17,17 @@
<button id="otherbutton">Other button</button>
<script>
- function reset() {
+ async function reset() {
hoverOver(otherbutton);
- otherbutton.focus();
+ await hoverOver(otherbutton);
interestee.hidePopover();
- interestbutton.removeAttribute("interestaction");
}
-
- // auto
-
promise_test(async function (t) {
t.add_cleanup(reset);
assert_false(interestee.matches(":popover-open"));
await hoverOver(interestbutton);
assert_true(interestee.matches(":popover-open"));
- }, "hover interest invoking (as auto) closed popover opens");
-
- promise_test(async function (t) {
- t.add_cleanup(reset);
- interestee.showPopover();
- assert_true(interestee.matches(":popover-open"));
- await hoverOver(interestbutton);
- assert_false(interestee.matches(":popover-open"));
- }, "hover interest invoking (as auto) open popover closes");
-
- promise_test(async function (t) {
- t.add_cleanup(reset);
- assert_false(interestee.matches(":popover-open"));
- interestbutton.focus();
- assert_true(interestee.matches(":popover-open"));
- }, "focus interest invoking (as auto) closed popover opens");
-
- promise_test(async function (t) {
- t.add_cleanup(reset);
- interestee.showPopover();
- assert_true(interestee.matches(":popover-open"));
- interestbutton.focus();
- assert_false(interestee.matches(":popover-open"));
- }, "focus interest invoking (as auto) open popover closes");
+ }, "hover interest invoking closed popover opens");
promise_test(async function (t) {
t.add_cleanup(reset);
@@ -64,50 +37,5 @@
});
await hoverOver(interestbutton);
assert_false(interestee.matches(":popover-open"));
- }, "interest invoking (as auto) closed popover with preventDefault does not open");
-
- // togglepopover
-
- promise_test(async function (t) {
- t.add_cleanup(reset);
- assert_false(interestee.matches(":popover-open"));
- interestbutton.setAttribute("interestaction", "toggle-popover");
- await hoverOver(interestbutton);
- assert_true(interestee.matches(":popover-open"));
- }, "hover interest invoking (as togglepopover) closed popover opens");
-
- promise_test(async function (t) {
- t.add_cleanup(reset);
- interestee.showPopover();
- assert_true(interestee.matches(":popover-open"));
- interestbutton.setAttribute("interestaction", "toggle-popover");
- await hoverOver(interestbutton);
- assert_false(interestee.matches(":popover-open"));
- }, "hover interest invoking (as togglepopover) open popover closes");
-
- promise_test(async function (t) {
- t.add_cleanup(reset);
- assert_false(interestee.matches(":popover-open"));
- interestbutton.setAttribute("interestaction", "toggle-popover");
- interestbutton.focus();
- assert_true(interestee.matches(":popover-open"));
- }, "focus interest invoking (as togglepopover) closed popover opens");
-
- promise_test(async function (t) {
- t.add_cleanup(reset);
- interestee.showPopover();
- assert_true(interestee.matches(":popover-open"));
- interestbutton.setAttribute("interestaction", "toggle-popover");
- interestbutton.focus();
- assert_false(interestee.matches(":popover-open"));
- }, "focus interest invoking (as togglepopover) open popover closes");
-
- promise_test(async function (t) {
- t.add_cleanup(reset);
- assert_false(interestee.matches(":popover-open"));
- interestbutton.setAttribute("interestaction", "tOgGlE-pOpOvEr");
- interestbutton.focus();
- assert_true(interestee.matches(":popover-open"));
- }, "interest invoking (as togglepopover - case insensitive) closed popover opens");
-
+ }, "interest invoking closed popover with preventDefault does not open");
</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-svg-a-event-dispatch.tentative.html b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-svg-a-event-dispatch.tentative.html
index 7fb4b1c19..8208c8d 100644
--- a/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-svg-a-event-dispatch.tentative.html
+++ b/third_party/blink/web_tests/external/wpt/html/semantics/the-button-element/interest-target/interesttarget-svg-a-event-dispatch.tentative.html
@@ -20,32 +20,19 @@
<script>
promise_test(async function (t) {
- t.add_cleanup(() => otherbutton.focus());
- let event = null;
- interestee.addEventListener("interest", (e) => (event = e), { once: true });
- interestsvga.focus();
- assert_true(event instanceof InterestEvent, "event is InterestEvent");
- assert_equals(event.type, "interest", "type");
- assert_equals(event.bubbles, false, "bubbles");
- assert_equals(event.composed, true, "composed");
- assert_equals(event.isTrusted, true, "isTrusted");
- assert_equals(event.action, "", "action");
- assert_equals(event.target, interestee, "target");
- assert_equals(event.invoker, interestsvga, "invoker");
- }, "InterestEvent dispatches on svg a focus");
-
- promise_test(async function (t) {
- t.add_cleanup(() => otherbutton.focus());
+ t.add_cleanup(async () => {
+ await hoverOver(otherbutton);
+ });
let event = null;
interestee.addEventListener("interest", (e) => (event = e), { once: true });
await hoverOver(interestsvga);
+ assert_true(!!event, "InterestEvent is fired");
assert_true(event instanceof InterestEvent, "event is InterestEvent");
assert_equals(event.type, "interest", "type");
assert_equals(event.bubbles, false, "bubbles");
assert_equals(event.composed, true, "composed");
assert_equals(event.isTrusted, true, "isTrusted");
- assert_equals(event.action, "", "action");
assert_equals(event.target, interestee, "target");
- assert_equals(event.invoker, interestsvga, "invoker");
+ assert_equals(event.source, interestsvga, "source");
}, "InterestEvent dispatches on svg a hover");
</script>
diff --git a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
index 7bd5528..f58ad5e4 100644
--- a/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/element-instance-property-listing-expected.txt
@@ -364,7 +364,6 @@
property href
property hrefTranslate
property hreflang
- property interestAction
property interestTargetElement
property name
property origin
@@ -395,7 +394,6 @@
property host
property hostname
property href
- property interestAction
property interestTargetElement
property noHref
property origin
@@ -517,7 +515,6 @@
property formMethod
property formNoValidate
property formTarget
- property interestAction
property interestTargetElement
property labels
property name
@@ -775,7 +772,6 @@
property height
property incremental
property indeterminate
- property interestAction
property interestTargetElement
property labels
property list
@@ -1611,7 +1607,6 @@
property getCTM
property getScreenCTM
property href
- property interestAction
property interestTargetElement
property nearestViewportElement
property requiredExtensions
diff --git a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
index 97cf6af..f36ecf2b 100644
--- a/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/webexposed/global-interface-listing-expected.txt
@@ -3564,7 +3564,6 @@
getter href
getter hrefTranslate
getter hreflang
- getter interestAction
getter interestTargetElement
getter name
getter origin
@@ -3595,7 +3594,6 @@
setter href
setter hrefTranslate
setter hreflang
- setter interestAction
setter interestTargetElement
setter name
setter password
@@ -3623,7 +3621,6 @@
getter host
getter hostname
getter href
- getter interestAction
getter interestTargetElement
getter noHref
getter origin
@@ -3649,7 +3646,6 @@
setter host
setter hostname
setter href
- setter interestAction
setter interestTargetElement
setter noHref
setter password
@@ -3753,7 +3749,6 @@
getter formMethod
getter formNoValidate
getter formTarget
- getter interestAction
getter interestTargetElement
getter labels
getter name
@@ -3776,7 +3771,6 @@
setter formMethod
setter formNoValidate
setter formTarget
- setter interestAction
setter interestTargetElement
setter name
setter popoverTargetAction
@@ -4453,7 +4447,6 @@
getter height
getter incremental
getter indeterminate
- getter interestAction
getter interestTargetElement
getter labels
getter list
@@ -4514,7 +4507,6 @@
setter height
setter incremental
setter indeterminate
- setter interestAction
setter interestTargetElement
setter max
setter maxLength
@@ -5665,8 +5657,7 @@
method getTargetRanges
interface InterestEvent : Event
attribute @@toStringTag
- getter action
- getter invoker
+ getter source
method constructor
interface IntersectionObserver
attribute @@toStringTag
@@ -8175,11 +8166,9 @@
interface SVGAElement : SVGGraphicsElement
attribute @@toStringTag
getter href
- getter interestAction
getter interestTargetElement
getter target
method constructor
- setter interestAction
setter interestTargetElement
interface SVGAngle
attribute @@toStringTag