Changeset 149287 in webkit
- Timestamp:
- Apr 29, 2013 8:33:31 AM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r149284 r149287 1 2013-04-29 Andreas Kling <akling@apple.com> 2 3 When updating geometry, send JavaScript resize before before layout/paint. 4 <http://webkit.org/b/115199> 5 <rdar://problem/13735535> 6 7 Reviewed by Geoffrey Garen. 8 9 Make the "resize" event synchronous and dispatch it before doing any automatic 10 resize-induced layout. This avoids unnecessary work in cases where an event handler 11 does something that dirties style. 12 13 It also avoids a kind of JS-side FOUC that happens if we drop out to the runloop 14 and paint before the resize event handler runs; for example, when viewing a popup 15 on <http://lokeshdhakar.com/projects/lightbox2/> and resizing the window, the dark 16 overlay sometimes resizes out of sync with the web view, since a paint may happen 17 between automatic layout and the resize event. 18 19 * page/EventHandler.h: 20 * page/EventHandler.cpp: 21 (WebCore::EventHandler::dispatchResizeEvent): 22 * page/FrameView.h: 23 * page/FrameView.cpp: 24 (WebCore::FrameView::dispatchResizeEvent): 25 26 Renamed sendResizeEvent() to dispatchResizeEvent() and made it dispatch the event 27 synchronously instead of adding it to the DocumentEventQueue. 28 29 (WebCore::FrameView::performPostLayoutTasks): 30 (WebCore::FrameView::setFrameRect): 31 32 Dispatch the "resize" event right when the new frame rect is set. 33 1 34 2013-04-29 Patrick Gansterer <paroga@webkit.org> 2 35 -
trunk/Source/WebCore/page/EventHandler.cpp
r149262 r149287 3785 3785 } 3786 3786 3787 void EventHandler::sendResizeEvent() 3788 { 3789 m_frame->document()->enqueueWindowEvent(Event::create(eventNames().resizeEvent, false, false)); 3787 void EventHandler::dispatchResizeEvent() 3788 { 3789 RefPtr<Event> resizeEvent = Event::create(eventNames().resizeEvent, false, false); 3790 m_frame->document()->dispatchWindowEvent(resizeEvent.release(), m_frame->document()->domWindow()); 3790 3791 } 3791 3792 -
trunk/Source/WebCore/page/EventHandler.h
r149066 r149287 231 231 void capsLockStateMayHaveChanged(); // Only called by FrameSelection 232 232 233 void sendResizeEvent(); // Only called in FrameView233 void dispatchResizeEvent(); // Only called in FrameView 234 234 void sendScrollEvent(); // Ditto 235 235 -
trunk/Source/WebCore/page/FrameView.cpp
r149185 r149287 468 468 updateScrollableAreaSet(); 469 469 470 RenderView* renderView = this->renderView(); 471 470 472 #if USE(ACCELERATED_COMPOSITING) 471 if ( RenderView* renderView = this->renderView()) {473 if (renderView) { 472 474 if (renderView->usesCompositing()) 473 475 renderView->compositor()->frameViewDidChangeSize(); 474 476 } 475 477 #endif 478 479 if (renderView && !renderView->printing()) { 480 IntSize currentSize; 481 if (useFixedLayout() && !fixedLayoutSize().isEmpty() && delegatesScrolling()) 482 currentSize = fixedLayoutSize(); 483 else 484 currentSize = visibleContentRect(IncludeScrollbars).size(); 485 float currentZoomFactor = renderView->style()->zoom(); 486 bool resized = !m_firstLayout && (currentSize != m_lastViewportSize || currentZoomFactor != m_lastZoomFactor); 487 m_lastViewportSize = currentSize; 488 m_lastZoomFactor = currentZoomFactor; 489 if (resized) 490 dispatchResizeEvent(); 491 } 492 476 493 } 477 494 … … 2762 2779 2763 2780 m_actionScheduler->resume(); 2764 2765 if (renderView && !renderView->printing()) { 2766 IntSize currentSize; 2767 if (useFixedLayout() && !fixedLayoutSize().isEmpty() && delegatesScrolling()) 2768 currentSize = fixedLayoutSize(); 2769 else 2770 currentSize = visibleContentRect(IncludeScrollbars).size(); 2771 float currentZoomFactor = renderView->style()->zoom(); 2772 bool resized = !m_firstLayout && (currentSize != m_lastViewportSize || currentZoomFactor != m_lastZoomFactor); 2773 m_lastViewportSize = currentSize; 2774 m_lastZoomFactor = currentZoomFactor; 2775 if (resized) 2776 sendResizeEvent(); 2777 } 2778 } 2779 2780 void FrameView::sendResizeEvent() 2781 } 2782 2783 void FrameView::dispatchResizeEvent() 2781 2784 { 2782 2785 ASSERT(m_frame); 2783 2786 2784 m_frame->eventHandler()-> sendResizeEvent();2787 m_frame->eventHandler()->dispatchResizeEvent(); 2785 2788 2786 2789 #if ENABLE(INSPECTOR) -
trunk/Source/WebCore/page/FrameView.h
r149105 r149287 492 492 virtual void willRemoveScrollbar(Scrollbar*, ScrollbarOrientation) OVERRIDE; 493 493 494 void scheduleResizeEvent(); 495 void sendResizeEvent(); 496 void delayedResizeEventTimerFired(Timer<FrameView>*); 494 void dispatchResizeEvent(); 497 495 498 496 void updateScrollableAreaSet();
Note: See TracChangeset
for help on using the changeset viewer.