Changeset 19005 in webkit
- Timestamp:
- Jan 20, 2007 4:35:32 PM (17 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r19004 r19005 1 2007-01-20 Mitz Pettel <mitz@webkit.org> 2 3 Reviewed by Darin. 4 5 - test for http://bugs.webkit.org/show_bug.cgi?id=8360 6 Repro crash when onscroll handler deletes the scrolled object 7 8 * fast/layers/removed-by-scroll-handler-expected.checksum: Added. 9 * fast/layers/removed-by-scroll-handler-expected.png: Added. 10 * fast/layers/removed-by-scroll-handler-expected.txt: Added. 11 * fast/layers/removed-by-scroll-handler.html: Added. 12 1 13 2007-01-20 Nikolas Zimmermann <zimmermann@kde.org> 2 14 -
trunk/WebCore/ChangeLog
r19003 r19005 1 2007-01-20 Mitz Pettel <mitz@webkit.org> 2 3 Reviewed by Darin. 4 5 - fix http://bugs.webkit.org/show_bug.cgi?id=8360 6 Repro crash when onscroll handler deletes the scrolled object 7 8 Test: fast/layers/removed-by-scroll-handler.html 9 10 * rendering/RenderLayer.cpp: 11 (WebCore::RenderLayer::RenderLayer): 12 (WebCore::RenderLayer::dispatchScrollEvent): Added. Called when the timer 13 fires and dispatches the scroll event to the layer's element. 14 (WebCore::RenderLayer::scrollToOffset): Instead of dispatching the scroll 15 event from this function, which is called during layout, schedule a 0-duration 16 timer to dispatch the event after layout. 17 (WebCore::RenderLayer::scrollRectToVisible): 18 (WebCore::RenderLayer::updateScrollInfoAfterLayout): 19 (WebCore::Marquee::start): 20 * rendering/RenderLayer.h: 21 1 22 2007-01-20 Nikolas Zimmermann <zimmermann@kde.org> 2 23 -
trunk/WebCore/rendering/RenderLayer.cpp
r18951 r19005 113 113 114 114 RenderLayer::RenderLayer(RenderObject* object) 115 : m_object(object), 116 m_parent(0), 117 m_previous(0), 118 m_next(0), 119 m_first(0), 120 m_last(0), 121 m_repaintX(0), 122 m_repaintY(0), 123 m_relX(0), 124 m_relY(0), 125 m_x(0), 126 m_y(0), 127 m_width(0), 128 m_height(0), 129 m_scrollX(0), 130 m_scrollY(0), 131 m_scrollOriginX(0), 132 m_scrollLeftOverflow(0), 133 m_scrollWidth(0), 134 m_scrollHeight(0), 135 m_inResizeMode(false), 136 m_posZOrderList(0), 137 m_negZOrderList(0), 138 m_overflowList(0), 139 m_clipRects(0) , 140 m_scrollDimensionsDirty(true), 141 m_zOrderListsDirty(true), 142 m_overflowListDirty(true), 143 m_isOverflowOnly(shouldBeOverflowOnly()), 144 m_usedTransparency(false), 145 m_inOverflowRelayout(false), 146 m_repaintOverflowOnResize(false), 147 m_overflowStatusDirty(true), 148 m_visibleContentStatusDirty( true ), 149 m_hasVisibleContent( false ), 150 m_visibleDescendantStatusDirty( false ), 151 m_hasVisibleDescendant( false ), 152 m_marquee(0) 115 : m_object(object) 116 , m_parent(0) 117 , m_previous(0) 118 , m_next(0) 119 , m_first(0) 120 , m_last(0) 121 , m_repaintX(0) 122 , m_repaintY(0) 123 , m_relX(0) 124 , m_relY(0) 125 , m_x(0) 126 , m_y(0) 127 , m_width(0) 128 , m_height(0) 129 , m_scrollX(0) 130 , m_scrollY(0) 131 , m_scrollOriginX(0) 132 , m_scrollLeftOverflow(0) 133 , m_scrollWidth(0) 134 , m_scrollHeight(0) 135 , m_inResizeMode(false) 136 , m_posZOrderList(0) 137 , m_negZOrderList(0) 138 , m_overflowList(0) 139 , m_clipRects(0) 140 , m_scrollDimensionsDirty(true) 141 , m_zOrderListsDirty(true) 142 , m_overflowListDirty(true) 143 , m_isOverflowOnly(shouldBeOverflowOnly()) 144 , m_usedTransparency(false) 145 , m_inOverflowRelayout(false) 146 , m_repaintOverflowOnResize(false) 147 , m_overflowStatusDirty(true) 148 , m_visibleContentStatusDirty(true) 149 , m_hasVisibleContent(false) 150 , m_visibleDescendantStatusDirty(false) 151 , m_hasVisibleDescendant(false) 152 , m_marquee(0) 153 , m_scrollEventTimer(this, &RenderLayer::dispatchScrollEvent) 153 154 { 154 155 if (!object->firstChild() && object->style()) { … … 673 674 } 674 675 676 void RenderLayer::dispatchScrollEvent(Timer<RenderLayer>* timer) 677 { 678 EventTargetNodeCast(m_object->element())->dispatchHTMLEvent(scrollEvent, true, false); 679 } 680 675 681 void RenderLayer::scrollToOffset(int x, int y, bool updateScrollbars, bool repaint) 676 682 { … … 722 728 } 723 729 724 // Fire the scroll DOM event. 725 EventTargetNodeCast(m_object->element())->dispatchHTMLEvent(scrollEvent, true, false); 730 // Schedule the scroll DOM event. Since the event handler might destroy the object and its renderer, 731 // we do not dispatch the event here during layout. 732 m_scrollEventTimer.startOneShot(0); 726 733 } 727 734 … … 750 757 int diffY = scrollYOffset(); 751 758 scrollToOffset(xOffset, yOffset); 752 // FIXME: At this point a scroll event fired, which could have deleted this layer.753 // Need to handle this case.754 759 diffX = scrollXOffset() - diffX; 755 760 diffY = scrollYOffset() - diffY; … … 1185 1190 if (newX != scrollXOffset() || newY != m_scrollY) 1186 1191 scrollToOffset(newX, newY); 1187 // FIXME: At this point a scroll event fired, which could have deleted this layer.1188 // Need to handle this case.1189 1192 } 1190 1193 … … 2153 2156 else 2154 2157 m_layer->scrollToOffset(0, m_start, false, false); 2155 // FIXME: At this point a scroll event fired, which could have deleted this layer,2156 // including the marquee. Need to handle this case.2157 2158 } 2158 2159 else { -
trunk/WebCore/rendering/RenderLayer.h
r18838 r19005 378 378 void updateVisibilityStatus(); 379 379 380 void dispatchScrollEvent(Timer<RenderLayer>*); 381 380 382 protected: 381 383 RenderObject* m_object; … … 453 455 454 456 Marquee* m_marquee; // Used by layers with overflow:marquee 457 458 Timer<RenderLayer> m_scrollEventTimer; 455 459 }; 456 460
Note: See TracChangeset
for help on using the changeset viewer.