Changeset 269546 in webkit
- Timestamp:
- Nov 6, 2020 3:28:43 PM (21 months ago)
- Location:
- trunk
- Files:
-
- 6 added
- 12 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/events/shadow-tree-resetTargets-after-move-in-expected.txt (added)
-
LayoutTests/fast/events/shadow-tree-resetTargets-after-move-in.html (added)
-
LayoutTests/fast/events/shadow-tree-resetTargets-after-move-out-expected.txt (added)
-
LayoutTests/fast/events/shadow-tree-resetTargets-after-move-out.html (added)
-
LayoutTests/fast/events/shadow-tree-resetTargets-expected.txt (added)
-
LayoutTests/fast/events/shadow-tree-resetTargets.html (added)
-
LayoutTests/fast/shadow-dom/event-path-with-window.html (modified) (1 diff)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/dom/events/relatedTarget.window-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/shadow-dom/event-post-dispatch-expected.txt (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/dom/Event.h (modified) (1 diff)
-
Source/WebCore/dom/EventContext.cpp (modified) (1 diff)
-
Source/WebCore/dom/EventContext.h (modified) (2 diffs)
-
Source/WebCore/dom/EventDispatcher.cpp (modified) (3 diffs)
-
Source/WebCore/dom/FocusEvent.h (modified) (1 diff)
-
Source/WebCore/dom/MouseEvent.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r269532 r269546 1 2020-11-06 Chris Dumez <cdumez@apple.com> 2 3 Event targets should be cleared after dispatch if target pointed to a shadow tree 4 https://bugs.webkit.org/show_bug.cgi?id=218638 5 6 Reviewed by Darin Adler. 7 8 * fast/events/shadow-tree-resetTargets-after-move-in-expected.txt: Added. 9 * fast/events/shadow-tree-resetTargets-after-move-in.html: Added. 10 * fast/events/shadow-tree-resetTargets-after-move-out-expected.txt: Added. 11 * fast/events/shadow-tree-resetTargets-after-move-out.html: Added. 12 * fast/events/shadow-tree-resetTargets-expected.txt: Added. 13 * fast/events/shadow-tree-resetTargets.html: Added. 14 Extend layout test coverage. 15 16 * fast/shadow-dom/event-path-with-window.html: 17 Update the test to expect the the event.target is null after dispatching. Note that this test 18 was failing in both Firefox and Chrome before this test change, and is now passing with these 19 engine after the test change. 20 1 21 2020-11-06 Devin Rousso <drousso@apple.com> 2 22 -
trunk/LayoutTests/fast/shadow-dom/event-path-with-window.html
r249918 r269546 42 42 assert_array_equals(log.pathAtTargets[1], expectedPath); 43 43 44 assert_equals(log.event.target, n odes.A1a);44 assert_equals(log.event.target, null); 45 45 assert_equals(log.event.currentTarget, null); 46 46 }, 'The event must propagate out of ' + mode + ' mode shadow boundaries when the composed flag is set 1'); -
trunk/LayoutTests/imported/w3c/ChangeLog
r269531 r269546 1 2020-11-06 Chris Dumez <cdumez@apple.com> 2 3 Event targets should be cleared after dispatch if target pointed to a shadow tree 4 https://bugs.webkit.org/show_bug.cgi?id=218638 5 6 Reviewed by Darin Adler. 7 8 Rebaseline WPT tests now that more checks are passing. 9 10 * web-platform-tests/dom/events/relatedTarget.window-expected.txt: 11 * web-platform-tests/shadow-dom/event-post-dispatch-expected.txt: 12 1 13 2020-11-06 Yusuke Suzuki <ysuzuki@apple.com> 2 14 -
trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/relatedTarget.window-expected.txt
r267660 r269546 1 1 2 FAIL Reset if target pointed to a shadow tree assert_equals: expected null but got DocumentFragment node with 1 child 2 PASS Reset if target pointed to a shadow tree 3 3 FAIL Retarget a shadow-tree relatedTarget assert_equals: expected Element node <div><p></p></div> but got DocumentFragment node with 1 child 4 FAIL Reset if target pointed to a shadow tree pre-dispatch assert_equals: expected null but got Element node <div></div> 4 PASS Reset if target pointed to a shadow tree pre-dispatch 5 5 PASS Retarget a shadow-tree relatedTarget, part 2 6 6 FAIL Reset targets on early return assert_equals: expected null but got Element node <div><p></p></div> -
trunk/LayoutTests/imported/w3c/web-platform-tests/shadow-dom/event-post-dispatch-expected.txt
r267647 r269546 3 3 PASS Event properties post dispatch without ShadowRoots (composed: false). 4 4 PASS Event properties post dispatch with an open ShadowRoot (composed: true). 5 FAIL Event properties post dispatch with an open ShadowRoot (composed: false). assert_equals: expected null but got Element node <div id="target"></div> 5 PASS Event properties post dispatch with an open ShadowRoot (composed: false). 6 6 PASS Event properties post dispatch with a closed ShadowRoot (composed: true). 7 FAIL Event properties post dispatch with a closed ShadowRoot (composed: false). assert_equals: expected null but got Element node <div id="target"></div> 7 PASS Event properties post dispatch with a closed ShadowRoot (composed: false). 8 8 PASS Event properties post dispatch with nested ShadowRoots (composed: true). 9 FAIL Event properties post dispatch with nested ShadowRoots (composed: false). assert_equals: expected null but got Element node <div id="target"></div> 10 FAIL Event properties post dispatch with relatedTarget in the same shadow tree. (composed: true) assert_equals: expected null but got Element node <div id="target"></div> 11 FAIL Event properties post dispatch with relatedTarget in the same shadow tree. (composed: false) assert_equals: expected null but got Element node <div id="target"></div> 9 PASS Event properties post dispatch with nested ShadowRoots (composed: false). 10 PASS Event properties post dispatch with relatedTarget in the same shadow tree. (composed: true) 11 PASS Event properties post dispatch with relatedTarget in the same shadow tree. (composed: false) 12 12 PASS Event properties post dispatch with relatedTarget in the document tree and the shadow tree. (composed: true) 13 FAIL Event properties post dispatch with relatedTarget in the document tree and the shadow tree. (composed: false) assert_equals: expected null but got Element node <div id="target"></div> 13 PASS Event properties post dispatch with relatedTarget in the document tree and the shadow tree. (composed: false) 14 14 PASS Event properties post dispatch with relatedTarget in the different shadow trees. (composed: true) 15 FAIL Event properties post dispatch with relatedTarget in the different shadow trees. (composed: false) assert_equals: expected null but got Element node <div id="target"></div> 15 PASS Event properties post dispatch with relatedTarget in the different shadow trees. (composed: false) 16 16 -
trunk/Source/WebCore/ChangeLog
r269545 r269546 1 2020-11-06 Chris Dumez <cdumez@apple.com> 2 3 Event targets should be cleared after dispatch if target pointed to a shadow tree 4 https://bugs.webkit.org/show_bug.cgi?id=218638 5 6 Reviewed by Darin Adler. 7 8 Event target & relatedTarget should be cleared after dispatch if target pointed to a shadow 9 tree: 10 - https://dom.spec.whatwg.org/#concept-event-dispatch (Steps 5.10, 5.11 and 10) 11 12 Tests: fast/events/shadow-tree-resetTargets-after-move-in.html 13 fast/events/shadow-tree-resetTargets-after-move-out.html 14 fast/events/shadow-tree-resetTargets.html 15 16 * dom/Event.h: 17 (WebCore::Event::setRelatedTarget): 18 * dom/EventContext.cpp: 19 (WebCore::MouseOrFocusEventContext::handleLocalEvents const): 20 * dom/EventContext.h: 21 (WebCore::EventContext::relatedTarget const): 22 * dom/EventDispatcher.cpp: 23 (WebCore::isInShadowTree): 24 (WebCore::EventDispatcher::dispatchEvent): 25 * dom/FocusEvent.h: 26 * dom/MouseEvent.h: 27 1 28 2020-11-06 Sam Weinig <weinig@apple.com> 2 29 -
trunk/Source/WebCore/dom/Event.h
r269500 r269546 142 142 143 143 virtual EventTarget* relatedTarget() const { return nullptr; } 144 virtual void setRelatedTarget(EventTarget &) { }144 virtual void setRelatedTarget(EventTarget*) { } 145 145 146 146 protected: -
trunk/Source/WebCore/dom/EventContext.cpp
r269500 r269546 79 79 { 80 80 if (m_relatedTarget) 81 event.setRelatedTarget( *m_relatedTarget);81 event.setRelatedTarget(m_relatedTarget.get()); 82 82 EventContext::handleLocalEvents(event, phase); 83 83 } -
trunk/Source/WebCore/dom/EventContext.h
r269500 r269546 53 53 virtual bool isTouchEventContext() const; 54 54 55 virtual Node* relatedTarget() const { return nullptr; } 56 55 57 protected: 56 58 #if ASSERT_ENABLED … … 70 72 virtual ~MouseOrFocusEventContext(); 71 73 72 Node* relatedTarget() const { return m_relatedTarget.get(); }74 Node* relatedTarget() const final { return m_relatedTarget.get(); } 73 75 void setRelatedTarget(Node*); 74 76 -
trunk/Source/WebCore/dom/EventDispatcher.cpp
r236002 r269546 74 74 } 75 75 76 static bool isInShadowTree(EventTarget* target) 77 { 78 return is<Node>(target) && downcast<Node>(*target).isInShadowTree(); 79 } 80 76 81 static void dispatchEventInDOM(Event& event, const EventPath& path) 77 82 { … … 135 140 EventPath eventPath { node, event }; 136 141 142 Optional<bool> shouldClearTargetsAfterDispatch; 143 for (size_t i = eventPath.size(); i > 0; --i) { 144 const EventContext& eventContext = eventPath.contextAt(i - 1); 145 // FIXME: We should also set shouldClearTargetsAfterDispatch to true if an EventTarget object in eventContext's touch target list 146 // is a node and its root is a shadow root. 147 if (eventContext.target()) { 148 shouldClearTargetsAfterDispatch = isInShadowTree(eventContext.target()) || isInShadowTree(eventContext.relatedTarget()); 149 break; 150 } 151 } 152 137 153 ChildNodesLazySnapshot::takeChildNodesLazySnapshot(); 138 154 … … 171 187 event.setTarget(finalTarget); 172 188 } 189 190 if (shouldClearTargetsAfterDispatch.valueOr(false)) { 191 event.setTarget(nullptr); 192 event.setRelatedTarget(nullptr); 193 // FIXME: We should also clear the event's touch target list. 194 } 173 195 } 174 196 -
trunk/Source/WebCore/dom/FocusEvent.h
r250060 r269546 66 66 bool isFocusEvent() const final; 67 67 68 void setRelatedTarget(EventTarget & relatedTarget) final { m_relatedTarget = &relatedTarget; }68 void setRelatedTarget(EventTarget* relatedTarget) final { m_relatedTarget = relatedTarget; } 69 69 70 70 RefPtr<EventTarget> m_relatedTarget; -
trunk/Source/WebCore/dom/MouseEvent.h
r254029 r269546 105 105 EventInterface eventInterface() const override; 106 106 107 void setRelatedTarget(EventTarget & relatedTarget) final { m_relatedTarget = &relatedTarget; }107 void setRelatedTarget(EventTarget* relatedTarget) final { m_relatedTarget = relatedTarget; } 108 108 109 109 short m_button { 0 };
Note: See TracChangeset
for help on using the changeset viewer.