Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(583)

Unified Diff: Source/core/frame/FrameView.cpp

Issue 82843003: Fire overflowchanged events at raf timing (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Add a test Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/frame/FrameView.h ('k') | Source/core/page/EventHandler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/frame/FrameView.cpp
diff --git a/Source/core/frame/FrameView.cpp b/Source/core/frame/FrameView.cpp
index fa56877a5027c55cb0f1043b592dd7baedc16337..1b85f93a2d7429c810633e86dc7dcd6c9eaa3061 100644
--- a/Source/core/frame/FrameView.cpp
+++ b/Source/core/frame/FrameView.cpp
@@ -174,7 +174,6 @@ FrameView::FrameView(Frame* frame)
, m_isTransparent(false)
, m_baseBackgroundColor(Color::white)
, m_mediaType("screen")
- , m_overflowEventSuspendCount(0)
, m_overflowStatusDirty(true)
, m_viewportRenderer(0)
, m_wasScrolledByUser(false)
@@ -224,10 +223,8 @@ PassRefPtr<FrameView> FrameView::create(Frame* frame, const IntSize& initialSize
FrameView::~FrameView()
{
- if (m_postLayoutTasksTimer.isActive()) {
+ if (m_postLayoutTasksTimer.isActive())
m_postLayoutTasksTimer.stop();
- m_overflowEventQueue.clear();
- }
removeFromAXObjectCache();
resetScrollbars();
@@ -240,7 +237,6 @@ FrameView::~FrameView()
setHasVerticalScrollbar(false);
ASSERT(!m_scrollCorner);
- ASSERT(m_overflowEventQueue.isEmpty());
ASSERT(m_frame);
ASSERT(m_frame->view() != this || !m_frame->contentRenderer());
@@ -925,10 +921,8 @@ void FrameView::performLayout(RenderObject* rootForThisLayout, bool inSubtreeLay
void FrameView::scheduleOrPerformPostLayoutTasks()
{
- if (m_postLayoutTasksTimer.isActive()) {
- resumeOverflowEvents();
+ if (m_postLayoutTasksTimer.isActive())
return;
- }
// Partial layouts should not happen with synchronous post layouts.
ASSERT(!(m_inSynchronousPostLayout && partialLayout().isStopping()));
@@ -951,10 +945,8 @@ void FrameView::scheduleOrPerformPostLayoutTasks()
// can make us need to update again, and we can get stuck in a nasty cycle unless
// we call it through the timer here.
m_postLayoutTasksTimer.startOneShot(0);
- if (!partialLayout().isStopping() && needsLayout()) {
- suspendOverflowEvents();
+ if (!partialLayout().isStopping() && needsLayout())
layout();
- }
}
}
@@ -1086,8 +1078,6 @@ void FrameView::layout(bool allowSubtree)
layer = rootForThisLayout->enclosingLayer();
- suspendOverflowEvents();
-
performLayout(rootForThisLayout, inSubtreeLayout);
m_layoutRoot = 0;
@@ -2127,34 +2117,6 @@ bool FrameView::shouldUpdate() const
return true;
}
-void FrameView::suspendOverflowEvents()
-{
- ++m_overflowEventSuspendCount;
-}
-
-void FrameView::resumeOverflowEvents()
-{
- // FIXME: We should assert here but it makes several tests fail. See http://crbug.com/299788
- // ASSERT(m_overflowEventSuspendCount > 0);
-
- if (--m_overflowEventSuspendCount)
- return;
-
- Vector<RefPtr<OverflowEvent> > events;
- m_overflowEventQueue.swap(events);
-
- for (Vector<RefPtr<OverflowEvent> >::iterator it = events.begin(); it != events.end(); ++it) {
- Node* target = (*it)->target()->toNode();
- if (target->inDocument())
- target->dispatchEvent(*it, IGNORE_EXCEPTION);
- }
-}
-
-void FrameView::scheduleOverflowEvent(PassRefPtr<OverflowEvent> event)
-{
- m_overflowEventQueue.append(event);
-}
-
void FrameView::scrollToAnchor()
{
RefPtr<Node> anchorNode = m_maintainScrollPositionAnchor;
@@ -2269,8 +2231,7 @@ void FrameView::flushAnyPendingPostLayoutTasks()
void FrameView::performPostLayoutTasks()
{
TRACE_EVENT0("webkit", "FrameView::performPostLayoutTasks");
- // FontFaceSet::didLayout() and resumeOverflowEvents() calls below can blow
- // us away from underneath.
+ // FontFaceSet::didLayout() calls below can blow us away from underneath.
// FIXME: We should not run any JavaScript code in this function.
RefPtr<FrameView> protect(this);
@@ -2313,8 +2274,6 @@ void FrameView::performPostLayoutTasks()
scrollToAnchor();
- resumeOverflowEvents();
-
sendResizeEventIfNeeded();
}
@@ -2337,7 +2296,7 @@ void FrameView::sendResizeEventIfNeeded()
if (!shouldSendResizeEvent)
return;
- m_frame->eventHandler().sendResizeEvent();
+ m_frame->document()->enqueueResizeEvent();
if (isMainFrame())
InspectorInstrumentation::didResizeMainFrame(m_frame->page());
@@ -2480,7 +2439,7 @@ void FrameView::updateOverflowStatus(bool horizontalOverflow, bool verticalOverf
RefPtr<OverflowEvent> event = OverflowEvent::create(horizontalOverflowChanged, horizontalOverflow, verticalOverflowChanged, verticalOverflow);
event->setTarget(m_viewportRenderer->node());
- scheduleOverflowEvent(event);
+ m_frame->document()->enqueueAnimationFrameEvent(event.release());
}
}
« no previous file with comments | « Source/core/frame/FrameView.h ('k') | Source/core/page/EventHandler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698