| Index: chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
|
| index 84c8a59eda50f5eb17408b1fbffe2ede92597d6a..f0c3124633af193bedba6b1449ebd084d61b2b5a 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/Tab.java
|
| @@ -87,6 +87,7 @@ import org.chromium.chrome.browser.tabmodel.TabModelImpl;
|
| import org.chromium.chrome.browser.tabmodel.TabModelSelector;
|
| import org.chromium.chrome.browser.tabmodel.TabReparentingParams;
|
| import org.chromium.chrome.browser.util.ColorUtils;
|
| +import org.chromium.chrome.browser.util.FeatureUtilities;
|
| import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
|
| import org.chromium.components.navigation_interception.InterceptNavigationDelegate;
|
| import org.chromium.components.security_state.ConnectionSecurityLevel;
|
| @@ -347,8 +348,9 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
|
| private TabRedirectHandler mTabRedirectHandler;
|
|
|
| private FullscreenManager mFullscreenManager;
|
| - private float mPreviousFullscreenBrowserControlsOffsetY = Float.NaN;
|
| - private float mPreviousFullscreenContentOffsetY = Float.NaN;
|
| + private float mPreviousTopControlsOffsetY = Float.NaN;
|
| + private float mPreviousBottomControlsOffsetY = Float.NaN;
|
| + private float mPreviousContentOffsetY = Float.NaN;
|
| private int mFullscreenHungRendererToken = FullscreenManager.INVALID_TOKEN;
|
| private boolean mIsFullscreenWaitingForLoad = false;
|
|
|
| @@ -388,7 +390,16 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
|
| @Override
|
| public void onTopControlsChanged(float topControlsOffsetY, float topContentOffsetY) {
|
| super.onTopControlsChanged(topControlsOffsetY, topContentOffsetY);
|
| - onOffsetsChanged(topControlsOffsetY, topContentOffsetY, isShowingSadTab());
|
| + onOffsetsChanged(topControlsOffsetY, mPreviousBottomControlsOffsetY,
|
| + topContentOffsetY, isShowingSadTab());
|
| + }
|
| +
|
| + @Override
|
| + public void onBottomControlsChanged(float bottomControlsOffsetY,
|
| + float bottomContentOffsetY) {
|
| + super.onBottomControlsChanged(bottomControlsOffsetY, bottomContentOffsetY);
|
| + onOffsetsChanged(mPreviousTopControlsOffsetY, bottomControlsOffsetY,
|
| + mPreviousContentOffsetY, isShowingSadTab());
|
| }
|
|
|
| @Override
|
| @@ -2028,8 +2039,9 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
|
| mInfoBarContainer = null;
|
| }
|
|
|
| - mPreviousFullscreenBrowserControlsOffsetY = Float.NaN;
|
| - mPreviousFullscreenContentOffsetY = Float.NaN;
|
| + mPreviousTopControlsOffsetY = Float.NaN;
|
| + mPreviousBottomControlsOffsetY = Float.NaN;
|
| + mPreviousContentOffsetY = Float.NaN;
|
|
|
| mNeedsReload = false;
|
|
|
| @@ -2676,20 +2688,24 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
|
| /**
|
| * Called when offset values related with fullscreen functionality has been changed by the
|
| * compositor.
|
| - * @param browserControlsOffsetY The Y offset of the browser controls in physical pixels.
|
| + * @param topControlsOffsetY The Y offset of the top controls in physical pixels.
|
| + * @param bottomControlsOffsetY The Y offset of the bottom controls in physical pixels.
|
| * @param contentOffsetY The Y offset of the content in physical pixels.
|
| * @param isNonFullscreenPage Whether a current page is non-fullscreen page or not.
|
| */
|
| private void onOffsetsChanged(
|
| - float browserControlsOffsetY, float contentOffsetY, boolean isNonFullscreenPage) {
|
| - mPreviousFullscreenBrowserControlsOffsetY = browserControlsOffsetY;
|
| - mPreviousFullscreenContentOffsetY = contentOffsetY;
|
| + float topControlsOffsetY, float bottomControlsOffsetY, float contentOffsetY,
|
| + boolean isNonFullscreenPage) {
|
| + mPreviousTopControlsOffsetY = topControlsOffsetY;
|
| + mPreviousBottomControlsOffsetY = bottomControlsOffsetY;
|
| + mPreviousContentOffsetY = contentOffsetY;
|
|
|
| if (mFullscreenManager == null) return;
|
| if (isNonFullscreenPage || isNativePage()) {
|
| mFullscreenManager.setPositionsForTabToNonFullscreen();
|
| } else {
|
| - mFullscreenManager.setPositionsForTab(browserControlsOffsetY, contentOffsetY);
|
| + mFullscreenManager.setPositionsForTab(topControlsOffsetY, bottomControlsOffsetY,
|
| + contentOffsetY);
|
| }
|
| TabModelImpl.setActualTabSwitchLatencyMetricRequired();
|
| }
|
| @@ -2796,12 +2812,20 @@ public class Tab implements ViewGroup.OnHierarchyChangeListener,
|
| public void setFullscreenManager(FullscreenManager manager) {
|
| mFullscreenManager = manager;
|
| if (mFullscreenManager != null) {
|
| - if (Float.isNaN(mPreviousFullscreenBrowserControlsOffsetY)
|
| - || Float.isNaN(mPreviousFullscreenContentOffsetY)) {
|
| + boolean topOffsetsInitialized = !Float.isNaN(mPreviousTopControlsOffsetY)
|
| + && !Float.isNaN(mPreviousContentOffsetY);
|
| + boolean bottomOffsetsInitialized =
|
| + !Float.isNaN(mPreviousBottomControlsOffsetY);
|
| + boolean isChromeHomeEnabled = FeatureUtilities.isChromeHomeEnabled();
|
| +
|
| + // Make sure the dominant control offsets have been set.
|
| + if ((!topOffsetsInitialized && !isChromeHomeEnabled)
|
| + || (!bottomOffsetsInitialized && isChromeHomeEnabled)) {
|
| mFullscreenManager.setPositionsForTabToNonFullscreen();
|
| } else {
|
| - mFullscreenManager.setPositionsForTab(mPreviousFullscreenBrowserControlsOffsetY,
|
| - mPreviousFullscreenContentOffsetY);
|
| + mFullscreenManager.setPositionsForTab(mPreviousTopControlsOffsetY,
|
| + mPreviousBottomControlsOffsetY,
|
| + mPreviousContentOffsetY);
|
| }
|
| mFullscreenManager.showControlsTransient();
|
| updateFullscreenEnabledState();
|
|
|