Changeset 269321 in webkit
- Timestamp:
- Nov 3, 2020, 11:36:08 AM (6 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
dom/GenericEventQueue.cpp (modified) (1 diff)
-
html/HTMLMediaElement.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r269314 r269321 1 2020-11-03 Jer Noble <jer.noble@apple.com> 2 3 Protect against HTMLMediaElement being destroyed during disptachEvent(). 4 https://bugs.webkit.org/show_bug.cgi?id=218398 5 <rdar://problem/67613836> 6 7 Reviewed by Chris Dumez. 8 9 Make the MainThreadGenericEventQueue protect the target as well as the owner of the queue. 10 11 Drive-by fix: Create the scoped `eventFiringScope` object after the `protect` object, to ensure 12 that the member variable set by the first scope will safely occur. 13 14 Drive-by fix #2: Also null-check the result of document().page() within HTMLMediaElement::dispatchEvent(). 15 16 * dom/GenericEventQueue.cpp: 17 (WebCore::MainThreadGenericEventQueue::dispatchOneEvent): 18 * html/HTMLMediaElement.cpp: 19 (WebCore::HTMLMediaElement::dispatchEvent): 20 1 21 2020-11-03 Commit Queue <commit-queue@webkit.org> 2 22 -
trunk/Source/WebCore/dom/GenericEventQueue.cpp
r259299 r269321 65 65 ASSERT(!m_pendingEvents.isEmpty()); 66 66 67 Ref<EventTarget> protect(m_owner); 67 68 SetForScope<bool> eventFiringScope(m_isFiringEvent, true); 68 Ref<EventTarget> protect(m_owner);69 69 70 70 RefPtr<Event> event = m_pendingEvents.takeFirst(); 71 EventTarget&target = event->target() ? *event->target() : m_owner;72 ASSERT_WITH_MESSAGE(!target .scriptExecutionContext()->activeDOMObjectsAreStopped(),71 Ref<EventTarget> target = event->target() ? *event->target() : m_owner; 72 ASSERT_WITH_MESSAGE(!target->scriptExecutionContext()->activeDOMObjectsAreStopped(), 73 73 "An attempt to dispatch an event on a stopped target by EventTargetInterface=%d (nodeName=%s target=%p owner=%p)", 74 m_owner.eventTargetInterface(), m_owner.isNode() ? static_cast<Node&>(m_owner).nodeName().ascii().data() : "", &target, &m_owner);75 target .dispatchEvent(*event);74 m_owner.eventTargetInterface(), m_owner.isNode() ? static_cast<Node&>(m_owner).nodeName().ascii().data() : "", target.ptr(), &m_owner); 75 target->dispatchEvent(*event); 76 76 } 77 77 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r268865 r269321 6020 6020 6021 6021 setFullscreenMode(VideoFullscreenModeNone); 6022 document().page()->chrome().client().exitVideoFullscreenForVideoElement(downcast<HTMLVideoElement>(*this)); 6022 if (auto* page = document().page()) 6023 page->chrome().client().exitVideoFullscreenForVideoElement(downcast<HTMLVideoElement>(*this)); 6023 6024 } 6024 6025 }
Note:
See TracChangeset
for help on using the changeset viewer.