Changeset 80210 in webkit
- Timestamp:
- Mar 2, 2011 10:28:57 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/Android.mk
r80151 r80210 419 419 page/FocusController.cpp \ 420 420 page/Frame.cpp \ 421 page/FrameActionScheduler.cpp \ 421 422 page/FrameTree.cpp \ 422 423 page/FrameView.cpp \ -
trunk/Source/WebCore/CMakeLists.txt
r80151 r80210 1142 1142 page/FocusController.cpp 1143 1143 page/Frame.cpp 1144 page/FrameActionScheduler.cpp 1144 1145 page/FrameTree.cpp 1145 1146 page/FrameView.cpp -
trunk/Source/WebCore/ChangeLog
r80209 r80210 1 2011-03-02 MORITA Hajime <morrita@google.com> 2 3 Reviewed by Kent Tamura. 4 5 [Refactoring] Make ScheduledEvent on FrameView abstract out to ScheduleAction 6 https://bugs.webkit.org/show_bug.cgi?id=54440 7 8 - Extracted FrameActionScheduler from FrameView 9 - Extracted FrameAction abstract class from ScheduledEvent, 10 which has fire() virtual method. 11 - Renamed ScheduledEvent EventFrameAction 12 13 With this change, Any action can be hooked up to the end of the layout. 14 15 No new tests. No behavioral change. 16 17 * Android.mk: 18 * CMakeLists.txt: 19 * GNUmakefile.am: 20 * WebCore.gypi: 21 * WebCore.pro: 22 * WebCore.vcproj/WebCore.vcproj: 23 * WebCore.xcodeproj/project.pbxproj: 24 * page/FrameActionScheduler.cpp: Added. 25 (WebCore::EventFrameAction::EventFrameAction): 26 (WebCore::EventFrameAction::fire): 27 (WebCore::FrameActionScheduler::FrameActionScheduler): 28 (WebCore::FrameActionScheduler::~FrameActionScheduler): 29 (WebCore::FrameActionScheduler::isEmpty): 30 (WebCore::FrameActionScheduler::clear): 31 (WebCore::FrameActionScheduler::pause): 32 (WebCore::FrameActionScheduler::resume): 33 (WebCore::FrameActionScheduler::dispatch): 34 (WebCore::FrameActionScheduler::scheduleAction): 35 (WebCore::FrameActionScheduler::scheduleEvent): 36 * page/FrameActionScheduler.h: Added. 37 (WebCore::FrameAction::FrameAction): 38 (WebCore::FrameAction::~FrameAction): 39 (WebCore::FrameActionScheduler::isScheduled): 40 * page/FrameView.cpp: 41 (WebCore::FrameView::FrameView): 42 (WebCore::FrameView::~FrameView): 43 (WebCore::FrameView::layout): 44 (WebCore::FrameView::scheduleEvent): 45 (WebCore::FrameView::pauseScheduledEvents): 46 (WebCore::FrameView::resumeScheduledEvents): 47 (WebCore::FrameView::performPostLayoutTasks): 48 (WebCore::FrameView::updateOverflowStatus): 49 * page/FrameView.h: 50 1 51 2011-03-02 Sheriff Bot <webkit.review.bot@gmail.com> 2 52 -
trunk/Source/WebCore/GNUmakefile.am
r80166 r80210 2216 2216 Source/WebCore/page/Frame.cpp \ 2217 2217 Source/WebCore/page/Frame.h \ 2218 Source/WebCore/page/FrameActionScheduler.cpp \ 2219 Source/WebCore/page/FrameActionScheduler.h \ 2218 2220 Source/WebCore/page/FrameLoadRequest.h \ 2219 2221 Source/WebCore/page/FrameTree.cpp \ -
trunk/Source/WebCore/WebCore.gypi
r80185 r80210 2338 2338 'page/FrameTree.cpp', 2339 2339 'page/FrameTree.h', 2340 'page/FrameActionScheduler.cpp', 2341 'page/FrameActionScheduler.h', 2340 2342 'page/FrameView.cpp', 2341 2343 'page/FrameView.h', -
trunk/Source/WebCore/WebCore.pro
r80169 r80210 884 884 page/FocusController.cpp \ 885 885 page/Frame.cpp \ 886 page/FrameActionScheduler.cpp \ 886 887 page/FrameTree.cpp \ 887 888 page/FrameView.cpp \ -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r80151 r80210 24461 24461 RelativePath="..\page\Frame.h" 24462 24462 > 24463 <File 24464 RelativePath="..\page\FrameActionScheduler.cpp" 24465 > 24466 </File> 24467 <File 24468 RelativePath="..\page\FrameActionScheduler.h" 24469 > 24470 </File> 24463 24471 </File> 24464 24472 <File -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r80202 r80210 3178 3178 A7AD2F870EC89D07008AB002 /* LinkHash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7AD2F850EC89D07008AB002 /* LinkHash.cpp */; }; 3179 3179 A7AD2F880EC89D07008AB002 /* LinkHash.h in Headers */ = {isa = PBXBuildFile; fileRef = A7AD2F860EC89D07008AB002 /* LinkHash.h */; settings = {ATTRIBUTES = (Private, ); }; }; 3180 A7B070D2130A409C00A3763C /* FrameActionScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7B070D0130A409C00A3763C /* FrameActionScheduler.cpp */; }; 3181 A7B070D3130A409C00A3763C /* FrameActionScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B070D1130A409C00A3763C /* FrameActionScheduler.h */; }; 3180 3182 A7B6E69F0B291A9600D0529F /* DragData.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B6E69D0B291A9600D0529F /* DragData.h */; settings = {ATTRIBUTES = (Private, ); }; }; 3181 3183 A7BBE26611AFB3F20005EA03 /* JSHTMLMeterElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7BBE26411AFB3F20005EA03 /* JSHTMLMeterElement.cpp */; }; … … 9618 9620 A7AD2F850EC89D07008AB002 /* LinkHash.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LinkHash.cpp; sourceTree = "<group>"; }; 9619 9621 A7AD2F860EC89D07008AB002 /* LinkHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkHash.h; sourceTree = "<group>"; }; 9622 A7B070D0130A409C00A3763C /* FrameActionScheduler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FrameActionScheduler.cpp; sourceTree = "<group>"; }; 9623 A7B070D1130A409C00A3763C /* FrameActionScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrameActionScheduler.h; sourceTree = "<group>"; }; 9620 9624 A7B6E69D0B291A9600D0529F /* DragData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DragData.h; sourceTree = "<group>"; }; 9621 9625 A7BBE26411AFB3F20005EA03 /* JSHTMLMeterElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLMeterElement.cpp; sourceTree = "<group>"; }; … … 14020 14024 65BF02290974816300C43196 /* Frame.cpp */, 14021 14025 65BF022A0974816300C43196 /* Frame.h */, 14026 A7B070D0130A409C00A3763C /* FrameActionScheduler.cpp */, 14027 A7B070D1130A409C00A3763C /* FrameActionScheduler.h */, 14022 14028 658436850AE01B7400E53753 /* FrameLoadRequest.h */, 14023 14029 65A21482097A3F5300B9050A /* FrameTree.cpp */, … … 20729 20735 A853123D11D0471B00D4D077 /* FragmentScriptingPermission.h in Headers */, 20730 20736 65BF022F0974816300C43196 /* Frame.h in Headers */, 20737 A7B070D3130A409C00A3763C /* FrameActionScheduler.h in Headers */, 20731 20738 656D373C0ADBA5DE00A4554D /* FrameLoader.h in Headers */, 20732 20739 656D373E0ADBA5DE00A4554D /* FrameLoaderClient.h in Headers */, … … 23506 23513 41885B9411B6FDA6003383BB /* FormSubmission.cpp in Sources */, 23507 23514 65BF022E0974816300C43196 /* Frame.cpp in Sources */, 23515 A7B070D2130A409C00A3763C /* FrameActionScheduler.cpp in Sources */, 23508 23516 932E16090AF578340025F408 /* FrameLoader.cpp in Sources */, 23509 23517 D000EBA211BDAFD400C47726 /* FrameLoaderStateMachine.cpp in Sources */, -
trunk/Source/WebCore/page/FrameView.cpp
r79875 r80210 38 38 #include "FocusController.h" 39 39 #include "Frame.h" 40 #include "FrameActionScheduler.h" 40 41 #include "FrameLoader.h" 41 42 #include "FrameLoaderClient.h" … … 110 111 static const unsigned maxUpdateWidgetsIterations = 2; 111 112 112 struct ScheduledEvent {113 WTF_MAKE_NONCOPYABLE(ScheduledEvent); WTF_MAKE_FAST_ALLOCATED;114 public:115 ScheduledEvent() { }116 RefPtr<Event> m_event;117 RefPtr<Node> m_eventTarget;118 };119 120 113 FrameView::FrameView(Frame* frame) 121 114 : m_frame(frame) … … 131 124 , m_baseBackgroundColor(Color::white) 132 125 , m_mediaType("screen") 133 , m_ enqueueEvents(0)126 , m_actionScheduler(new FrameActionScheduler()) 134 127 , m_overflowStatusDirty(true) 135 128 , m_viewportRenderer(0) … … 166 159 if (m_hasPendingPostLayoutTasks) { 167 160 m_postLayoutTasksTimer.stop(); 168 m_scheduledEvents.clear(); 169 m_enqueueEvents = 0; 161 m_actionScheduler->clear(); 170 162 } 171 163 … … 183 175 184 176 ASSERT(!m_scrollCorner); 185 ASSERT(m_scheduledEvents.isEmpty()); 186 ASSERT(!m_enqueueEvents); 177 ASSERT(m_actionScheduler->isEmpty()); 187 178 188 179 if (m_frame) { … … 891 882 RenderLayer* layer = root->enclosingLayer(); 892 883 893 pauseScheduledEvents();884 m_actionScheduler->pause(); 894 885 895 886 bool disableLayoutState = false; … … 969 960 m_postLayoutTasksTimer.startOneShot(0); 970 961 if (needsLayout()) { 971 pauseScheduledEvents();962 m_actionScheduler->pause(); 972 963 layout(); 973 964 } 974 965 } 975 966 } else { 976 resumeScheduledEvents(); 977 ASSERT(m_enqueueEvents); 967 m_actionScheduler->resume(); 978 968 } 979 969 … … 1795 1785 void FrameView::scheduleEvent(PassRefPtr<Event> event, PassRefPtr<Node> eventTarget) 1796 1786 { 1797 if (!m_enqueueEvents) { 1798 ExceptionCode ec = 0; 1799 eventTarget->dispatchEvent(event, ec); 1800 return; 1801 } 1802 1803 ScheduledEvent* scheduledEvent = new ScheduledEvent; 1804 scheduledEvent->m_event = event; 1805 scheduledEvent->m_eventTarget = eventTarget; 1806 m_scheduledEvents.append(scheduledEvent); 1787 m_actionScheduler->scheduleEvent(event, eventTarget); 1807 1788 } 1808 1789 1809 1790 void FrameView::pauseScheduledEvents() 1810 1791 { 1811 ASSERT(m_scheduledEvents.isEmpty() || m_enqueueEvents); 1812 m_enqueueEvents++; 1792 m_actionScheduler->pause(); 1813 1793 } 1814 1794 1815 1795 void FrameView::resumeScheduledEvents() 1816 1796 { 1817 m_enqueueEvents--; 1818 if (!m_enqueueEvents) 1819 dispatchScheduledEvents(); 1820 ASSERT(m_scheduledEvents.isEmpty() || m_enqueueEvents); 1797 m_actionScheduler->resume(); 1821 1798 } 1822 1799 … … 1944 1921 scrollToAnchor(); 1945 1922 1946 resumeScheduledEvents();1923 m_actionScheduler->resume(); 1947 1924 1948 1925 if (!root->printing()) { … … 1981 1958 m_verticalOverflow = verticalOverflow; 1982 1959 1983 scheduleEvent(OverflowEvent::create(horizontalOverflowChanged, horizontalOverflow,1960 m_actionScheduler->scheduleEvent(OverflowEvent::create(horizontalOverflowChanged, horizontalOverflow, 1984 1961 verticalOverflowChanged, verticalOverflow), 1985 1962 m_viewportRenderer->node()); 1986 1963 } 1987 1964 1988 }1989 1990 void FrameView::dispatchScheduledEvents()1991 {1992 if (m_scheduledEvents.isEmpty())1993 return;1994 1995 Vector<ScheduledEvent*> scheduledEventsCopy = m_scheduledEvents;1996 m_scheduledEvents.clear();1997 1998 Vector<ScheduledEvent*>::iterator end = scheduledEventsCopy.end();1999 for (Vector<ScheduledEvent*>::iterator it = scheduledEventsCopy.begin(); it != end; ++it) {2000 ScheduledEvent* scheduledEvent = *it;2001 2002 ExceptionCode ec = 0;2003 2004 // Only dispatch events to nodes that are in the document2005 if (scheduledEvent->m_eventTarget->inDocument())2006 scheduledEvent->m_eventTarget->dispatchEvent(scheduledEvent->m_event, ec);2007 2008 delete scheduledEvent;2009 }2010 1965 } 2011 1966 -
trunk/Source/WebCore/page/FrameView.h
r79158 r80210 38 38 class Color; 39 39 class Event; 40 class FrameActionScheduler; 40 41 class FrameViewPrivate; 41 42 class IntRect; … … 46 47 class RenderEmbeddedObject; 47 48 class RenderScrollbarPart; 48 49 struct ScheduledEvent;50 49 51 50 template <typename T> class Timer; … … 298 297 void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow); 299 298 300 void dispatchScheduledEvents();301 299 void performPostLayoutTasks(); 302 300 … … 382 380 String m_mediaTypeWhenNotPrinting; 383 381 384 unsigned m_enqueueEvents; 385 Vector<ScheduledEvent*> m_scheduledEvents; 386 382 OwnPtr<FrameActionScheduler> m_actionScheduler; 383 387 384 bool m_overflowStatusDirty; 388 385 bool m_horizontalOverflow;
Note: See TracChangeset
for help on using the changeset viewer.