| Index: Source/web/WebViewImpl.cpp
|
| diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp
|
| index 3b7c864e3da11d40649c5e1530495820ea38d7af..e7a26ca9b7a2cd97427e36ee1ba2a1dd4084cb6c 100644
|
| --- a/Source/web/WebViewImpl.cpp
|
| +++ b/Source/web/WebViewImpl.cpp
|
| @@ -949,11 +949,13 @@ bool WebViewImpl::endActiveFlingAnimation()
|
|
|
| bool WebViewImpl::startPageScaleAnimation(const IntPoint& targetPosition, bool useAnchor, float newScale, double durationInSeconds)
|
| {
|
| + PinchViewport& pinchViewport = page()->frameHost().pinchViewport();
|
| WebPoint clampedPoint = targetPosition;
|
| if (!useAnchor) {
|
| - clampedPoint = clampOffsetAtScale(targetPosition, newScale);
|
| + clampedPoint = pinchViewport.clampDocumentOffsetAtScale(targetPosition, newScale);
|
| if (!durationInSeconds) {
|
| - setPageScaleFactor(newScale, clampedPoint);
|
| + setPageScaleFactor(newScale);
|
| + pinchViewport.setLocationInDocument(DoublePoint(clampedPoint.x, clampedPoint.y));
|
| return false;
|
| }
|
| }
|
| @@ -1289,7 +1291,7 @@ void WebViewImpl::computeScaleAndScrollForBlockRect(const WebPoint& hitPointInRo
|
|
|
| scale = clampPageScaleFactorToLimits(scale);
|
| scroll = mainFrameImpl()->frameView()->rootFrameToContents(scroll);
|
| - scroll = clampOffsetAtScale(scroll, scale);
|
| + scroll = page()->frameHost().pinchViewport().clampDocumentOffsetAtScale(scroll, scale);
|
| }
|
|
|
| static Node* findCursorDefiningAncestor(Node* node, LocalFrame* frame)
|
| @@ -1761,9 +1763,6 @@ WebSize WebViewImpl::size()
|
|
|
| void WebViewImpl::resizePinchViewport(const WebSize& newSize)
|
| {
|
| - if (!pinchVirtualViewportEnabled())
|
| - return;
|
| -
|
| page()->frameHost().pinchViewport().setSize(newSize);
|
| page()->frameHost().pinchViewport().clampToBoundaries();
|
| }
|
| @@ -1775,13 +1774,7 @@ void WebViewImpl::performResize()
|
| updatePageDefinedViewportConstraints(mainFrameImpl()->frame()->document()->viewportDescription());
|
| updateMainFrameLayoutSize();
|
|
|
| - // If the virtual viewport pinch mode is enabled, the main frame will be resized
|
| - // after layout so it can be sized to the contentsSize.
|
| - if (!pinchVirtualViewportEnabled() && mainFrameImpl()->frameView())
|
| - mainFrameImpl()->frameView()->resize(m_size);
|
| -
|
| - if (pinchVirtualViewportEnabled())
|
| - page()->frameHost().pinchViewport().setSize(m_size);
|
| + page()->frameHost().pinchViewport().setSize(m_size);
|
|
|
| if (mainFrameImpl()->frameView()) {
|
| if (!mainFrameImpl()->frameView()->needsLayout())
|
| @@ -1830,28 +1823,21 @@ void WebViewImpl::didUpdateTopControls()
|
|
|
| float topControlsViewportAdjustment = topControls().layoutHeight() - topControls().contentOffset();
|
|
|
| - if (!pinchVirtualViewportEnabled()) {
|
| - // The viewport bounds were adjusted on the compositor by this much due to top controls. Tell
|
| - // the FrameView about it so it can make correct scroll offset clamping decisions during compositor
|
| - // commits.
|
| - view->setTopControlsViewportAdjustment(topControlsViewportAdjustment);
|
| - } else {
|
| - PinchViewport& pinchViewport = page()->frameHost().pinchViewport();
|
| + PinchViewport& pinchViewport = page()->frameHost().pinchViewport();
|
|
|
| - if (pinchViewport.visibleRect().isEmpty())
|
| - return;
|
| + if (pinchViewport.visibleRect().isEmpty())
|
| + return;
|
|
|
| - pinchViewport.setTopControlsAdjustment(topControlsViewportAdjustment);
|
| + pinchViewport.setTopControlsAdjustment(topControlsViewportAdjustment);
|
|
|
| - // On ChromeOS the pinch viewport can change size independent of the layout viewport due to the
|
| - // on screen keyboard so we should only set the FrameView adjustment on Android.
|
| - if (settings() && settings()->mainFrameResizesAreOrientationChanges()) {
|
| - // Shrink the FrameView by the amount that will maintain the aspect-ratio with the PinchViewport.
|
| - float aspectRatio = pinchViewport.visibleRect().width() / pinchViewport.visibleRect().height();
|
| - float newHeight = view->unscaledVisibleContentSize(ExcludeScrollbars).width() / aspectRatio;
|
| - float adjustment = newHeight - view->unscaledVisibleContentSize(ExcludeScrollbars).height();
|
| - view->setTopControlsViewportAdjustment(adjustment);
|
| - }
|
| + // On ChromeOS the pinch viewport can change size independent of the layout viewport due to the
|
| + // on screen keyboard so we should only set the FrameView adjustment on Android.
|
| + if (settings() && settings()->mainFrameResizesAreOrientationChanges()) {
|
| + // Shrink the FrameView by the amount that will maintain the aspect-ratio with the PinchViewport.
|
| + float aspectRatio = pinchViewport.visibleRect().width() / pinchViewport.visibleRect().height();
|
| + float newHeight = view->unscaledVisibleContentSize(ExcludeScrollbars).width() / aspectRatio;
|
| + float adjustment = newHeight - view->unscaledVisibleContentSize(ExcludeScrollbars).height();
|
| + view->setTopControlsViewportAdjustment(adjustment);
|
| }
|
| }
|
|
|
| @@ -1907,20 +1893,6 @@ void WebViewImpl::resize(const WebSize& newSize)
|
| sendResizeEventAndRepaint();
|
| }
|
|
|
| -IntRect WebViewImpl::visibleRectInDocument() const
|
| -{
|
| - if (pinchVirtualViewportEnabled()) {
|
| - // Inner viewport in the document coordinates
|
| - return enclosedIntRect(page()->frameHost().pinchViewport().visibleRectInDocument());
|
| - }
|
| -
|
| - // Outer viewport in the document coordinates
|
| - if (page()->mainFrame()->isLocalFrame())
|
| - return page()->deprecatedLocalMainFrame()->view()->visibleContentRect();
|
| -
|
| - return IntRect();
|
| -}
|
| -
|
| void WebViewImpl::willEndLiveResize()
|
| {
|
| if (mainFrameImpl() && mainFrameImpl()->frameView())
|
| @@ -2228,8 +2200,7 @@ bool WebViewImpl::handleInputEvent(const WebInputEvent& inputEvent)
|
| if (handleSyntheticWheelFromTouchpadPinchEvent(pinchEvent))
|
| return true;
|
|
|
| - if (pinchVirtualViewportEnabled()
|
| - && page()->frameHost().pinchViewport().magnifyScaleAroundAnchor(pinchEvent.data.pinchUpdate.scale, FloatPoint(pinchEvent.x, pinchEvent.y)))
|
| + if (page()->frameHost().pinchViewport().magnifyScaleAroundAnchor(pinchEvent.data.pinchUpdate.scale, FloatPoint(pinchEvent.x, pinchEvent.y)))
|
| return true;
|
| }
|
|
|
| @@ -3130,9 +3101,6 @@ float WebViewImpl::pageScaleFactor() const
|
| if (!page())
|
| return 1;
|
|
|
| - if (!pinchVirtualViewportEnabled())
|
| - return page()->pageScaleFactor();
|
| -
|
| return page()->frameHost().pinchViewport().scale();
|
| }
|
|
|
| @@ -3141,41 +3109,15 @@ float WebViewImpl::clampPageScaleFactorToLimits(float scaleFactor) const
|
| return m_pageScaleConstraintsSet.finalConstraints().clampToConstraints(scaleFactor);
|
| }
|
|
|
| -IntPoint WebViewImpl::clampOffsetAtScale(const IntPoint& offset, float scale)
|
| -{
|
| - FrameView* view = mainFrameImpl()->frameView();
|
| - if (!view)
|
| - return offset;
|
| -
|
| - if (!pinchVirtualViewportEnabled())
|
| - return view->clampOffsetAtScale(offset, scale);
|
| -
|
| - return page()->frameHost().pinchViewport().clampDocumentOffsetAtScale(offset, scale);
|
| -}
|
| -
|
| -bool WebViewImpl::pinchVirtualViewportEnabled() const
|
| -{
|
| - ASSERT(page());
|
| - return page()->settings().pinchVirtualViewportEnabled();
|
| -}
|
| -
|
| void WebViewImpl::setPinchViewportOffset(const WebFloatPoint& offset)
|
| {
|
| ASSERT(page());
|
| -
|
| - if (!pinchVirtualViewportEnabled())
|
| - return;
|
| -
|
| page()->frameHost().pinchViewport().setLocation(offset);
|
| }
|
|
|
| WebFloatPoint WebViewImpl::pinchViewportOffset() const
|
| {
|
| ASSERT(page());
|
| -
|
| - if (!pinchVirtualViewportEnabled())
|
| - return WebFloatPoint();
|
| -
|
| return page()->frameHost().pinchViewport().visibleRect().location();
|
| }
|
|
|
| @@ -3183,12 +3125,6 @@ void WebViewImpl::scrollAndRescaleViewports(float scaleFactor,
|
| const IntPoint& mainFrameOrigin,
|
| const FloatPoint& pinchViewportOrigin)
|
| {
|
| - // Old way
|
| - if (!pinchVirtualViewportEnabled()) {
|
| - setPageScaleFactor(scaleFactor, mainFrameOrigin);
|
| - return;
|
| - }
|
| -
|
| if (!page())
|
| return;
|
|
|
| @@ -3211,7 +3147,6 @@ void WebViewImpl::scrollAndRescaleViewports(float scaleFactor,
|
|
|
| void WebViewImpl::setPageScaleFactorAndLocation(float scaleFactor, const FloatPoint& location)
|
| {
|
| - ASSERT(pinchVirtualViewportEnabled());
|
| ASSERT(page());
|
|
|
| page()->frameHost().pinchViewport().setScaleAndLocation(
|
| @@ -3227,14 +3162,6 @@ void WebViewImpl::setPageScaleFactor(float scaleFactor)
|
| if (scaleFactor == pageScaleFactor())
|
| return;
|
|
|
| - // FIXME(bokan): Old-style pinch path. Remove when we're migrated to
|
| - // virtual viewport pinch.
|
| - if (!pinchVirtualViewportEnabled()) {
|
| - IntPoint scrollOffset(mainFrame()->scrollOffset().width, mainFrame()->scrollOffset().height);
|
| - setPageScaleFactor(scaleFactor, scrollOffset);
|
| - return;
|
| - }
|
| -
|
| page()->frameHost().pinchViewport().setScale(scaleFactor);
|
| }
|
|
|
| @@ -3243,23 +3170,6 @@ void WebViewImpl::setMainFrameScrollOffset(const WebPoint& origin)
|
| updateMainFrameScrollPosition(DoublePoint(origin.x, origin.y), false);
|
| }
|
|
|
| -void WebViewImpl::setPageScaleFactor(float scaleFactor, const WebPoint& origin)
|
| -{
|
| - if (!page())
|
| - return;
|
| -
|
| - IntPoint newScrollOffset = origin;
|
| - scaleFactor = clampPageScaleFactorToLimits(scaleFactor);
|
| - newScrollOffset = clampOffsetAtScale(newScrollOffset, scaleFactor);
|
| -
|
| - if (pinchVirtualViewportEnabled())
|
| - setPageScaleFactor(scaleFactor);
|
| - // Note, we don't set the offset in the new path. This method is going
|
| - // away for the new pinch model so that's ok.
|
| - else
|
| - page()->setPageScaleFactor(scaleFactor, newScrollOffset);
|
| -}
|
| -
|
| float WebViewImpl::deviceScaleFactor() const
|
| {
|
| if (!page())
|
| @@ -3376,9 +3286,6 @@ void WebViewImpl::setIgnoreViewportTagScaleLimits(bool ignore)
|
|
|
| IntSize WebViewImpl::mainFrameSize()
|
| {
|
| - if (!pinchVirtualViewportEnabled())
|
| - return m_size;
|
| -
|
| return m_pageScaleConstraintsSet.mainFrameSize();
|
| }
|
|
|
| @@ -3537,9 +3444,6 @@ float WebViewImpl::maximumPageScaleFactor() const
|
|
|
| void WebViewImpl::resetScrollAndScaleState()
|
| {
|
| - // FIXME(bokan): This is done by the pinchViewport().reset() call below and
|
| - // can be removed when the new pinch path is the only one.
|
| - setPageScaleFactor(1);
|
| updateMainFrameScrollPosition(IntPoint(), true);
|
| page()->frameHost().pinchViewport().reset();
|
|
|
| @@ -4096,13 +4000,10 @@ void WebViewImpl::resumeTreeViewCommits()
|
| void WebViewImpl::postLayoutResize(WebLocalFrameImpl* webframe)
|
| {
|
| FrameView* view = webframe->frame()->view();
|
| - if (pinchVirtualViewportEnabled()) {
|
| - if (webframe == mainFrame()) {
|
| - view->resize(mainFrameSize());
|
| - } else {
|
| - view->resize(webframe->frameView()->layoutSize());
|
| - }
|
| - }
|
| + if (webframe == mainFrame())
|
| + view->resize(mainFrameSize());
|
| + else
|
| + view->resize(webframe->frameView()->layoutSize());
|
| }
|
|
|
| void WebViewImpl::layoutUpdated(WebLocalFrameImpl* webframe)
|
| @@ -4218,19 +4119,7 @@ void WebViewImpl::setOverlayLayer(GraphicsLayer* layer)
|
| if (!m_page->mainFrame()->isLocalFrame())
|
| return;
|
|
|
| - if (pinchVirtualViewportEnabled()) {
|
| - m_page->deprecatedLocalMainFrame()->view()->layoutView()->compositor()->setOverlayLayer(layer);
|
| - return;
|
| - }
|
| -
|
| - // FIXME(bokan): This path goes away after virtual viewport pinch is enabled everywhere.
|
| - if (!m_rootTransformLayer)
|
| - m_rootTransformLayer = m_page->deprecatedLocalMainFrame()->view()->layoutView()->compositor()->ensureRootTransformLayer();
|
| -
|
| - if (m_rootTransformLayer) {
|
| - if (layer->parent() != m_rootTransformLayer)
|
| - m_rootTransformLayer->addChild(layer);
|
| - }
|
| + m_page->deprecatedLocalMainFrame()->view()->layoutView()->compositor()->setOverlayLayer(layer);
|
| }
|
|
|
| Element* WebViewImpl::focusedElement() const
|
| @@ -4303,21 +4192,15 @@ void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* layer)
|
| {
|
| suppressInvalidations(true);
|
|
|
| - if (pinchVirtualViewportEnabled()) {
|
| - PinchViewport& pinchViewport = page()->frameHost().pinchViewport();
|
| - pinchViewport.attachToLayerTree(layer, graphicsLayerFactory());
|
| - if (layer) {
|
| - m_rootGraphicsLayer = pinchViewport.rootGraphicsLayer();
|
| - m_rootLayer = pinchViewport.rootGraphicsLayer()->platformLayer();
|
| - m_rootTransformLayer = pinchViewport.rootGraphicsLayer();
|
| - } else {
|
| - m_rootGraphicsLayer = nullptr;
|
| - m_rootLayer = nullptr;
|
| - m_rootTransformLayer = nullptr;
|
| - }
|
| + PinchViewport& pinchViewport = page()->frameHost().pinchViewport();
|
| + pinchViewport.attachToLayerTree(layer, graphicsLayerFactory());
|
| + if (layer) {
|
| + m_rootGraphicsLayer = pinchViewport.rootGraphicsLayer();
|
| + m_rootLayer = pinchViewport.rootGraphicsLayer()->platformLayer();
|
| + m_rootTransformLayer = pinchViewport.rootGraphicsLayer();
|
| } else {
|
| - m_rootGraphicsLayer = layer;
|
| - m_rootLayer = layer ? layer->platformLayer() : 0;
|
| + m_rootGraphicsLayer = nullptr;
|
| + m_rootLayer = nullptr;
|
| m_rootTransformLayer = nullptr;
|
| }
|
|
|
| @@ -4330,21 +4213,10 @@ void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* layer)
|
| m_layerTreeView->setRootLayer(*m_rootLayer);
|
| // We register viewport layers here since there may not be a layer
|
| // tree view prior to this point.
|
| - if (pinchVirtualViewportEnabled()) {
|
| - page()->frameHost().pinchViewport().registerLayersWithTreeView(m_layerTreeView);
|
| - } else {
|
| - GraphicsLayer* rootScrollLayer = compositor()->scrollLayer();
|
| - ASSERT(rootScrollLayer);
|
| - WebLayer* pageScaleLayer = rootScrollLayer->parent() ? rootScrollLayer->parent()->platformLayer() : nullptr;
|
| - // Note that it is invalid to have 0 as a scroll elasticity layer when using pinch virtual viewport.
|
| - m_layerTreeView->registerViewportLayers(0, pageScaleLayer, rootScrollLayer->platformLayer(), 0);
|
| - }
|
| + page()->frameHost().pinchViewport().registerLayersWithTreeView(m_layerTreeView);
|
| } else {
|
| m_layerTreeView->clearRootLayer();
|
| - if (pinchVirtualViewportEnabled())
|
| - page()->frameHost().pinchViewport().clearLayersForTreeView(m_layerTreeView);
|
| - else
|
| - m_layerTreeView->clearViewportLayers();
|
| + page()->frameHost().pinchViewport().clearLayersForTreeView(m_layerTreeView);
|
| }
|
| }
|
|
|
| @@ -4495,8 +4367,6 @@ void WebViewImpl::applyViewportDeltas(
|
| float pageScaleDelta,
|
| float topControlsShownRatioDelta)
|
| {
|
| - ASSERT(pinchVirtualViewportEnabled());
|
| -
|
| if (!mainFrameImpl())
|
| return;
|
| FrameView* frameView = mainFrameImpl()->frameView();
|
| @@ -4518,31 +4388,6 @@ void WebViewImpl::applyViewportDeltas(
|
| DoubleSize(outerViewportDelta.width, outerViewportDelta.height), /* programmaticScroll */ false);
|
| }
|
|
|
| -void WebViewImpl::applyViewportDeltas(const WebSize& scrollDelta, float pageScaleDelta, float topControlsShownRatioDelta)
|
| -{
|
| - if (!mainFrameImpl() || !mainFrameImpl()->frameView())
|
| - return;
|
| -
|
| - topControls().setShownRatio(topControls().shownRatio() + topControlsShownRatioDelta);
|
| -
|
| - if (pageScaleDelta == 1) {
|
| - TRACE_EVENT_INSTANT2("blink", "WebViewImpl::applyScrollAndScale::scrollBy", "x", scrollDelta.width, "y", scrollDelta.height);
|
| - WebSize webScrollOffset = mainFrame()->scrollOffset();
|
| - IntPoint scrollOffset(webScrollOffset.width + scrollDelta.width, webScrollOffset.height + scrollDelta.height);
|
| - updateMainFrameScrollPosition(scrollOffset, false);
|
| - } else {
|
| - // The page scale changed, so apply a scale and scroll in a single
|
| - // operation.
|
| - WebSize scrollOffset = mainFrame()->scrollOffset();
|
| - scrollOffset.width += scrollDelta.width;
|
| - scrollOffset.height += scrollDelta.height;
|
| -
|
| - WebPoint scrollPoint(scrollOffset.width, scrollOffset.height);
|
| - setPageScaleFactor(pageScaleFactor() * pageScaleDelta, scrollPoint);
|
| - m_doubleTapZoomPending = false;
|
| - }
|
| -}
|
| -
|
| void WebViewImpl::updateLayerTreeViewport()
|
| {
|
| if (!page() || !m_layerTreeView)
|
| @@ -4575,11 +4420,6 @@ void WebViewImpl::updateRootLayerTransform()
|
| if (!m_rootGraphicsLayer)
|
| return;
|
|
|
| - // FIXME(bokan): m_rootTransformLayer is always set here in pinch virtual viewport. This can go away once
|
| - // that's default everywhere.
|
| - if (!m_rootTransformLayer && m_page->mainFrame()->isLocalFrame())
|
| - m_rootTransformLayer = m_page->deprecatedLocalMainFrame()->view()->layoutView()->compositor()->ensureRootTransformLayer();
|
| -
|
| if (m_rootTransformLayer) {
|
| TransformationMatrix transform;
|
| transform.translate(m_rootLayerOffset.width, m_rootLayerOffset.height);
|
|
|