| Index: Source/core/page/scrolling/ScrollingCoordinator.cpp
|
| diff --git a/Source/core/page/scrolling/ScrollingCoordinator.cpp b/Source/core/page/scrolling/ScrollingCoordinator.cpp
|
| index f8348db9b5183df793ebdadbc579bd48808f239c..8a27fd9411ad495abc6057de08a592674d511aed 100644
|
| --- a/Source/core/page/scrolling/ScrollingCoordinator.cpp
|
| +++ b/Source/core/page/scrolling/ScrollingCoordinator.cpp
|
| @@ -99,14 +99,18 @@ ScrollingCoordinator::~ScrollingCoordinator()
|
|
|
| bool ScrollingCoordinator::touchHitTestingEnabled() const
|
| {
|
| - RenderView* contentRenderer = m_page->mainFrame()->contentRenderer();
|
| - Settings* settings = m_page->mainFrame()->document()->settings();
|
| + if (!m_page->mainFrame()->isLocalFrame())
|
| + return false;
|
| + RenderView* contentRenderer = m_page->deprecatedLocalMainFrame()->contentRenderer();
|
| + Settings* settings = m_page->mainFrame()->settings();
|
| return RuntimeEnabledFeatures::touchEnabled() && settings->compositorTouchHitTesting() && contentRenderer && contentRenderer->usesCompositing();
|
| }
|
|
|
| void ScrollingCoordinator::setShouldHandleScrollGestureOnMainThreadRegion(const Region& region)
|
| {
|
| - if (WebLayer* scrollLayer = toWebLayer(m_page->mainFrame()->view()->layerForScrolling())) {
|
| + if (!m_page->mainFrame()->isLocalFrame())
|
| + return;
|
| + if (WebLayer* scrollLayer = toWebLayer(m_page->deprecatedLocalMainFrame()->view()->layerForScrolling())) {
|
| Vector<IntRect> rects = region.rects();
|
| WebVector<WebRect> webRects(rects.size());
|
| for (size_t i = 0; i < rects.size(); ++i)
|
| @@ -124,6 +128,9 @@ void ScrollingCoordinator::notifyLayoutUpdated()
|
|
|
| void ScrollingCoordinator::updateAfterCompositingChangeIfNeeded()
|
| {
|
| + if (!m_page->mainFrame()->isLocalFrame())
|
| + return;
|
| +
|
| if (!shouldUpdateAfterCompositingChange())
|
| return;
|
|
|
| @@ -138,7 +145,7 @@ void ScrollingCoordinator::updateAfterCompositingChangeIfNeeded()
|
| // 2. Resize control areas, e.g. the small rect at the right bottom of div/textarea/iframe when
|
| // CSS property "resize" is enabled.
|
| // 3. Plugin areas.
|
| - Region shouldHandleScrollGestureOnMainThreadRegion = computeShouldHandleScrollGestureOnMainThreadRegion(m_page->mainFrame(), IntPoint());
|
| + Region shouldHandleScrollGestureOnMainThreadRegion = computeShouldHandleScrollGestureOnMainThreadRegion(m_page->deprecatedLocalMainFrame(), IntPoint());
|
| setShouldHandleScrollGestureOnMainThreadRegion(shouldHandleScrollGestureOnMainThreadRegion);
|
| m_scrollGestureRegionIsDirty = false;
|
| }
|
| @@ -148,7 +155,7 @@ void ScrollingCoordinator::updateAfterCompositingChangeIfNeeded()
|
| m_touchEventTargetRectsAreDirty = false;
|
| }
|
|
|
| - FrameView* frameView = m_page->mainFrame()->view();
|
| + FrameView* frameView = m_page->deprecatedLocalMainFrame()->view();
|
| bool frameIsScrollable = frameView && frameView->isScrollable();
|
| if (m_shouldScrollOnMainThreadDirty || m_wasFrameScrollable != frameIsScrollable) {
|
| setShouldUpdateScrollLayerPositionOnMainThread(mainThreadScrollingReasons());
|
| @@ -161,7 +168,7 @@ void ScrollingCoordinator::updateAfterCompositingChangeIfNeeded()
|
| if (WebLayer* scrollingWebLayer = frameView ? toWebLayer(frameView->layerForScrolling()) : 0) {
|
| scrollingWebLayer->setBounds(frameView->contentsSize());
|
| // If there is a fullscreen element, set the scroll clip layer to 0 so main frame won't scroll.
|
| - Document* mainFrameDocument = m_page->mainFrame()->document();
|
| + Document* mainFrameDocument = m_page->deprecatedLocalMainFrame()->document();
|
| Element* fullscreenElement = FullscreenElementStack::fullscreenElementFrom(*mainFrameDocument);
|
| if (fullscreenElement && fullscreenElement != mainFrameDocument->documentElement())
|
| scrollingWebLayer->setScrollClipLayer(0);
|
| @@ -323,7 +330,7 @@ void ScrollingCoordinator::scrollableAreaScrollbarLayerDidChange(ScrollableArea*
|
|
|
| WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea, orientation);
|
| if (!scrollbarLayer) {
|
| - Settings* settings = m_page->mainFrame()->document()->settings();
|
| + Settings* settings = m_page->mainFrame()->settings();
|
|
|
| OwnPtr<WebScrollbarLayer> webScrollbarLayer;
|
| if (settings->useSolidColorScrollbars()) {
|
| @@ -610,7 +617,7 @@ void ScrollingCoordinator::setTouchEventTargetRects(LayerHitTestRects& layerRect
|
| }
|
|
|
| GraphicsLayerHitTestRects graphicsLayerRects;
|
| - projectRectsToGraphicsLayerSpace(m_page->mainFrame(), layerRects, graphicsLayerRects);
|
| + projectRectsToGraphicsLayerSpace(m_page->deprecatedLocalMainFrame(), layerRects, graphicsLayerRects);
|
|
|
| for (GraphicsLayerHitTestRects::const_iterator iter = graphicsLayerRects.begin(); iter != graphicsLayerRects.end(); ++iter) {
|
| const GraphicsLayer* graphicsLayer = iter->key;
|
| @@ -627,14 +634,14 @@ void ScrollingCoordinator::touchEventTargetRectsDidChange()
|
| return;
|
|
|
| // Wait until after layout to update.
|
| - if (!m_page->mainFrame()->view() || m_page->mainFrame()->view()->needsLayout())
|
| + if (!m_page->deprecatedLocalMainFrame()->view() || m_page->deprecatedLocalMainFrame()->view()->needsLayout())
|
| return;
|
|
|
| // FIXME: scheduleAnimation() is just a method of forcing the compositor to realize that it
|
| // needs to commit here. We should expose a cleaner API for this.
|
| - RenderView* renderView = m_page->mainFrame()->contentRenderer();
|
| + RenderView* renderView = m_page->deprecatedLocalMainFrame()->contentRenderer();
|
| if (renderView && renderView->compositor() && renderView->compositor()->staleInCompositingMode())
|
| - m_page->mainFrame()->view()->scheduleAnimation();
|
| + m_page->deprecatedLocalMainFrame()->view()->scheduleAnimation();
|
|
|
| m_touchEventTargetRectsAreDirty = true;
|
| }
|
| @@ -666,10 +673,10 @@ void ScrollingCoordinator::updateHaveWheelEventHandlers()
|
| {
|
| ASSERT(isMainThread());
|
| ASSERT(m_page);
|
| - if (!m_page->mainFrame()->view())
|
| + if (!m_page->mainFrame()->isLocalFrame() || !m_page->deprecatedLocalMainFrame()->view())
|
| return;
|
|
|
| - if (WebLayer* scrollLayer = toWebLayer(m_page->mainFrame()->view()->layerForScrolling())) {
|
| + if (WebLayer* scrollLayer = toWebLayer(m_page->deprecatedLocalMainFrame()->view()->layerForScrolling())) {
|
| bool haveHandlers = m_page->frameHost().eventHandlerRegistry().hasEventHandlers(EventHandlerRegistry::WheelEvent);
|
| scrollLayer->setHaveWheelEventHandlers(haveHandlers);
|
| }
|
| @@ -679,13 +686,13 @@ void ScrollingCoordinator::updateHaveScrollEventHandlers()
|
| {
|
| ASSERT(isMainThread());
|
| ASSERT(m_page);
|
| - if (!m_page->mainFrame()->view())
|
| + if (!m_page->mainFrame()->isLocalFrame() || !m_page->deprecatedLocalMainFrame()->view())
|
| return;
|
|
|
| // Currently the compositor only cares whether there are scroll handlers anywhere on the page
|
| // instead on a per-layer basis. We therefore only update this information for the root
|
| // scrolling layer.
|
| - if (WebLayer* scrollLayer = toWebLayer(m_page->mainFrame()->view()->layerForScrolling())) {
|
| + if (WebLayer* scrollLayer = toWebLayer(m_page->deprecatedLocalMainFrame()->view()->layerForScrolling())) {
|
| bool haveHandlers = m_page->frameHost().eventHandlerRegistry().hasEventHandlers(EventHandlerRegistry::ScrollEvent);
|
| scrollLayer->setHaveScrollEventHandlers(haveHandlers);
|
| }
|
| @@ -693,7 +700,9 @@ void ScrollingCoordinator::updateHaveScrollEventHandlers()
|
|
|
| void ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons reasons)
|
| {
|
| - if (WebLayer* scrollLayer = toWebLayer(m_page->mainFrame()->view()->layerForScrolling())) {
|
| + if (!m_page->mainFrame()->isLocalFrame())
|
| + return;
|
| + if (WebLayer* scrollLayer = toWebLayer(m_page->deprecatedLocalMainFrame()->view()->layerForScrolling())) {
|
| m_lastMainThreadScrollingReasons = reasons;
|
| scrollLayer->setShouldScrollOnMainThread(reasons);
|
| }
|
| @@ -718,8 +727,11 @@ bool ScrollingCoordinator::coordinatesScrollingForFrameView(FrameView* frameView
|
| if (&frameView->frame() != m_page->mainFrame())
|
| return false;
|
|
|
| + if (!m_page->mainFrame()->isLocalFrame())
|
| + return false;
|
| +
|
| // We currently only support composited mode.
|
| - RenderView* renderView = m_page->mainFrame()->contentRenderer();
|
| + RenderView* renderView = m_page->deprecatedLocalMainFrame()->contentRenderer();
|
| if (!renderView)
|
| return false;
|
| return renderView->usesCompositing();
|
| @@ -852,7 +864,7 @@ void ScrollingCoordinator::computeTouchEventTargetRects(LayerHitTestRects& rects
|
| TRACE_EVENT0("input", "ScrollingCoordinator::computeTouchEventTargetRects");
|
| ASSERT(touchHitTestingEnabled());
|
|
|
| - Document* document = m_page->mainFrame()->document();
|
| + Document* document = m_page->deprecatedLocalMainFrame()->document();
|
| if (!document || !document->view())
|
| return;
|
|
|
| @@ -883,7 +895,7 @@ void ScrollingCoordinator::frameViewFixedObjectsDidChange(FrameView* frameView)
|
|
|
| bool ScrollingCoordinator::isForMainFrame(ScrollableArea* scrollableArea) const
|
| {
|
| - return scrollableArea == m_page->mainFrame()->view();
|
| + return m_page->mainFrame()->isLocalFrame() ? scrollableArea == m_page->deprecatedLocalMainFrame()->view() : false;
|
| }
|
|
|
| void ScrollingCoordinator::frameViewRootLayerDidChange(FrameView* frameView)
|
| @@ -907,7 +919,7 @@ void ScrollingCoordinator::handleWheelEventPhase(PlatformWheelEventPhase phase)
|
| if (!m_page)
|
| return;
|
|
|
| - FrameView* frameView = m_page->mainFrame()->view();
|
| + FrameView* frameView = m_page->deprecatedLocalMainFrame()->view();
|
| if (!frameView)
|
| return;
|
|
|
| @@ -943,7 +955,9 @@ MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() co
|
| // The main thread scrolling reasons are applicable to scrolls of the main
|
| // frame. If it does not exist or if it is not scrollable, there is no
|
| // reason to force main thread scrolling.
|
| - FrameView* frameView = m_page->mainFrame()->view();
|
| + if (!m_page->mainFrame()->isLocalFrame())
|
| + return static_cast<MainThreadScrollingReasons>(0);
|
| + FrameView* frameView = m_page->deprecatedLocalMainFrame()->view();
|
| if (!frameView)
|
| return static_cast<MainThreadScrollingReasons>(0);
|
|
|
| @@ -975,13 +989,13 @@ String ScrollingCoordinator::mainThreadScrollingReasonsAsText(MainThreadScrollin
|
|
|
| String ScrollingCoordinator::mainThreadScrollingReasonsAsText() const
|
| {
|
| - ASSERT(m_page->mainFrame()->document()->lifecycle().state() >= DocumentLifecycle::CompositingClean);
|
| + ASSERT(m_page->deprecatedLocalMainFrame()->document()->lifecycle().state() >= DocumentLifecycle::CompositingClean);
|
| return mainThreadScrollingReasonsAsText(m_lastMainThreadScrollingReasons);
|
| }
|
|
|
| bool ScrollingCoordinator::frameViewIsDirty() const
|
| {
|
| - FrameView* frameView = m_page->mainFrame()->view();
|
| + FrameView* frameView = m_page->mainFrame()->isLocalFrame() ? m_page->deprecatedLocalMainFrame()->view() : 0;
|
| bool frameIsScrollable = frameView && frameView->isScrollable();
|
| if (frameIsScrollable != m_wasFrameScrollable)
|
| return true;
|
|
|