Source/WebCore/Android.mk

@@LOCAL_SRC_FILES := $(LOCAL_SRC_FILES) \
418418 page/EventHandler.cpp \
419419 page/FocusController.cpp \
420420 page/Frame.cpp \
 421 page/FrameActionScheduler.cpp \
421422 page/FrameTree.cpp \
422423 page/FrameView.cpp \
423424 page/Geolocation.cpp \

Source/WebCore/CMakeLists.txt

@@SET(WebCore_SOURCES
11411141 page/EventSource.cpp
11421142 page/FocusController.cpp
11431143 page/Frame.cpp
 1144 page/FrameActionScheduler.cpp
11441145 page/FrameTree.cpp
11451146 page/FrameView.cpp
11461147 page/Geolocation.cpp

Source/WebCore/ChangeLog

 12011-03-02 MORITA Hajime <morrita@google.com>
 2
 3 Reviewed by NOBODY (OOPS!).
 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
1512011-03-01 Yuta Kitamura <yutak@chromium.org>
252
353 Reviewed by Darin Adler.

Source/WebCore/GNUmakefile.am

@@webcore_sources += \
22152215 Source/WebCore/page/FocusDirection.h \
22162216 Source/WebCore/page/Frame.cpp \
22172217 Source/WebCore/page/Frame.h \
 2218 Source/WebCore/page/FrameActionScheduler.cpp \
 2219 Source/WebCore/page/FrameActionScheduler.h \
22182220 Source/WebCore/page/FrameLoadRequest.h \
22192221 Source/WebCore/page/FrameTree.cpp \
22202222 Source/WebCore/page/FrameTree.h \

Source/WebCore/WebCore.gypi

23342334 'page/FrameLoadRequest.h',
23352335 'page/FrameTree.cpp',
23362336 'page/FrameTree.h',
 2337 'page/FrameActionScheduler.cpp',
 2338 'page/FrameActionScheduler.h',
23372339 'page/FrameView.cpp',
23382340 'page/FrameView.h',
23392341 'page/Geolocation.cpp',

Source/WebCore/WebCore.pro

@@SOURCES += \
883883 page/EventSource.cpp \
884884 page/FocusController.cpp \
885885 page/Frame.cpp \
 886 page/FrameActionScheduler.cpp \
886887 page/FrameTree.cpp \
887888 page/FrameView.cpp \
888889 page/Geolocation.cpp \

Source/WebCore/WebCore.vcproj/WebCore.vcproj

2446024460 <File
2446124461 RelativePath="..\page\Frame.h"
2446224462 >
 24463 <File
 24464 RelativePath="..\page\FrameActionScheduler.cpp"
 24465 >
 24466 </File>
 24467 <File
 24468 RelativePath="..\page\FrameActionScheduler.h"
 24469 >
 24470 </File>
2446324471 </File>
2446424472 <File
2446524473 RelativePath="..\page\FrameLoadRequest.h"

Source/WebCore/WebCore.xcodeproj/project.pbxproj

31713171 A7AA66D711C5ED6A001D8C8C /* RenderIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = A7AA66D511C5ED6A001D8C8C /* RenderIndicator.h */; };
31723172 A7AD2F870EC89D07008AB002 /* LinkHash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7AD2F850EC89D07008AB002 /* LinkHash.cpp */; };
31733173 A7AD2F880EC89D07008AB002 /* LinkHash.h in Headers */ = {isa = PBXBuildFile; fileRef = A7AD2F860EC89D07008AB002 /* LinkHash.h */; settings = {ATTRIBUTES = (Private, ); }; };
 3174 A7B070D2130A409C00A3763C /* FrameActionScheduler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7B070D0130A409C00A3763C /* FrameActionScheduler.cpp */; };
 3175 A7B070D3130A409C00A3763C /* FrameActionScheduler.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B070D1130A409C00A3763C /* FrameActionScheduler.h */; };
31743176 A7B6E69F0B291A9600D0529F /* DragData.h in Headers */ = {isa = PBXBuildFile; fileRef = A7B6E69D0B291A9600D0529F /* DragData.h */; settings = {ATTRIBUTES = (Private, ); }; };
31753177 A7BBE26611AFB3F20005EA03 /* JSHTMLMeterElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A7BBE26411AFB3F20005EA03 /* JSHTMLMeterElement.cpp */; };
31763178 A7BBE26711AFB3F20005EA03 /* JSHTMLMeterElement.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BBE26511AFB3F20005EA03 /* JSHTMLMeterElement.h */; };

96069608 A7AA66D511C5ED6A001D8C8C /* RenderIndicator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderIndicator.h; sourceTree = "<group>"; };
96079609 A7AD2F850EC89D07008AB002 /* LinkHash.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LinkHash.cpp; sourceTree = "<group>"; };
96089610 A7AD2F860EC89D07008AB002 /* LinkHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkHash.h; sourceTree = "<group>"; };
 9611 A7B070D0130A409C00A3763C /* FrameActionScheduler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FrameActionScheduler.cpp; sourceTree = "<group>"; };
 9612 A7B070D1130A409C00A3763C /* FrameActionScheduler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FrameActionScheduler.h; sourceTree = "<group>"; };
96099613 A7B6E69D0B291A9600D0529F /* DragData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DragData.h; sourceTree = "<group>"; };
96109614 A7BBE26411AFB3F20005EA03 /* JSHTMLMeterElement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLMeterElement.cpp; sourceTree = "<group>"; };
96119615 A7BBE26511AFB3F20005EA03 /* JSHTMLMeterElement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSHTMLMeterElement.h; sourceTree = "<group>"; };

1400814012 062287830B4DB322000C34DF /* FocusDirection.h */,
1400914013 65BF02290974816300C43196 /* Frame.cpp */,
1401014014 65BF022A0974816300C43196 /* Frame.h */,
 14015 A7B070D0130A409C00A3763C /* FrameActionScheduler.cpp */,
 14016 A7B070D1130A409C00A3763C /* FrameActionScheduler.h */,
1401114017 658436850AE01B7400E53753 /* FrameLoadRequest.h */,
1401214018 65A21482097A3F5300B9050A /* FrameTree.cpp */,
1401314019 65A21483097A3F5300B9050A /* FrameTree.h */,

2071220718 935C476D09AC4D6300A6AAB4 /* FoundationExtras.h in Headers */,
2071320719 A853123D11D0471B00D4D077 /* FragmentScriptingPermission.h in Headers */,
2071420720 65BF022F0974816300C43196 /* Frame.h in Headers */,
 20721 A7B070D3130A409C00A3763C /* FrameActionScheduler.h in Headers */,
2071520722 656D373C0ADBA5DE00A4554D /* FrameLoader.h in Headers */,
2071620723 656D373E0ADBA5DE00A4554D /* FrameLoaderClient.h in Headers */,
2071720724 D000EBA311BDAFD400C47726 /* FrameLoaderStateMachine.h in Headers */,

2348523492 656D373B0ADBA5DE00A4554D /* FormState.cpp in Sources */,
2348623493 41885B9411B6FDA6003383BB /* FormSubmission.cpp in Sources */,
2348723494 65BF022E0974816300C43196 /* Frame.cpp in Sources */,
 23495 A7B070D2130A409C00A3763C /* FrameActionScheduler.cpp in Sources */,
2348823496 932E16090AF578340025F408 /* FrameLoader.cpp in Sources */,
2348923497 D000EBA211BDAFD400C47726 /* FrameLoaderStateMachine.cpp in Sources */,
2349023498 65BF02450974819000C43196 /* FrameMac.mm in Sources */,

Source/WebCore/page/FrameActionScheduler.cpp

 1/*
 2 * Copyright (C) 2011 Google Inc. All rights reserved.
 3 *
 4 * Redistribution and use in source and binary forms, with or without
 5 * modification, are permitted provided that the following conditions
 6 * are met:
 7 * * Redistributions of source code must retain the above copyright
 8 * notice, this list of conditions and the following disclaimer.
 9 * * Redistributions in binary form must reproduce the above copyright
 10 * notice, this list of conditions and the following disclaimer in the
 11 * documentation and/or other materials provided with the distribution.
 12 *
 13 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 24 */
 25
 26#include "config.h"
 27#include "FrameActionScheduler.h"
 28
 29#include "Event.h"
 30#include "Node.h"
 31#include <wtf/Vector.h>
 32
 33namespace WebCore {
 34
 35class EventFrameAction : public FrameAction {
 36public:
 37 EventFrameAction(PassRefPtr<Event> event, PassRefPtr<Node> target)
 38 : m_event(event)
 39 , m_eventTarget(target)
 40 {
 41 }
 42
 43 virtual void fire()
 44 {
 45 // Only dispatch events to nodes that are in the document
 46 ExceptionCode ec = 0;
 47 if (m_eventTarget->inDocument())
 48 m_eventTarget->dispatchEvent(m_event, ec);
 49 }
 50
 51private:
 52 RefPtr<Event> m_event;
 53 RefPtr<Node> m_eventTarget;
 54};
 55
 56FrameActionScheduler::FrameActionScheduler()
 57 : m_enqueueActions(0)
 58{
 59}
 60
 61FrameActionScheduler::~FrameActionScheduler()
 62{
 63 clear();
 64}
 65
 66bool FrameActionScheduler::isEmpty() const
 67{
 68 return m_scheduledActions.isEmpty();
 69}
 70
 71void FrameActionScheduler::clear()
 72{
 73 m_scheduledActions.clear();
 74 m_enqueueActions = 0;
 75}
 76
 77void FrameActionScheduler::pause()
 78{
 79 ASSERT(isEmpty() || m_enqueueActions);
 80 m_enqueueActions++;
 81}
 82
 83void FrameActionScheduler::resume()
 84{
 85 m_enqueueActions--;
 86 if (!m_enqueueActions)
 87 dispatch();
 88 ASSERT(isEmpty() || m_enqueueActions);
 89}
 90
 91void FrameActionScheduler::dispatch()
 92{
 93 Vector< OwnPtr<FrameAction> > snapshot;
 94 m_scheduledActions.swap(snapshot);
 95
 96 for (Vector< OwnPtr<FrameAction> >::iterator i = snapshot.begin(); i != snapshot.end(); ++i)
 97 (*i)->fire();
 98}
 99
 100void FrameActionScheduler::scheduleAction(PassOwnPtr<FrameAction> action)
 101{
 102 m_scheduledActions.append(action);
 103}
 104
 105void FrameActionScheduler::scheduleEvent(PassRefPtr<Event> event, PassRefPtr<Node> eventTarget)
 106{
 107 scheduleAction(new EventFrameAction(event, eventTarget));
 108}
 109
 110
 111} // namespace WebCore

Source/WebCore/page/FrameActionScheduler.h

 1/*
 2 * Copyright (C) 2011 Google Inc. All rights reserved.
 3 *
 4 * Redistribution and use in source and binary forms, with or without
 5 * modification, are permitted provided that the following conditions
 6 * are met:
 7 * * Redistributions of source code must retain the above copyright
 8 * notice, this list of conditions and the following disclaimer.
 9 * * Redistributions in binary form must reproduce the above copyright
 10 * notice, this list of conditions and the following disclaimer in the
 11 * documentation and/or other materials provided with the distribution.
 12 *
 13 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 24 */
 25
 26#ifndef FrameActionScheduler_h
 27#define FrameActionScheduler_h
 28
 29#include <wtf/FastAllocBase.h>
 30#include <wtf/Noncopyable.h>
 31#include <wtf/OwnPtr.h>
 32#include <wtf/PassOwnPtr.h>
 33#include <wtf/Vector.h>
 34
 35namespace WebCore {
 36
 37class Node;
 38class Event;
 39
 40class FrameAction {
 41 WTF_MAKE_FAST_ALLOCATED;
 42 WTF_MAKE_NONCOPYABLE(FrameAction);
 43public:
 44 FrameAction() {}
 45 virtual ~FrameAction() {}
 46 virtual void fire() = 0;
 47};
 48
 49class FrameActionScheduler {
 50public:
 51 FrameActionScheduler();
 52 ~FrameActionScheduler();
 53
 54 bool isEmpty() const;
 55 bool isScheduled() const { return 0 < m_enqueueActions; }
 56 void clear();
 57 void pause();
 58 void resume();
 59
 60 void scheduleAction(PassOwnPtr<FrameAction>);
 61 void scheduleEvent(PassRefPtr<Event>, PassRefPtr<Node>);
 62
 63private:
 64 void dispatch();
 65
 66 unsigned m_enqueueActions;
 67 Vector< OwnPtr<FrameAction> > m_scheduledActions;
 68};
 69
 70} // namespace WebCore
 71
 72#endif // FrameActionScheduler_h

Source/WebCore/page/FrameView.cpp

3737#include "FloatRect.h"
3838#include "FocusController.h"
3939#include "Frame.h"
 40#include "FrameActionScheduler.h"
4041#include "FrameLoader.h"
4142#include "FrameLoaderClient.h"
4243#include "FrameTree.h"

@@double FrameView::s_deferredRepaintDelayIncrementDuringLoading = 0;
109110// The maximum number of updateWidgets iterations that should be done before returning.
110111static const unsigned maxUpdateWidgetsIterations = 2;
111112
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 
120113FrameView::FrameView(Frame* frame)
121114 : m_frame(frame)
122115 , m_canHaveScrollbars(true)

@@FrameView::FrameView(Frame* frame)
130123 , m_isTransparent(false)
131124 , m_baseBackgroundColor(Color::white)
132125 , m_mediaType("screen")
133  , m_enqueueEvents(0)
 126 , m_actionScheduler(new FrameActionScheduler())
134127 , m_overflowStatusDirty(true)
135128 , m_viewportRenderer(0)
136129 , m_wasScrolledByUser(false)

@@FrameView::~FrameView()
165158{
166159 if (m_hasPendingPostLayoutTasks) {
167160 m_postLayoutTasksTimer.stop();
168  m_scheduledEvents.clear();
169  m_enqueueEvents = 0;
 161 m_actionScheduler->clear();
170162 }
171163
172164 if (AXObjectCache::accessibilityEnabled() && axObjectCache())

@@FrameView::~FrameView()
182174 setHasVerticalScrollbar(false);
183175
184176 ASSERT(!m_scrollCorner);
185  ASSERT(m_scheduledEvents.isEmpty());
186  ASSERT(!m_enqueueEvents);
 177 ASSERT(m_actionScheduler->isEmpty());
187178
188179 if (m_frame) {
189180 ASSERT(m_frame->view() != this || !m_frame->contentRenderer());

@@void FrameView::layout(bool allowSubtree)
890881
891882 RenderLayer* layer = root->enclosingLayer();
892883
893  pauseScheduledEvents();
 884 m_actionScheduler->pause();
894885
895886 bool disableLayoutState = false;
896887 if (subtree) {

@@void FrameView::layout(bool allowSubtree)
968959 m_hasPendingPostLayoutTasks = true;
969960 m_postLayoutTasksTimer.startOneShot(0);
970961 if (needsLayout()) {
971  pauseScheduledEvents();
 962 m_actionScheduler->pause();
972963 layout();
973964 }
974965 }
975966 } else {
976  resumeScheduledEvents();
977  ASSERT(m_enqueueEvents);
 967 m_actionScheduler->resume();
978968 }
979969
980970 InspectorInstrumentation::didLayout(cookie);

@@bool FrameView::shouldUpdate(bool immediateRequested) const
17941784
17951785void FrameView::scheduleEvent(PassRefPtr<Event> event, PassRefPtr<Node> eventTarget)
17961786{
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);
18071788}
18081789
18091790void FrameView::pauseScheduledEvents()
18101791{
1811  ASSERT(m_scheduledEvents.isEmpty() || m_enqueueEvents);
1812  m_enqueueEvents++;
 1792 m_actionScheduler->pause();
18131793}
18141794
18151795void FrameView::resumeScheduledEvents()
18161796{
1817  m_enqueueEvents--;
1818  if (!m_enqueueEvents)
1819  dispatchScheduledEvents();
1820  ASSERT(m_scheduledEvents.isEmpty() || m_enqueueEvents);
 1797 m_actionScheduler->resume();
18211798}
18221799
18231800void FrameView::scrollToAnchor()

@@void FrameView::performPostLayoutTasks()
19431920
19441921 scrollToAnchor();
19451922
1946  resumeScheduledEvents();
 1923 m_actionScheduler->resume();
19471924
19481925 if (!root->printing()) {
19491926 IntSize currentSize = IntSize(width(), height());

@@void FrameView::updateOverflowStatus(bool horizontalOverflow, bool verticalOverf
19801957 m_horizontalOverflow = horizontalOverflow;
19811958 m_verticalOverflow = verticalOverflow;
19821959
1983  scheduleEvent(OverflowEvent::create(horizontalOverflowChanged, horizontalOverflow,
 1960 m_actionScheduler->scheduleEvent(OverflowEvent::create(horizontalOverflowChanged, horizontalOverflow,
19841961 verticalOverflowChanged, verticalOverflow),
19851962 m_viewportRenderer->node());
19861963 }
19871964
19881965}
19891966
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 document
2005  if (scheduledEvent->m_eventTarget->inDocument())
2006  scheduledEvent->m_eventTarget->dispatchEvent(scheduledEvent->m_event, ec);
2007 
2008  delete scheduledEvent;
2009  }
2010 }
2011 
20121967IntRect FrameView::windowClipRect(bool clipToContents) const
20131968{
20141969 ASSERT(m_frame->view() == this);

Source/WebCore/page/FrameView.h

@@namespace WebCore {
3737
3838class Color;
3939class Event;
 40class FrameActionScheduler;
4041class FrameViewPrivate;
4142class IntRect;
4243class Node;

@@class RenderObject;
4647class RenderEmbeddedObject;
4748class RenderScrollbarPart;
4849
49 struct ScheduledEvent;
50 
5150template <typename T> class Timer;
5251
5352class FrameView : public ScrollView {

@@private:
297296
298297 void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow);
299298
300  void dispatchScheduledEvents();
301299 void performPostLayoutTasks();
302300
303301 virtual void repaintContentRectangle(const IntRect&, bool immediate);

@@private:
381379 String m_mediaType;
382380 String m_mediaTypeWhenNotPrinting;
383381
384  unsigned m_enqueueEvents;
385  Vector<ScheduledEvent*> m_scheduledEvents;
386 
 382 OwnPtr<FrameActionScheduler> m_actionScheduler;
 383
387384 bool m_overflowStatusDirty;
388385 bool m_horizontalOverflow;
389386 bool m_verticalOverflow;