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

Side by Side Diff: Source/core/page/scrolling/ScrollingCoordinator.cpp

Issue 336553003: Change Page::m_mainFrame to be a Frame. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Rebased Created 6 years, 6 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/page/SpatialNavigation.cpp ('k') | Source/core/plugins/DOMMimeType.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2011 Apple Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 , m_lastMainThreadScrollingReasons(0) 92 , m_lastMainThreadScrollingReasons(0)
93 { 93 {
94 } 94 }
95 95
96 ScrollingCoordinator::~ScrollingCoordinator() 96 ScrollingCoordinator::~ScrollingCoordinator()
97 { 97 {
98 } 98 }
99 99
100 bool ScrollingCoordinator::touchHitTestingEnabled() const 100 bool ScrollingCoordinator::touchHitTestingEnabled() const
101 { 101 {
102 RenderView* contentRenderer = m_page->mainFrame()->contentRenderer(); 102 if (!m_page->mainFrame()->isLocalFrame())
103 Settings* settings = m_page->mainFrame()->document()->settings(); 103 return false;
104 RenderView* contentRenderer = m_page->deprecatedLocalMainFrame()->contentRen derer();
105 Settings* settings = m_page->mainFrame()->settings();
104 return RuntimeEnabledFeatures::touchEnabled() && settings->compositorTouchHi tTesting() && contentRenderer && contentRenderer->usesCompositing(); 106 return RuntimeEnabledFeatures::touchEnabled() && settings->compositorTouchHi tTesting() && contentRenderer && contentRenderer->usesCompositing();
105 } 107 }
106 108
107 void ScrollingCoordinator::setShouldHandleScrollGestureOnMainThreadRegion(const Region& region) 109 void ScrollingCoordinator::setShouldHandleScrollGestureOnMainThreadRegion(const Region& region)
108 { 110 {
109 if (WebLayer* scrollLayer = toWebLayer(m_page->mainFrame()->view()->layerFor Scrolling())) { 111 if (!m_page->mainFrame()->isLocalFrame())
112 return;
113 if (WebLayer* scrollLayer = toWebLayer(m_page->deprecatedLocalMainFrame()->v iew()->layerForScrolling())) {
110 Vector<IntRect> rects = region.rects(); 114 Vector<IntRect> rects = region.rects();
111 WebVector<WebRect> webRects(rects.size()); 115 WebVector<WebRect> webRects(rects.size());
112 for (size_t i = 0; i < rects.size(); ++i) 116 for (size_t i = 0; i < rects.size(); ++i)
113 webRects[i] = rects[i]; 117 webRects[i] = rects[i];
114 scrollLayer->setNonFastScrollableRegion(webRects); 118 scrollLayer->setNonFastScrollableRegion(webRects);
115 } 119 }
116 } 120 }
117 121
118 void ScrollingCoordinator::notifyLayoutUpdated() 122 void ScrollingCoordinator::notifyLayoutUpdated()
119 { 123 {
120 m_scrollGestureRegionIsDirty = true; 124 m_scrollGestureRegionIsDirty = true;
121 m_touchEventTargetRectsAreDirty = true; 125 m_touchEventTargetRectsAreDirty = true;
122 m_shouldScrollOnMainThreadDirty = true; 126 m_shouldScrollOnMainThreadDirty = true;
123 } 127 }
124 128
125 void ScrollingCoordinator::updateAfterCompositingChangeIfNeeded() 129 void ScrollingCoordinator::updateAfterCompositingChangeIfNeeded()
126 { 130 {
131 if (!m_page->mainFrame()->isLocalFrame())
132 return;
133
127 if (!shouldUpdateAfterCompositingChange()) 134 if (!shouldUpdateAfterCompositingChange())
128 return; 135 return;
129 136
130 TRACE_EVENT0("input", "ScrollingCoordinator::updateAfterCompositingChangeIfN eeded"); 137 TRACE_EVENT0("input", "ScrollingCoordinator::updateAfterCompositingChangeIfN eeded");
131 138
132 if (m_scrollGestureRegionIsDirty) { 139 if (m_scrollGestureRegionIsDirty) {
133 // Compute the region of the page where we can't handle scroll gestures and mousewheel events 140 // Compute the region of the page where we can't handle scroll gestures and mousewheel events
134 // on the impl thread. This currently includes: 141 // on the impl thread. This currently includes:
135 // 1. All scrollable areas, such as subframes, overflow divs and list bo xes, whose composited 142 // 1. All scrollable areas, such as subframes, overflow divs and list bo xes, whose composited
136 // scrolling are not enabled. We need to do this even if the frame view whose layout was updated 143 // scrolling are not enabled. We need to do this even if the frame view whose layout was updated
137 // is not the main frame. 144 // is not the main frame.
138 // 2. Resize control areas, e.g. the small rect at the right bottom of d iv/textarea/iframe when 145 // 2. Resize control areas, e.g. the small rect at the right bottom of d iv/textarea/iframe when
139 // CSS property "resize" is enabled. 146 // CSS property "resize" is enabled.
140 // 3. Plugin areas. 147 // 3. Plugin areas.
141 Region shouldHandleScrollGestureOnMainThreadRegion = computeShouldHandle ScrollGestureOnMainThreadRegion(m_page->mainFrame(), IntPoint()); 148 Region shouldHandleScrollGestureOnMainThreadRegion = computeShouldHandle ScrollGestureOnMainThreadRegion(m_page->deprecatedLocalMainFrame(), IntPoint());
142 setShouldHandleScrollGestureOnMainThreadRegion(shouldHandleScrollGesture OnMainThreadRegion); 149 setShouldHandleScrollGestureOnMainThreadRegion(shouldHandleScrollGesture OnMainThreadRegion);
143 m_scrollGestureRegionIsDirty = false; 150 m_scrollGestureRegionIsDirty = false;
144 } 151 }
145 152
146 if (m_touchEventTargetRectsAreDirty) { 153 if (m_touchEventTargetRectsAreDirty) {
147 updateTouchEventTargetRectsIfNeeded(); 154 updateTouchEventTargetRectsIfNeeded();
148 m_touchEventTargetRectsAreDirty = false; 155 m_touchEventTargetRectsAreDirty = false;
149 } 156 }
150 157
151 FrameView* frameView = m_page->mainFrame()->view(); 158 FrameView* frameView = m_page->deprecatedLocalMainFrame()->view();
152 bool frameIsScrollable = frameView && frameView->isScrollable(); 159 bool frameIsScrollable = frameView && frameView->isScrollable();
153 if (m_shouldScrollOnMainThreadDirty || m_wasFrameScrollable != frameIsScroll able) { 160 if (m_shouldScrollOnMainThreadDirty || m_wasFrameScrollable != frameIsScroll able) {
154 setShouldUpdateScrollLayerPositionOnMainThread(mainThreadScrollingReason s()); 161 setShouldUpdateScrollLayerPositionOnMainThread(mainThreadScrollingReason s());
155 m_shouldScrollOnMainThreadDirty = false; 162 m_shouldScrollOnMainThreadDirty = false;
156 } 163 }
157 m_wasFrameScrollable = frameIsScrollable; 164 m_wasFrameScrollable = frameIsScrollable;
158 165
159 // The mainFrame view doesn't get included in the FrameTree below, so we 166 // The mainFrame view doesn't get included in the FrameTree below, so we
160 // update its size separately. 167 // update its size separately.
161 if (WebLayer* scrollingWebLayer = frameView ? toWebLayer(frameView->layerFor Scrolling()) : 0) { 168 if (WebLayer* scrollingWebLayer = frameView ? toWebLayer(frameView->layerFor Scrolling()) : 0) {
162 scrollingWebLayer->setBounds(frameView->contentsSize()); 169 scrollingWebLayer->setBounds(frameView->contentsSize());
163 // If there is a fullscreen element, set the scroll clip layer to 0 so m ain frame won't scroll. 170 // If there is a fullscreen element, set the scroll clip layer to 0 so m ain frame won't scroll.
164 Document* mainFrameDocument = m_page->mainFrame()->document(); 171 Document* mainFrameDocument = m_page->deprecatedLocalMainFrame()->docume nt();
165 Element* fullscreenElement = FullscreenElementStack::fullscreenElementFr om(*mainFrameDocument); 172 Element* fullscreenElement = FullscreenElementStack::fullscreenElementFr om(*mainFrameDocument);
166 if (fullscreenElement && fullscreenElement != mainFrameDocument->documen tElement()) 173 if (fullscreenElement && fullscreenElement != mainFrameDocument->documen tElement())
167 scrollingWebLayer->setScrollClipLayer(0); 174 scrollingWebLayer->setScrollClipLayer(0);
168 else 175 else
169 scrollingWebLayer->setScrollClipLayer(toWebLayer(frameView->layerFor Container())); 176 scrollingWebLayer->setScrollClipLayer(toWebLayer(frameView->layerFor Container()));
170 } 177 }
171 178
172 const FrameTree& tree = m_page->mainFrame()->tree(); 179 const FrameTree& tree = m_page->mainFrame()->tree();
173 for (const Frame* child = tree.firstChild(); child; child = child->tree().ne xtSibling()) { 180 for (const Frame* child = tree.firstChild(); child; child = child->tree().ne xtSibling()) {
174 if (!child->isLocalFrame()) 181 if (!child->isLocalFrame())
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 323
317 if (scrollbarGraphicsLayer) { 324 if (scrollbarGraphicsLayer) {
318 Scrollbar* scrollbar = orientation == HorizontalScrollbar ? scrollableAr ea->horizontalScrollbar() : scrollableArea->verticalScrollbar(); 325 Scrollbar* scrollbar = orientation == HorizontalScrollbar ? scrollableAr ea->horizontalScrollbar() : scrollableArea->verticalScrollbar();
319 if (scrollbar->isCustomScrollbar()) { 326 if (scrollbar->isCustomScrollbar()) {
320 detachScrollbarLayer(scrollbarGraphicsLayer); 327 detachScrollbarLayer(scrollbarGraphicsLayer);
321 return; 328 return;
322 } 329 }
323 330
324 WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea, orientation); 331 WebScrollbarLayer* scrollbarLayer = getWebScrollbarLayer(scrollableArea, orientation);
325 if (!scrollbarLayer) { 332 if (!scrollbarLayer) {
326 Settings* settings = m_page->mainFrame()->document()->settings(); 333 Settings* settings = m_page->mainFrame()->settings();
327 334
328 OwnPtr<WebScrollbarLayer> webScrollbarLayer; 335 OwnPtr<WebScrollbarLayer> webScrollbarLayer;
329 if (settings->useSolidColorScrollbars()) { 336 if (settings->useSolidColorScrollbars()) {
330 ASSERT(RuntimeEnabledFeatures::overlayScrollbarsEnabled()); 337 ASSERT(RuntimeEnabledFeatures::overlayScrollbarsEnabled());
331 webScrollbarLayer = createSolidColorScrollbarLayer(orientation, scrollbar->theme()->thumbThickness(scrollbar), scrollbar->theme()->trackPosition (scrollbar), scrollableArea->shouldPlaceVerticalScrollbarOnLeft()); 338 webScrollbarLayer = createSolidColorScrollbarLayer(orientation, scrollbar->theme()->thumbThickness(scrollbar), scrollbar->theme()->trackPosition (scrollbar), scrollableArea->shouldPlaceVerticalScrollbarOnLeft());
332 } else { 339 } else {
333 webScrollbarLayer = createScrollbarLayer(scrollbar); 340 webScrollbarLayer = createScrollbarLayer(scrollbar);
334 } 341 }
335 scrollbarLayer = addWebScrollbarLayer(scrollableArea, orientation, w ebScrollbarLayer.release()); 342 scrollbarLayer = addWebScrollbarLayer(scrollableArea, orientation, w ebScrollbarLayer.release());
336 } 343 }
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 610
604 // Ensure we have an entry for each composited layer that previously had rec ts (so that old 611 // Ensure we have an entry for each composited layer that previously had rec ts (so that old
605 // ones will get cleared out). Note that ideally we'd track this on Graphics Layer instead of 612 // ones will get cleared out). Note that ideally we'd track this on Graphics Layer instead of
606 // RenderLayer, but we have no good hook into the lifetime of a GraphicsLaye r. 613 // RenderLayer, but we have no good hook into the lifetime of a GraphicsLaye r.
607 for (HashSet<const RenderLayer*>::iterator it = oldLayersWithTouchRects.begi n(); it != oldLayersWithTouchRects.end(); ++it) { 614 for (HashSet<const RenderLayer*>::iterator it = oldLayersWithTouchRects.begi n(); it != oldLayersWithTouchRects.end(); ++it) {
608 if (!layerRects.contains(*it)) 615 if (!layerRects.contains(*it))
609 layerRects.add(*it, Vector<LayoutRect>()); 616 layerRects.add(*it, Vector<LayoutRect>());
610 } 617 }
611 618
612 GraphicsLayerHitTestRects graphicsLayerRects; 619 GraphicsLayerHitTestRects graphicsLayerRects;
613 projectRectsToGraphicsLayerSpace(m_page->mainFrame(), layerRects, graphicsLa yerRects); 620 projectRectsToGraphicsLayerSpace(m_page->deprecatedLocalMainFrame(), layerRe cts, graphicsLayerRects);
614 621
615 for (GraphicsLayerHitTestRects::const_iterator iter = graphicsLayerRects.beg in(); iter != graphicsLayerRects.end(); ++iter) { 622 for (GraphicsLayerHitTestRects::const_iterator iter = graphicsLayerRects.beg in(); iter != graphicsLayerRects.end(); ++iter) {
616 const GraphicsLayer* graphicsLayer = iter->key; 623 const GraphicsLayer* graphicsLayer = iter->key;
617 WebVector<WebRect> webRects(iter->value.size()); 624 WebVector<WebRect> webRects(iter->value.size());
618 for (size_t i = 0; i < iter->value.size(); ++i) 625 for (size_t i = 0; i < iter->value.size(); ++i)
619 webRects[i] = enclosingIntRect(iter->value[i]); 626 webRects[i] = enclosingIntRect(iter->value[i]);
620 graphicsLayer->platformLayer()->setTouchEventHandlerRegion(webRects); 627 graphicsLayer->platformLayer()->setTouchEventHandlerRegion(webRects);
621 } 628 }
622 } 629 }
623 630
624 void ScrollingCoordinator::touchEventTargetRectsDidChange() 631 void ScrollingCoordinator::touchEventTargetRectsDidChange()
625 { 632 {
626 if (!touchHitTestingEnabled()) 633 if (!touchHitTestingEnabled())
627 return; 634 return;
628 635
629 // Wait until after layout to update. 636 // Wait until after layout to update.
630 if (!m_page->mainFrame()->view() || m_page->mainFrame()->view()->needsLayout ()) 637 if (!m_page->deprecatedLocalMainFrame()->view() || m_page->deprecatedLocalMa inFrame()->view()->needsLayout())
631 return; 638 return;
632 639
633 // FIXME: scheduleAnimation() is just a method of forcing the compositor to realize that it 640 // FIXME: scheduleAnimation() is just a method of forcing the compositor to realize that it
634 // needs to commit here. We should expose a cleaner API for this. 641 // needs to commit here. We should expose a cleaner API for this.
635 RenderView* renderView = m_page->mainFrame()->contentRenderer(); 642 RenderView* renderView = m_page->deprecatedLocalMainFrame()->contentRenderer ();
636 if (renderView && renderView->compositor() && renderView->compositor()->stal eInCompositingMode()) 643 if (renderView && renderView->compositor() && renderView->compositor()->stal eInCompositingMode())
637 m_page->mainFrame()->view()->scheduleAnimation(); 644 m_page->deprecatedLocalMainFrame()->view()->scheduleAnimation();
638 645
639 m_touchEventTargetRectsAreDirty = true; 646 m_touchEventTargetRectsAreDirty = true;
640 } 647 }
641 648
642 void ScrollingCoordinator::updateScrollParentForGraphicsLayer(GraphicsLayer* chi ld, RenderLayer* parent) 649 void ScrollingCoordinator::updateScrollParentForGraphicsLayer(GraphicsLayer* chi ld, RenderLayer* parent)
643 { 650 {
644 WebLayer* scrollParentWebLayer = 0; 651 WebLayer* scrollParentWebLayer = 0;
645 if (parent && parent->hasCompositedLayerMapping()) 652 if (parent && parent->hasCompositedLayerMapping())
646 scrollParentWebLayer = toWebLayer(parent->compositedLayerMapping()->pare ntForSublayers()); 653 scrollParentWebLayer = toWebLayer(parent->compositedLayerMapping()->pare ntForSublayers());
647 654
(...skipping 11 matching lines...) Expand all
659 666
660 void ScrollingCoordinator::willDestroyRenderLayer(RenderLayer* layer) 667 void ScrollingCoordinator::willDestroyRenderLayer(RenderLayer* layer)
661 { 668 {
662 m_layersWithTouchRects.remove(layer); 669 m_layersWithTouchRects.remove(layer);
663 } 670 }
664 671
665 void ScrollingCoordinator::updateHaveWheelEventHandlers() 672 void ScrollingCoordinator::updateHaveWheelEventHandlers()
666 { 673 {
667 ASSERT(isMainThread()); 674 ASSERT(isMainThread());
668 ASSERT(m_page); 675 ASSERT(m_page);
669 if (!m_page->mainFrame()->view()) 676 if (!m_page->mainFrame()->isLocalFrame() || !m_page->deprecatedLocalMainFram e()->view())
670 return; 677 return;
671 678
672 if (WebLayer* scrollLayer = toWebLayer(m_page->mainFrame()->view()->layerFor Scrolling())) { 679 if (WebLayer* scrollLayer = toWebLayer(m_page->deprecatedLocalMainFrame()->v iew()->layerForScrolling())) {
673 bool haveHandlers = m_page->frameHost().eventHandlerRegistry().hasEventH andlers(EventHandlerRegistry::WheelEvent); 680 bool haveHandlers = m_page->frameHost().eventHandlerRegistry().hasEventH andlers(EventHandlerRegistry::WheelEvent);
674 scrollLayer->setHaveWheelEventHandlers(haveHandlers); 681 scrollLayer->setHaveWheelEventHandlers(haveHandlers);
675 } 682 }
676 } 683 }
677 684
678 void ScrollingCoordinator::updateHaveScrollEventHandlers() 685 void ScrollingCoordinator::updateHaveScrollEventHandlers()
679 { 686 {
680 ASSERT(isMainThread()); 687 ASSERT(isMainThread());
681 ASSERT(m_page); 688 ASSERT(m_page);
682 if (!m_page->mainFrame()->view()) 689 if (!m_page->mainFrame()->isLocalFrame() || !m_page->deprecatedLocalMainFram e()->view())
683 return; 690 return;
684 691
685 // Currently the compositor only cares whether there are scroll handlers any where on the page 692 // Currently the compositor only cares whether there are scroll handlers any where on the page
686 // instead on a per-layer basis. We therefore only update this information f or the root 693 // instead on a per-layer basis. We therefore only update this information f or the root
687 // scrolling layer. 694 // scrolling layer.
688 if (WebLayer* scrollLayer = toWebLayer(m_page->mainFrame()->view()->layerFor Scrolling())) { 695 if (WebLayer* scrollLayer = toWebLayer(m_page->deprecatedLocalMainFrame()->v iew()->layerForScrolling())) {
689 bool haveHandlers = m_page->frameHost().eventHandlerRegistry().hasEventH andlers(EventHandlerRegistry::ScrollEvent); 696 bool haveHandlers = m_page->frameHost().eventHandlerRegistry().hasEventH andlers(EventHandlerRegistry::ScrollEvent);
690 scrollLayer->setHaveScrollEventHandlers(haveHandlers); 697 scrollLayer->setHaveScrollEventHandlers(haveHandlers);
691 } 698 }
692 } 699 }
693 700
694 void ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread(MainTh readScrollingReasons reasons) 701 void ScrollingCoordinator::setShouldUpdateScrollLayerPositionOnMainThread(MainTh readScrollingReasons reasons)
695 { 702 {
696 if (WebLayer* scrollLayer = toWebLayer(m_page->mainFrame()->view()->layerFor Scrolling())) { 703 if (!m_page->mainFrame()->isLocalFrame())
704 return;
705 if (WebLayer* scrollLayer = toWebLayer(m_page->deprecatedLocalMainFrame()->v iew()->layerForScrolling())) {
697 m_lastMainThreadScrollingReasons = reasons; 706 m_lastMainThreadScrollingReasons = reasons;
698 scrollLayer->setShouldScrollOnMainThread(reasons); 707 scrollLayer->setShouldScrollOnMainThread(reasons);
699 } 708 }
700 } 709 }
701 710
702 void ScrollingCoordinator::willBeDestroyed() 711 void ScrollingCoordinator::willBeDestroyed()
703 { 712 {
704 ASSERT(m_page); 713 ASSERT(m_page);
705 m_page = 0; 714 m_page = 0;
706 for (ScrollbarMap::iterator it = m_horizontalScrollbars.begin(); it != m_hor izontalScrollbars.end(); ++it) 715 for (ScrollbarMap::iterator it = m_horizontalScrollbars.begin(); it != m_hor izontalScrollbars.end(); ++it)
707 GraphicsLayer::unregisterContentsLayer(it->value->layer()); 716 GraphicsLayer::unregisterContentsLayer(it->value->layer());
708 for (ScrollbarMap::iterator it = m_verticalScrollbars.begin(); it != m_verti calScrollbars.end(); ++it) 717 for (ScrollbarMap::iterator it = m_verticalScrollbars.begin(); it != m_verti calScrollbars.end(); ++it)
709 GraphicsLayer::unregisterContentsLayer(it->value->layer()); 718 GraphicsLayer::unregisterContentsLayer(it->value->layer());
710 } 719 }
711 720
712 bool ScrollingCoordinator::coordinatesScrollingForFrameView(FrameView* frameView ) const 721 bool ScrollingCoordinator::coordinatesScrollingForFrameView(FrameView* frameView ) const
713 { 722 {
714 ASSERT(isMainThread()); 723 ASSERT(isMainThread());
715 ASSERT(m_page); 724 ASSERT(m_page);
716 725
717 // We currently only handle the main frame. 726 // We currently only handle the main frame.
718 if (&frameView->frame() != m_page->mainFrame()) 727 if (&frameView->frame() != m_page->mainFrame())
719 return false; 728 return false;
720 729
730 if (!m_page->mainFrame()->isLocalFrame())
731 return false;
732
721 // We currently only support composited mode. 733 // We currently only support composited mode.
722 RenderView* renderView = m_page->mainFrame()->contentRenderer(); 734 RenderView* renderView = m_page->deprecatedLocalMainFrame()->contentRenderer ();
723 if (!renderView) 735 if (!renderView)
724 return false; 736 return false;
725 return renderView->usesCompositing(); 737 return renderView->usesCompositing();
726 } 738 }
727 739
728 Region ScrollingCoordinator::computeShouldHandleScrollGestureOnMainThreadRegion( const LocalFrame* frame, const IntPoint& frameLocation) const 740 Region ScrollingCoordinator::computeShouldHandleScrollGestureOnMainThreadRegion( const LocalFrame* frame, const IntPoint& frameLocation) const
729 { 741 {
730 Region shouldHandleScrollGestureOnMainThreadRegion; 742 Region shouldHandleScrollGestureOnMainThreadRegion;
731 FrameView* frameView = frame->view(); 743 FrameView* frameView = frame->view();
732 if (!frameView) 744 if (!frameView)
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 } 857 }
846 } 858 }
847 859
848 } 860 }
849 861
850 void ScrollingCoordinator::computeTouchEventTargetRects(LayerHitTestRects& rects ) 862 void ScrollingCoordinator::computeTouchEventTargetRects(LayerHitTestRects& rects )
851 { 863 {
852 TRACE_EVENT0("input", "ScrollingCoordinator::computeTouchEventTargetRects"); 864 TRACE_EVENT0("input", "ScrollingCoordinator::computeTouchEventTargetRects");
853 ASSERT(touchHitTestingEnabled()); 865 ASSERT(touchHitTestingEnabled());
854 866
855 Document* document = m_page->mainFrame()->document(); 867 Document* document = m_page->deprecatedLocalMainFrame()->document();
856 if (!document || !document->view()) 868 if (!document || !document->view())
857 return; 869 return;
858 870
859 accumulateDocumentTouchEventTargetRects(rects, document); 871 accumulateDocumentTouchEventTargetRects(rects, document);
860 } 872 }
861 873
862 void ScrollingCoordinator::frameViewHasSlowRepaintObjectsDidChange(FrameView* fr ameView) 874 void ScrollingCoordinator::frameViewHasSlowRepaintObjectsDidChange(FrameView* fr ameView)
863 { 875 {
864 ASSERT(isMainThread()); 876 ASSERT(isMainThread());
865 ASSERT(m_page); 877 ASSERT(m_page);
(...skipping 10 matching lines...) Expand all
876 ASSERT(m_page); 888 ASSERT(m_page);
877 889
878 if (!coordinatesScrollingForFrameView(frameView)) 890 if (!coordinatesScrollingForFrameView(frameView))
879 return; 891 return;
880 892
881 m_shouldScrollOnMainThreadDirty = true; 893 m_shouldScrollOnMainThreadDirty = true;
882 } 894 }
883 895
884 bool ScrollingCoordinator::isForMainFrame(ScrollableArea* scrollableArea) const 896 bool ScrollingCoordinator::isForMainFrame(ScrollableArea* scrollableArea) const
885 { 897 {
886 return scrollableArea == m_page->mainFrame()->view(); 898 return m_page->mainFrame()->isLocalFrame() ? scrollableArea == m_page->depre catedLocalMainFrame()->view() : false;
887 } 899 }
888 900
889 void ScrollingCoordinator::frameViewRootLayerDidChange(FrameView* frameView) 901 void ScrollingCoordinator::frameViewRootLayerDidChange(FrameView* frameView)
890 { 902 {
891 ASSERT(isMainThread()); 903 ASSERT(isMainThread());
892 ASSERT(m_page); 904 ASSERT(m_page);
893 905
894 if (!coordinatesScrollingForFrameView(frameView)) 906 if (!coordinatesScrollingForFrameView(frameView))
895 return; 907 return;
896 908
897 notifyLayoutUpdated(); 909 notifyLayoutUpdated();
898 updateHaveWheelEventHandlers(); 910 updateHaveWheelEventHandlers();
899 updateHaveScrollEventHandlers(); 911 updateHaveScrollEventHandlers();
900 } 912 }
901 913
902 #if OS(MACOSX) 914 #if OS(MACOSX)
903 void ScrollingCoordinator::handleWheelEventPhase(PlatformWheelEventPhase phase) 915 void ScrollingCoordinator::handleWheelEventPhase(PlatformWheelEventPhase phase)
904 { 916 {
905 ASSERT(isMainThread()); 917 ASSERT(isMainThread());
906 918
907 if (!m_page) 919 if (!m_page)
908 return; 920 return;
909 921
910 FrameView* frameView = m_page->mainFrame()->view(); 922 FrameView* frameView = m_page->deprecatedLocalMainFrame()->view();
911 if (!frameView) 923 if (!frameView)
912 return; 924 return;
913 925
914 frameView->scrollAnimator()->handleWheelEventPhase(phase); 926 frameView->scrollAnimator()->handleWheelEventPhase(phase);
915 } 927 }
916 #endif 928 #endif
917 929
918 bool ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects(Frame View* frameView) const 930 bool ScrollingCoordinator::hasVisibleSlowRepaintViewportConstrainedObjects(Frame View* frameView) const
919 { 931 {
920 const FrameView::ViewportConstrainedObjectSet* viewportConstrainedObjects = frameView->viewportConstrainedObjects(); 932 const FrameView::ViewportConstrainedObjectSet* viewportConstrainedObjects = frameView->viewportConstrainedObjects();
(...skipping 15 matching lines...) Expand all
936 return true; 948 return true;
937 } 949 }
938 return false; 950 return false;
939 } 951 }
940 952
941 MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() co nst 953 MainThreadScrollingReasons ScrollingCoordinator::mainThreadScrollingReasons() co nst
942 { 954 {
943 // The main thread scrolling reasons are applicable to scrolls of the main 955 // The main thread scrolling reasons are applicable to scrolls of the main
944 // frame. If it does not exist or if it is not scrollable, there is no 956 // frame. If it does not exist or if it is not scrollable, there is no
945 // reason to force main thread scrolling. 957 // reason to force main thread scrolling.
946 FrameView* frameView = m_page->mainFrame()->view(); 958 if (!m_page->mainFrame()->isLocalFrame())
959 return static_cast<MainThreadScrollingReasons>(0);
960 FrameView* frameView = m_page->deprecatedLocalMainFrame()->view();
947 if (!frameView) 961 if (!frameView)
948 return static_cast<MainThreadScrollingReasons>(0); 962 return static_cast<MainThreadScrollingReasons>(0);
949 963
950 MainThreadScrollingReasons mainThreadScrollingReasons = (MainThreadScrolling Reasons)0; 964 MainThreadScrollingReasons mainThreadScrollingReasons = (MainThreadScrolling Reasons)0;
951 965
952 if (frameView->hasSlowRepaintObjects()) 966 if (frameView->hasSlowRepaintObjects())
953 mainThreadScrollingReasons |= HasSlowRepaintObjects; 967 mainThreadScrollingReasons |= HasSlowRepaintObjects;
954 if (hasVisibleSlowRepaintViewportConstrainedObjects(frameView)) 968 if (hasVisibleSlowRepaintViewportConstrainedObjects(frameView))
955 mainThreadScrollingReasons |= HasNonLayerViewportConstrainedObjects; 969 mainThreadScrollingReasons |= HasNonLayerViewportConstrainedObjects;
956 970
(...skipping 11 matching lines...) Expand all
968 if (reasons & ScrollingCoordinator::HasNonLayerViewportConstrainedObjects) 982 if (reasons & ScrollingCoordinator::HasNonLayerViewportConstrainedObjects)
969 stringBuilder.append("Has non-layer viewport-constrained objects, "); 983 stringBuilder.append("Has non-layer viewport-constrained objects, ");
970 984
971 if (stringBuilder.length()) 985 if (stringBuilder.length())
972 stringBuilder.resize(stringBuilder.length() - 2); 986 stringBuilder.resize(stringBuilder.length() - 2);
973 return stringBuilder.toString(); 987 return stringBuilder.toString();
974 } 988 }
975 989
976 String ScrollingCoordinator::mainThreadScrollingReasonsAsText() const 990 String ScrollingCoordinator::mainThreadScrollingReasonsAsText() const
977 { 991 {
978 ASSERT(m_page->mainFrame()->document()->lifecycle().state() >= DocumentLifec ycle::CompositingClean); 992 ASSERT(m_page->deprecatedLocalMainFrame()->document()->lifecycle().state() > = DocumentLifecycle::CompositingClean);
979 return mainThreadScrollingReasonsAsText(m_lastMainThreadScrollingReasons); 993 return mainThreadScrollingReasonsAsText(m_lastMainThreadScrollingReasons);
980 } 994 }
981 995
982 bool ScrollingCoordinator::frameViewIsDirty() const 996 bool ScrollingCoordinator::frameViewIsDirty() const
983 { 997 {
984 FrameView* frameView = m_page->mainFrame()->view(); 998 FrameView* frameView = m_page->mainFrame()->isLocalFrame() ? m_page->depreca tedLocalMainFrame()->view() : 0;
985 bool frameIsScrollable = frameView && frameView->isScrollable(); 999 bool frameIsScrollable = frameView && frameView->isScrollable();
986 if (frameIsScrollable != m_wasFrameScrollable) 1000 if (frameIsScrollable != m_wasFrameScrollable)
987 return true; 1001 return true;
988 1002
989 if (WebLayer* scrollLayer = frameView ? toWebLayer(frameView->layerForScroll ing()) : 0) 1003 if (WebLayer* scrollLayer = frameView ? toWebLayer(frameView->layerForScroll ing()) : 0)
990 return blink::WebSize(frameView->contentsSize()) != scrollLayer->bounds( ); 1004 return blink::WebSize(frameView->contentsSize()) != scrollLayer->bounds( );
991 return false; 1005 return false;
992 } 1006 }
993 1007
994 } // namespace WebCore 1008 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/page/SpatialNavigation.cpp ('k') | Source/core/plugins/DOMMimeType.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698