OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Google 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 are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 #include "core/editing/FrameSelection.h" | 42 #include "core/editing/FrameSelection.h" |
43 #include "core/editing/InputMethodController.h" | 43 #include "core/editing/InputMethodController.h" |
44 #include "core/editing/iterators/TextIterator.h" | 44 #include "core/editing/iterators/TextIterator.h" |
45 #include "core/editing/markers/DocumentMarkerController.h" | 45 #include "core/editing/markers/DocumentMarkerController.h" |
46 #include "core/editing/serializers/HTMLInterchange.h" | 46 #include "core/editing/serializers/HTMLInterchange.h" |
47 #include "core/editing/serializers/Serialization.h" | 47 #include "core/editing/serializers/Serialization.h" |
48 #include "core/events/KeyboardEvent.h" | 48 #include "core/events/KeyboardEvent.h" |
49 #include "core/events/UIEventWithKeyState.h" | 49 #include "core/events/UIEventWithKeyState.h" |
50 #include "core/events/WheelEvent.h" | 50 #include "core/events/WheelEvent.h" |
51 #include "core/fetch/UniqueIdentifier.h" | 51 #include "core/fetch/UniqueIdentifier.h" |
| 52 #include "core/frame/BrowserControls.h" |
52 #include "core/frame/EventHandlerRegistry.h" | 53 #include "core/frame/EventHandlerRegistry.h" |
53 #include "core/frame/FrameHost.h" | 54 #include "core/frame/FrameHost.h" |
54 #include "core/frame/FrameView.h" | 55 #include "core/frame/FrameView.h" |
55 #include "core/frame/LocalFrame.h" | 56 #include "core/frame/LocalFrame.h" |
56 #include "core/frame/PageScaleConstraintsSet.h" | 57 #include "core/frame/PageScaleConstraintsSet.h" |
57 #include "core/frame/RemoteFrame.h" | 58 #include "core/frame/RemoteFrame.h" |
58 #include "core/frame/Settings.h" | 59 #include "core/frame/Settings.h" |
59 #include "core/frame/SmartClip.h" | 60 #include "core/frame/SmartClip.h" |
60 #include "core/frame/TopControls.h" | |
61 #include "core/frame/UseCounter.h" | 61 #include "core/frame/UseCounter.h" |
62 #include "core/frame/VisualViewport.h" | 62 #include "core/frame/VisualViewport.h" |
63 #include "core/html/HTMLMediaElement.h" | 63 #include "core/html/HTMLMediaElement.h" |
64 #include "core/html/HTMLPlugInElement.h" | 64 #include "core/html/HTMLPlugInElement.h" |
65 #include "core/html/HTMLTextAreaElement.h" | 65 #include "core/html/HTMLTextAreaElement.h" |
66 #include "core/input/EventHandler.h" | 66 #include "core/input/EventHandler.h" |
67 #include "core/input/TouchActionUtil.h" | 67 #include "core/input/TouchActionUtil.h" |
68 #include "core/layout/LayoutPart.h" | 68 #include "core/layout/LayoutPart.h" |
69 #include "core/layout/TextAutosizer.h" | 69 #include "core/layout/TextAutosizer.h" |
70 #include "core/layout/api/LayoutViewItem.h" | 70 #include "core/layout/api/LayoutViewItem.h" |
(...skipping 1814 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1885 } | 1885 } |
1886 | 1886 |
1887 void WebViewImpl::resizeVisualViewport(const WebSize& newSize) { | 1887 void WebViewImpl::resizeVisualViewport(const WebSize& newSize) { |
1888 page()->frameHost().visualViewport().setSize(newSize); | 1888 page()->frameHost().visualViewport().setSize(newSize); |
1889 page()->frameHost().visualViewport().clampToBoundaries(); | 1889 page()->frameHost().visualViewport().clampToBoundaries(); |
1890 } | 1890 } |
1891 | 1891 |
1892 void WebViewImpl::performResize() { | 1892 void WebViewImpl::performResize() { |
1893 // We'll keep the initial containing block size from changing when the top | 1893 // We'll keep the initial containing block size from changing when the top |
1894 // controls hide so that the ICB will always be the same size as the | 1894 // controls hide so that the ICB will always be the same size as the |
1895 // viewport with the top controls shown. | 1895 // viewport with the browser controls shown. |
1896 IntSize ICBSize = m_size; | 1896 IntSize ICBSize = m_size; |
1897 if (RuntimeEnabledFeatures::inertTopControlsEnabled() && | 1897 if (RuntimeEnabledFeatures::inertTopControlsEnabled() && |
1898 !topControls().shrinkViewport()) | 1898 !browserControls().shrinkViewport()) |
1899 ICBSize.expand(0, -topControls().height()); | 1899 ICBSize.expand(0, -browserControls().height()); |
1900 | 1900 |
1901 pageScaleConstraintsSet().didChangeInitialContainingBlockSize(ICBSize); | 1901 pageScaleConstraintsSet().didChangeInitialContainingBlockSize(ICBSize); |
1902 | 1902 |
1903 updatePageDefinedViewportConstraints( | 1903 updatePageDefinedViewportConstraints( |
1904 mainFrameImpl()->frame()->document()->viewportDescription()); | 1904 mainFrameImpl()->frame()->document()->viewportDescription()); |
1905 updateMainFrameLayoutSize(); | 1905 updateMainFrameLayoutSize(); |
1906 | 1906 |
1907 page()->frameHost().visualViewport().setSize(m_size); | 1907 page()->frameHost().visualViewport().setSize(m_size); |
1908 | 1908 |
1909 if (mainFrameImpl()->frameView()) { | 1909 if (mainFrameImpl()->frameView()) { |
1910 mainFrameImpl()->frameView()->setInitialViewportSize(ICBSize); | 1910 mainFrameImpl()->frameView()->setInitialViewportSize(ICBSize); |
1911 if (!mainFrameImpl()->frameView()->needsLayout()) | 1911 if (!mainFrameImpl()->frameView()->needsLayout()) |
1912 postLayoutResize(mainFrameImpl()); | 1912 postLayoutResize(mainFrameImpl()); |
1913 } | 1913 } |
1914 } | 1914 } |
1915 | 1915 |
1916 void WebViewImpl::updateTopControlsState(WebTopControlsState constraint, | 1916 void WebViewImpl::updateBrowserControlsState(WebBrowserControlsState constraint, |
1917 WebTopControlsState current, | 1917 WebBrowserControlsState current, |
1918 bool animate) { | 1918 bool animate) { |
1919 topControls().updateConstraintsAndState(constraint, current, animate); | 1919 browserControls().updateConstraintsAndState(constraint, current, animate); |
1920 | 1920 |
1921 if (m_layerTreeView) | 1921 if (m_layerTreeView) |
1922 m_layerTreeView->updateTopControlsState(constraint, current, animate); | 1922 m_layerTreeView->updateBrowserControlsState(constraint, current, animate); |
1923 } | 1923 } |
1924 | 1924 |
1925 void WebViewImpl::didUpdateTopControls() { | 1925 void WebViewImpl::didUpdateBrowserControls() { |
1926 if (m_layerTreeView) { | 1926 if (m_layerTreeView) { |
1927 m_layerTreeView->setTopControlsShownRatio(topControls().shownRatio()); | 1927 m_layerTreeView->setBrowserControlsShownRatio( |
1928 m_layerTreeView->setTopControlsHeight(topControls().height(), | 1928 browserControls().shownRatio()); |
1929 topControls().shrinkViewport()); | 1929 m_layerTreeView->setBrowserControlsHeight( |
| 1930 browserControls().height(), browserControls().shrinkViewport()); |
1930 } | 1931 } |
1931 | 1932 |
1932 WebLocalFrameImpl* mainFrame = mainFrameImpl(); | 1933 WebLocalFrameImpl* mainFrame = mainFrameImpl(); |
1933 if (!mainFrame) | 1934 if (!mainFrame) |
1934 return; | 1935 return; |
1935 | 1936 |
1936 FrameView* view = mainFrame->frameView(); | 1937 FrameView* view = mainFrame->frameView(); |
1937 if (!view) | 1938 if (!view) |
1938 return; | 1939 return; |
1939 | 1940 |
1940 VisualViewport& visualViewport = page()->frameHost().visualViewport(); | 1941 VisualViewport& visualViewport = page()->frameHost().visualViewport(); |
1941 | 1942 |
1942 { | 1943 { |
1943 // This object will save the current visual viewport offset w.r.t. the | 1944 // This object will save the current visual viewport offset w.r.t. the |
1944 // document and restore it when the object goes out of scope. It's | 1945 // document and restore it when the object goes out of scope. It's |
1945 // needed since the top controls adjustment will change the maximum | 1946 // needed since the browser controls adjustment will change the maximum |
1946 // scroll offset and we may need to reposition them to keep the user's | 1947 // scroll offset and we may need to reposition them to keep the user's |
1947 // apparent position unchanged. | 1948 // apparent position unchanged. |
1948 ResizeViewportAnchor::ResizeScope resizeScope(*m_resizeViewportAnchor); | 1949 ResizeViewportAnchor::ResizeScope resizeScope(*m_resizeViewportAnchor); |
1949 | 1950 |
1950 float topControlsViewportAdjustment = | 1951 float browserControlsViewportAdjustment = |
1951 topControls().layoutHeight() - topControls().contentOffset(); | 1952 browserControls().layoutHeight() - browserControls().contentOffset(); |
1952 visualViewport.setTopControlsAdjustment(topControlsViewportAdjustment); | 1953 visualViewport.setBrowserControlsAdjustment( |
| 1954 browserControlsViewportAdjustment); |
1953 | 1955 |
1954 // Since the FrameView is sized to be the visual viewport at minimum | 1956 // Since the FrameView is sized to be the visual viewport at minimum |
1955 // scale, its adjustment must also be scaled by the minimum scale. | 1957 // scale, its adjustment must also be scaled by the minimum scale. |
1956 view->setTopControlsViewportAdjustment(topControlsViewportAdjustment / | 1958 view->setBrowserControlsViewportAdjustment( |
1957 minimumPageScaleFactor()); | 1959 browserControlsViewportAdjustment / minimumPageScaleFactor()); |
1958 } | 1960 } |
1959 } | 1961 } |
1960 | 1962 |
1961 TopControls& WebViewImpl::topControls() { | 1963 BrowserControls& WebViewImpl::browserControls() { |
1962 return page()->frameHost().topControls(); | 1964 return page()->frameHost().browserControls(); |
1963 } | 1965 } |
1964 | 1966 |
1965 void WebViewImpl::resizeViewWhileAnchored(FrameView* view, | 1967 void WebViewImpl::resizeViewWhileAnchored(FrameView* view, |
1966 float topControlsHeight, | 1968 float browserControlsHeight, |
1967 bool topControlsShrinkLayout) { | 1969 bool browserControlsShrinkLayout) { |
1968 DCHECK(mainFrameImpl()); | 1970 DCHECK(mainFrameImpl()); |
1969 | 1971 |
1970 topControls().setHeight(topControlsHeight, topControlsShrinkLayout); | 1972 browserControls().setHeight(browserControlsHeight, |
| 1973 browserControlsShrinkLayout); |
1971 | 1974 |
1972 { | 1975 { |
1973 // Avoids unnecessary invalidations while various bits of state in | 1976 // Avoids unnecessary invalidations while various bits of state in |
1974 // TextAutosizer are updated. | 1977 // TextAutosizer are updated. |
1975 TextAutosizer::DeferUpdatePageInfo deferUpdatePageInfo(page()); | 1978 TextAutosizer::DeferUpdatePageInfo deferUpdatePageInfo(page()); |
1976 performResize(); | 1979 performResize(); |
1977 } | 1980 } |
1978 | 1981 |
1979 m_fullscreenController->updateSize(); | 1982 m_fullscreenController->updateSize(); |
1980 | 1983 |
1981 // Update lifecyle phases immediately to recalculate the minimum scale limit | 1984 // Update lifecyle phases immediately to recalculate the minimum scale limit |
1982 // for rotation anchoring, and to make sure that no lifecycle states are | 1985 // for rotation anchoring, and to make sure that no lifecycle states are |
1983 // stale if this WebView is embedded in another one. | 1986 // stale if this WebView is embedded in another one. |
1984 updateAllLifecyclePhases(); | 1987 updateAllLifecyclePhases(); |
1985 } | 1988 } |
1986 | 1989 |
1987 void WebViewImpl::resizeWithTopControls(const WebSize& newSize, | 1990 void WebViewImpl::resizeWithBrowserControls(const WebSize& newSize, |
1988 float topControlsHeight, | 1991 float browserControlsHeight, |
1989 bool topControlsShrinkLayout) { | 1992 bool browserControlsShrinkLayout) { |
1990 if (m_shouldAutoResize) | 1993 if (m_shouldAutoResize) |
1991 return; | 1994 return; |
1992 | 1995 |
1993 if (m_size == newSize && topControls().height() == topControlsHeight && | 1996 if (m_size == newSize && |
1994 topControls().shrinkViewport() == topControlsShrinkLayout) | 1997 browserControls().height() == browserControlsHeight && |
| 1998 browserControls().shrinkViewport() == browserControlsShrinkLayout) |
1995 return; | 1999 return; |
1996 | 2000 |
1997 if (page()->mainFrame() && !page()->mainFrame()->isLocalFrame()) { | 2001 if (page()->mainFrame() && !page()->mainFrame()->isLocalFrame()) { |
1998 // Viewport resize for a remote main frame does not require any | 2002 // Viewport resize for a remote main frame does not require any |
1999 // particular action, but the state needs to reflect the correct size | 2003 // particular action, but the state needs to reflect the correct size |
2000 // so that it can be used for initalization if the main frame gets | 2004 // so that it can be used for initalization if the main frame gets |
2001 // swapped to a LocalFrame at a later time. | 2005 // swapped to a LocalFrame at a later time. |
2002 m_size = newSize; | 2006 m_size = newSize; |
2003 pageScaleConstraintsSet().didChangeInitialContainingBlockSize(m_size); | 2007 pageScaleConstraintsSet().didChangeInitialContainingBlockSize(m_size); |
2004 page()->frameHost().visualViewport().setSize(m_size); | 2008 page()->frameHost().visualViewport().setSize(m_size); |
(...skipping 13 matching lines...) Expand all Loading... |
2018 bool isRotation = | 2022 bool isRotation = |
2019 page()->settings().mainFrameResizesAreOrientationChanges() && | 2023 page()->settings().mainFrameResizesAreOrientationChanges() && |
2020 m_size.width && contentsSize().width() && newSize.width != m_size.width && | 2024 m_size.width && contentsSize().width() && newSize.width != m_size.width && |
2021 !m_fullscreenController->isFullscreen(); | 2025 !m_fullscreenController->isFullscreen(); |
2022 m_size = newSize; | 2026 m_size = newSize; |
2023 | 2027 |
2024 FloatSize viewportAnchorCoords(viewportAnchorCoordX, viewportAnchorCoordY); | 2028 FloatSize viewportAnchorCoords(viewportAnchorCoordX, viewportAnchorCoordY); |
2025 if (isRotation) { | 2029 if (isRotation) { |
2026 RotationViewportAnchor anchor(*view, visualViewport, viewportAnchorCoords, | 2030 RotationViewportAnchor anchor(*view, visualViewport, viewportAnchorCoords, |
2027 pageScaleConstraintsSet()); | 2031 pageScaleConstraintsSet()); |
2028 resizeViewWhileAnchored(view, topControlsHeight, topControlsShrinkLayout); | 2032 resizeViewWhileAnchored(view, browserControlsHeight, |
| 2033 browserControlsShrinkLayout); |
2029 } else { | 2034 } else { |
2030 ResizeViewportAnchor::ResizeScope resizeScope(*m_resizeViewportAnchor); | 2035 ResizeViewportAnchor::ResizeScope resizeScope(*m_resizeViewportAnchor); |
2031 resizeViewWhileAnchored(view, topControlsHeight, topControlsShrinkLayout); | 2036 resizeViewWhileAnchored(view, browserControlsHeight, |
| 2037 browserControlsShrinkLayout); |
2032 } | 2038 } |
2033 sendResizeEventAndRepaint(); | 2039 sendResizeEventAndRepaint(); |
2034 } | 2040 } |
2035 | 2041 |
2036 void WebViewImpl::resize(const WebSize& newSize) { | 2042 void WebViewImpl::resize(const WebSize& newSize) { |
2037 if (m_shouldAutoResize || m_size == newSize) | 2043 if (m_shouldAutoResize || m_size == newSize) |
2038 return; | 2044 return; |
2039 | 2045 |
2040 resizeWithTopControls(newSize, topControls().height(), | 2046 resizeWithBrowserControls(newSize, browserControls().height(), |
2041 topControls().shrinkViewport()); | 2047 browserControls().shrinkViewport()); |
2042 } | 2048 } |
2043 | 2049 |
2044 void WebViewImpl::didEnterFullscreen() { | 2050 void WebViewImpl::didEnterFullscreen() { |
2045 m_fullscreenController->didEnterFullscreen(); | 2051 m_fullscreenController->didEnterFullscreen(); |
2046 } | 2052 } |
2047 | 2053 |
2048 void WebViewImpl::didExitFullscreen() { | 2054 void WebViewImpl::didExitFullscreen() { |
2049 m_fullscreenController->didExitFullscreen(); | 2055 m_fullscreenController->didExitFullscreen(); |
2050 } | 2056 } |
2051 | 2057 |
(...skipping 2282 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4334 } | 4340 } |
4335 } | 4341 } |
4336 | 4342 |
4337 void WebViewImpl::applyViewportDeltas( | 4343 void WebViewImpl::applyViewportDeltas( |
4338 const WebFloatSize& visualViewportDelta, | 4344 const WebFloatSize& visualViewportDelta, |
4339 // TODO(bokan): This parameter is to be removed but requires adjusting many | 4345 // TODO(bokan): This parameter is to be removed but requires adjusting many |
4340 // callsites. | 4346 // callsites. |
4341 const WebFloatSize&, | 4347 const WebFloatSize&, |
4342 const WebFloatSize& elasticOverscrollDelta, | 4348 const WebFloatSize& elasticOverscrollDelta, |
4343 float pageScaleDelta, | 4349 float pageScaleDelta, |
4344 float topControlsShownRatioDelta) { | 4350 float browserControlsShownRatioDelta) { |
4345 VisualViewport& visualViewport = page()->frameHost().visualViewport(); | 4351 VisualViewport& visualViewport = page()->frameHost().visualViewport(); |
4346 | 4352 |
4347 // Store the desired offsets the visual viewport before setting the top | 4353 // Store the desired offsets the visual viewport before setting the top |
4348 // controls ratio since doing so will change the bounds and move the | 4354 // controls ratio since doing so will change the bounds and move the |
4349 // viewports to keep the offsets valid. The compositor may have already | 4355 // viewports to keep the offsets valid. The compositor may have already |
4350 // done that so we don't want to double apply the deltas here. | 4356 // done that so we don't want to double apply the deltas here. |
4351 FloatPoint visualViewportOffset = visualViewport.visibleRect().location(); | 4357 FloatPoint visualViewportOffset = visualViewport.visibleRect().location(); |
4352 visualViewportOffset.move(visualViewportDelta.width, | 4358 visualViewportOffset.move(visualViewportDelta.width, |
4353 visualViewportDelta.height); | 4359 visualViewportDelta.height); |
4354 | 4360 |
4355 topControls().setShownRatio(topControls().shownRatio() + | 4361 browserControls().setShownRatio(browserControls().shownRatio() + |
4356 topControlsShownRatioDelta); | 4362 browserControlsShownRatioDelta); |
4357 | 4363 |
4358 setPageScaleFactorAndLocation(pageScaleFactor() * pageScaleDelta, | 4364 setPageScaleFactorAndLocation(pageScaleFactor() * pageScaleDelta, |
4359 visualViewportOffset); | 4365 visualViewportOffset); |
4360 | 4366 |
4361 if (pageScaleDelta != 1) { | 4367 if (pageScaleDelta != 1) { |
4362 m_doubleTapZoomPending = false; | 4368 m_doubleTapZoomPending = false; |
4363 visualViewport.userDidChangeScale(); | 4369 visualViewport.userDidChangeScale(); |
4364 } | 4370 } |
4365 | 4371 |
4366 m_elasticOverscroll += elasticOverscrollDelta; | 4372 m_elasticOverscroll += elasticOverscrollDelta; |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4551 if (focusedFrame->localFrameRoot() != mainFrameImpl()->frame()) | 4557 if (focusedFrame->localFrameRoot() != mainFrameImpl()->frame()) |
4552 return nullptr; | 4558 return nullptr; |
4553 return focusedFrame; | 4559 return focusedFrame; |
4554 } | 4560 } |
4555 | 4561 |
4556 LocalFrame* WebViewImpl::focusedLocalFrameAvailableForIme() const { | 4562 LocalFrame* WebViewImpl::focusedLocalFrameAvailableForIme() const { |
4557 return m_imeAcceptEvents ? focusedLocalFrameInWidget() : nullptr; | 4563 return m_imeAcceptEvents ? focusedLocalFrameInWidget() : nullptr; |
4558 } | 4564 } |
4559 | 4565 |
4560 } // namespace blink | 4566 } // namespace blink |
OLD | NEW |