Changeset 196837 in webkit
- Timestamp:
- Feb 19, 2016 2:59:25 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r196833 r196837 1 2016-02-19 Simon Fraser <simon.fraser@apple.com> 2 3 Wheel event callback removing the window causes crash in WebCore. 4 https://bugs.webkit.org/show_bug.cgi?id=150871 5 6 Reviewed by Brent Fulgham. 7 8 * fast/events/wheel-event-destroys-frame-expected.txt: Added. 9 * fast/events/wheel-event-destroys-frame.html: Added. 10 1 11 2016-02-19 Antti Koivisto <antti@apple.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r196835 r196837 1 2016-02-19 Simon Fraser <simon.fraser@apple.com> 2 3 Wheel event callback removing the window causes crash in WebCore. 4 https://bugs.webkit.org/show_bug.cgi?id=150871 5 6 Reviewed by Brent Fulgham. 7 8 Null check the FrameView before using it, since the iframe may have been removed 9 from its parent document inside the event handler. 10 11 The new test triggered a cross-load side-effect, where wheel event filtering wasn't 12 reset between page loads. Fix by calling clearLatchedState() in EventHandler::clear(), 13 which resets the filtering. 14 15 Test: fast/events/wheel-event-destroys-frame.html 16 17 * page/EventHandler.cpp: 18 (WebCore::EventHandler::clear): 19 * page/WheelEventDeltaFilter.cpp: 20 (WebCore::WheelEventDeltaFilter::filteredDelta): 21 * page/mac/EventHandlerMac.mm: 22 (WebCore::EventHandler::platformCompleteWheelEvent): 23 * rendering/RenderLayer.cpp: 24 (WebCore::RenderLayer::scrollTo): 25 1 26 2016-02-19 Myles C. Maxfield <mmaxfield@apple.com> 2 27 -
trunk/Source/WebCore/page/EventHandler.cpp
r196640 r196837 453 453 m_capturesDragging = false; 454 454 m_capturingMouseEventsElement = nullptr; 455 #if PLATFORM(MAC) 456 m_frame.mainFrame().resetLatchingState(); 457 #endif 455 clearLatchedState(); 458 456 #if ENABLE(TOUCH_EVENTS) && !ENABLE(IOS_TOUCH_EVENTS) 459 457 m_originatingTouchPointTargets.clear(); … … 2665 2663 m_frame.mainFrame().resetLatchingState(); 2666 2664 #endif 2667 m_frame.mainFrame().wheelEventDeltaFilter()->endFilteringDeltas(); 2665 if (WheelEventDeltaFilter* filter = m_frame.mainFrame().wheelEventDeltaFilter()) 2666 filter->endFilteringDeltas(); 2668 2667 } 2669 2668 -
trunk/Source/WebCore/page/WheelEventDeltaFilter.cpp
r188869 r196837 32 32 33 33 #include "FloatSize.h" 34 #include "Logging.h" 35 #include "TextStream.h" 34 36 35 37 namespace WebCore { … … 59 61 FloatSize WheelEventDeltaFilter::filteredDelta() const 60 62 { 63 LOG_WITH_STREAM(Scrolling, stream << "BasicWheelEventDeltaFilter::filteredDelta returning " << m_currentFilteredDelta); 61 64 return m_currentFilteredDelta; 62 65 } -
trunk/Source/WebCore/page/mac/EventHandlerMac.mm
r196801 r196837 1009 1009 bool EventHandler::platformCompleteWheelEvent(const PlatformWheelEvent& wheelEvent, ContainerNode* scrollableContainer, ScrollableArea* scrollableArea) 1010 1010 { 1011 FrameView* view = m_frame.view(); 1011 1012 // We do another check on the frame view because the event handler can run JS which results in the frame getting destroyed. 1012 ASSERT(m_frame.view());1013 FrameView* view = m_frame.view();1013 if (!view) 1014 return false; 1014 1015 1015 1016 ScrollLatchingState* latchingState = m_frame.mainFrame().latchingState(); -
trunk/Source/WebCore/rendering/RenderLayer.cpp
r196688 r196837 2350 2350 return; 2351 2351 2352 LOG_WITH_STREAM(Scrolling, stream << "RenderLayer::scrollTo " << position); 2353 2352 2354 ScrollPosition newPosition = position; 2353 2355 if (box->style().overflowX() != OMARQUEE) {
Note: See TracChangeset
for help on using the changeset viewer.