Changeset 269500 in webkit
- Timestamp:
- Nov 5, 2020 6:05:47 PM (21 months ago)
- Location:
- trunk
- Files:
-
- 9 edited
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global-extra.window-expected.txt (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/bindings/js/JSEventListener.cpp (modified) (1 diff)
-
Source/WebCore/dom/Event.cpp (modified) (3 diffs)
-
Source/WebCore/dom/Event.h (modified) (2 diffs)
-
Source/WebCore/dom/EventContext.cpp (modified) (2 diffs)
-
Source/WebCore/dom/EventContext.h (modified) (2 diffs)
-
Source/WebCore/dom/EventPath.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/imported/w3c/ChangeLog
r269499 r269500 1 2020-11-05 Chris Dumez <cdumez@apple.com> 2 3 window.event should not be affected by nodes moving post-dispatch 4 https://bugs.webkit.org/show_bug.cgi?id=218635 5 6 Reviewed by Geoffrey Garen. 7 8 Rebaseline test now that it is fully passing. 9 10 * web-platform-tests/dom/events/event-global-extra.window-expected.txt: 11 1 12 2020-11-05 Alex Christensen <achristensen@webkit.org> 2 13 -
trunk/LayoutTests/imported/w3c/web-platform-tests/dom/events/event-global-extra.window-expected.txt
r269414 r269500 4 4 PASS window.event and element from another document 5 5 PASS window.event and moving an element post-dispatch 6 FAIL window.event should not be affected by nodes moving post-dispatch assert_equals: expected (undefined) undefined but got (object) object "[object Event]" 6 PASS window.event should not be affected by nodes moving post-dispatch 7 7 PASS Listener from a different global 8 8 -
trunk/Source/WebCore/ChangeLog
r269499 r269500 1 2020-11-05 Chris Dumez <cdumez@apple.com> 2 3 window.event should not be affected by nodes moving post-dispatch 4 https://bugs.webkit.org/show_bug.cgi?id=218635 5 6 Reviewed by Geoffrey Garen. 7 8 window.event should not be affected by nodes moving post-dispatch: 9 - https://dom.spec.whatwg.org/#concept-event-listener-invoke 10 11 In particular, window.event should not get set when the event target was inside 12 a shadow tree initially when dispatchEvent() got called, even if the event target 13 gets moved out of the shadow tree during the execution of the event listeners. 14 15 Previously, our code was checking if the node was in a shadow tree at the point 16 of calling each event listener, instead of doing that check very initially when 17 dispatchEvent() is called. 18 19 No new tests, rebaselined existing test. 20 21 * bindings/js/JSEventListener.cpp: 22 (WebCore::JSEventListener::handleEvent): 23 * dom/Event.cpp: 24 (WebCore::Event::setCurrentTarget): 25 (WebCore::Event::resetAfterDispatch): 26 * dom/Event.h: 27 (WebCore::Event::currentTargetIsInShadowTree const): 28 * dom/EventContext.cpp: 29 (WebCore::EventContext::handleLocalEvents const): 30 * dom/EventContext.h: 31 (WebCore::EventContext::isCurrentTargetInShadowTree const): 32 * dom/EventPath.cpp: 33 (WebCore::WindowEventContext::handleLocalEvents const): 34 1 35 2020-11-05 Alex Christensen <achristensen@webkit.org> 2 36 -
trunk/Source/WebCore/bindings/js/JSEventListener.cpp
r269414 r269500 170 170 171 171 // window.event should not be set when the target is inside a shadow tree, as per the DOM specification. 172 bool isTargetInsideShadowTree = is<Node>(event.currentTarget()) && downcast<Node>(*event.currentTarget()).isInShadowTree(); 173 if (!isTargetInsideShadowTree) 172 if (!event.currentTargetIsInShadowTree()) 174 173 jsFunctionWindow->setCurrentEvent(&event); 175 174 } -
trunk/Source/WebCore/dom/Event.cpp
r250060 r269500 51 51 , m_isTrusted { isTrusted == IsTrusted::Yes } 52 52 , m_isExecutingPassiveEventListener { false } 53 , m_currentTargetIsInShadowTree { false } 53 54 , m_eventPhase { NONE } 54 55 , m_type { type } … … 128 129 } 129 130 130 void Event::setCurrentTarget(EventTarget* currentTarget )131 void Event::setCurrentTarget(EventTarget* currentTarget, Optional<bool> isInShadowTree) 131 132 { 132 133 m_currentTarget = currentTarget; 134 m_currentTargetIsInShadowTree = isInShadowTree ? *isInShadowTree : (is<Node>(currentTarget) && downcast<Node>(*currentTarget).isInShadowTree()); 133 135 } 134 136 … … 172 174 { 173 175 m_eventPath = nullptr; 174 m_currentTarget = nullptr;176 setCurrentTarget(nullptr); 175 177 m_eventPhase = NONE; 176 178 m_propagationStopped = false; -
trunk/Source/WebCore/dom/Event.h
r250060 r269500 71 71 72 72 EventTarget* currentTarget() const { return m_currentTarget.get(); } 73 void setCurrentTarget(EventTarget*); 73 void setCurrentTarget(EventTarget*, Optional<bool> isInShadowTree = WTF::nullopt); 74 bool currentTargetIsInShadowTree() const { return m_currentTargetIsInShadowTree; } 74 75 75 76 unsigned short eventPhase() const { return m_eventPhase; } … … 168 169 unsigned m_isTrusted : 1; 169 170 unsigned m_isExecutingPassiveEventListener : 1; 171 unsigned m_currentTargetIsInShadowTree : 1; 170 172 171 173 unsigned m_eventPhase : 2; -
trunk/Source/WebCore/dom/EventContext.cpp
r254087 r269500 41 41 , m_target { target } 42 42 , m_closedShadowDepth { closedShadowDepth } 43 , m_currentTargetIsInShadowTree { is<Node>(currentTarget) && downcast<Node>(*currentTarget).isInShadowTree() } 43 44 { 44 45 ASSERT(!isUnreachableNode(m_target.get())); … … 50 51 { 51 52 event.setTarget(m_target.get()); 52 event.setCurrentTarget(m_currentTarget.get() );53 event.setCurrentTarget(m_currentTarget.get(), m_currentTargetIsInShadowTree); 53 54 // FIXME: Consider merging handleLocalEvents and fireEventListeners. 54 55 if (m_node) -
trunk/Source/WebCore/dom/EventContext.h
r254087 r269500 44 44 Node* node() const { return m_node.get(); } 45 45 EventTarget* currentTarget() const { return m_currentTarget.get(); } 46 bool isCurrentTargetInShadowTree() const { return m_currentTargetIsInShadowTree; } 46 47 EventTarget* target() const { return m_target.get(); } 47 48 int closedShadowDepth() const { return m_closedShadowDepth; } … … 61 62 RefPtr<EventTarget> m_target; 62 63 int m_closedShadowDepth { 0 }; 64 bool m_currentTargetIsInShadowTree { false }; 63 65 }; 64 66 -
trunk/Source/WebCore/dom/EventPath.cpp
r261028 r269500 51 51 { 52 52 event.setTarget(m_target.get()); 53 event.setCurrentTarget(m_currentTarget.get() );53 event.setCurrentTarget(m_currentTarget.get(), m_currentTargetIsInShadowTree); 54 54 m_currentTarget->fireEventListeners(event, phase); 55 55 }
Note: See TracChangeset
for help on using the changeset viewer.