Commit a1dc3684 authored by Jinsuk Kim's avatar Jinsuk Kim Committed by Commit Bot

Android: Move remaining fullscreen tasks to FullscreenHtmlApiHandler

This CL moves the remaining fullscreen enter/exit-related tasks to
FullscreenHtmlApiHandler. ChromeFullscreenManager is still the
receiver of the requests but simply relays the call to the handler.

Added another method |onEnterFullscreen| FullscreenManager
interface. This is used by TabWebContentsDelegateAndroid to process
the fullscreen initiation flow.

Follow-up CL will split ChromeFullscreenManager and route the
initiation/termination flow directly to the handler.

Bug: 966272
Change-Id: I86b3ad0ee027cde26144469a262737711825cd15
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2245170
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: default avatarMatthew Jones <mdjones@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#779628}
parent 7a647232
......@@ -30,6 +30,7 @@ import org.chromium.chrome.browser.document.ChromeIntentUtil;
import org.chromium.chrome.browser.document.DocumentWebContentsDelegate;
import org.chromium.chrome.browser.fullscreen.BrowserControlsStateProvider;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenManager;
import org.chromium.chrome.browser.fullscreen.FullscreenOptions;
import org.chromium.chrome.browser.media.PictureInPicture;
import org.chromium.chrome.browser.policy.PolicyAuditor;
......@@ -126,7 +127,7 @@ public class ActivityTabWebContentsDelegateAndroid extends TabWebContentsDelegat
@Override
public boolean isFullscreenForTabOrPending() {
ChromeFullscreenManager manager = getFullscreenManager();
FullscreenManager manager = getFullscreenManager();
return manager != null ? manager.getPersistentFullscreenMode() : false;
}
......@@ -336,13 +337,13 @@ public class ActivityTabWebContentsDelegateAndroid extends TabWebContentsDelegat
@Override
public boolean controlsResizeView() {
ChromeFullscreenManager manager = getFullscreenManager();
return manager != null ? manager.controlsResizeView() : false;
return mActivity != null && mActivity.getCompositorViewHolder() != null
&& mActivity.getCompositorViewHolder().controlsResizeView();
}
@Override
public void enterFullscreenModeForTab(boolean prefersNavigationBar) {
ChromeFullscreenManager manager = getFullscreenManager();
FullscreenManager manager = getFullscreenManager();
if (manager != null) {
manager.onEnterFullscreen(mTab, new FullscreenOptions(prefersNavigationBar));
}
......@@ -350,7 +351,7 @@ public class ActivityTabWebContentsDelegateAndroid extends TabWebContentsDelegat
@Override
public void exitFullscreenModeForTab() {
ChromeFullscreenManager manager = getFullscreenManager();
FullscreenManager manager = getFullscreenManager();
if (manager != null) manager.onExitFullscreen(mTab);
}
......
......@@ -48,6 +48,7 @@ import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.contextualsearch.ContextualSearchManagementDelegate;
import org.chromium.chrome.browser.device.DeviceClassManager;
import org.chromium.chrome.browser.fullscreen.BrowserControlsStateProvider;
import org.chromium.chrome.browser.fullscreen.BrowserControlsUtils;
import org.chromium.chrome.browser.fullscreen.ChromeFullscreenManager;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
......@@ -163,6 +164,8 @@ public class CompositorViewHolder extends FrameLayout
private boolean mIsInVr;
private boolean mControlsResizeView;
// Indicates if ContentCaptureConsumer should be created, we only try to create it once.
private boolean mShouldCreateContentCaptureConsumer = true;
private ContentCaptureConsumer mContentCaptureConsumer;
......@@ -721,7 +724,7 @@ public class CompositorViewHolder extends FrameLayout
? mFullscreenManager.getTopControlsMinHeight()
+ mFullscreenManager.getBottomControlsMinHeight()
: 0;
int controlsHeight = controlsResizeView()
int controlsHeight = mControlsResizeView
? getTopControlsHeightPixels() + getBottomControlsHeightPixels()
: totalMinHeight;
......@@ -811,6 +814,9 @@ public class CompositorViewHolder extends FrameLayout
}
private void onUpdateViewportSize() {
if (mFullscreenManager != null) {
mControlsResizeView = BrowserControlsUtils.controlsResizeView(mFullscreenManager);
}
// Reflect the changes that may have happened in in view/control size.
Point viewportSize = getViewportSize();
setSize(getWebContents(), getContentView(), viewportSize.x, viewportSize.y);
......@@ -1021,7 +1027,7 @@ public class CompositorViewHolder extends FrameLayout
* @return {@code true} if browser controls shrink Blink view's size.
*/
public boolean controlsResizeView() {
return mFullscreenManager != null && mFullscreenManager.controlsResizeView();
return mControlsResizeView;
}
@Override
......
......@@ -29,4 +29,24 @@ public class BrowserControlsUtils {
public static boolean drawControlsAsTexture(BrowserControlsStateProvider stateProvider) {
return stateProvider.getBrowserControlHiddenRatio() > 0;
}
/**
* TODO(jinsukkim): Move this to CompositorViewHolder.
* @return {@code true} if browser controls shrink Blink view's size. Note that this
* is valid only when the browser controls are in idle state i.e. not scrolling
* or animating.
*/
public static boolean controlsResizeView(BrowserControlsStateProvider stateProvider) {
return stateProvider.getContentOffset() > stateProvider.getTopControlsMinHeight()
|| getBottomContentOffset(stateProvider)
> stateProvider.getBottomControlsMinHeight();
}
/**
* @return The content offset from the bottom of the screen, or the visible height of the bottom
* controls, in px.
*/
public static int getBottomContentOffset(BrowserControlsStateProvider stateProvider) {
return stateProvider.getBottomControlsHeight() - stateProvider.getBottomControlOffset();
}
}
......@@ -49,6 +49,13 @@ public interface FullscreenManager {
*/
void exitPersistentFullscreenMode();
/**
* Enter fullscreen.
* @param tab {@link Tab} that goes into fullscreen.
* @param options Fullscreen options.
*/
void onEnterFullscreen(Tab tab, FullscreenOptions options);
/**
* Exit fullscreen.
* @param tab {@link Tab} that goes out of fullscreen.
......
......@@ -70,6 +70,7 @@ public class FullscreenManagerUnitTest {
private UserDataHost mUserDataHost = new UserDataHost();
private ChromeFullscreenManager mFullscreenManager;
private boolean mControlsResizeView;
@Before
public void setUp() {
......@@ -96,6 +97,9 @@ public class FullscreenManagerUnitTest {
mFullscreenManager.initialize(mControlContainer, mActivityTabProvider, mTabModelSelector,
R.dimen.control_container_height);
mFullscreenManager.addObserver(mBrowserControlsStateProviderObserver);
mFullscreenManager.setViewportSizeDelegate(() -> {
mControlsResizeView = BrowserControlsUtils.controlsResizeView(mFullscreenManager);
});
when(mFullscreenManager.getTab()).thenReturn(mTab);
}
......@@ -128,13 +132,13 @@ public class FullscreenManagerUnitTest {
final int topHeight = 100;
final int topMinHeight = 0;
TabModelSelectorTabObserver tabFullscreenObserver =
mFullscreenManager.getTabFullscreenObserverForTesting();
TabModelSelectorTabObserver tabControlsObserver =
mFullscreenManager.getTabControlsObserverForTesting();
mFullscreenManager.setTopControlsHeight(topHeight, topMinHeight);
// Send initial offsets.
tabFullscreenObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ 0,
tabControlsObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ 0,
/*bottomControlsOffsetY*/ 0, /*contentOffsetY*/ 100,
/*topControlsMinHeightOffsetY*/ 0, /*bottomControlsMinHeightOffsetY*/ 0);
// Initially, the controls should be fully visible.
......@@ -142,20 +146,20 @@ public class FullscreenManagerUnitTest {
BrowserControlsUtils.areBrowserControlsFullyVisible(mFullscreenManager));
assertTrue("ControlsResizeView is false,"
+ " but it should be true when the controls are fully visible.",
mFullscreenManager.controlsResizeView());
mControlsResizeView);
// Scroll to fully hidden.
tabFullscreenObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ -100,
tabControlsObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ -100,
/*bottomControlsOffsetY*/ 0, /*contentOffsetY*/ 0,
/*topControlsMinHeightOffsetY*/ 0, /*bottomControlsMinHeightOffsetY*/ 0);
assertTrue("Browser controls aren't at min-height.",
mFullscreenManager.areBrowserControlsAtMinHeight());
assertFalse("ControlsResizeView is true,"
+ " but it should be false when the controls are hidden.",
mFullscreenManager.controlsResizeView());
mControlsResizeView);
// Now, scroll back to fully visible.
tabFullscreenObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ 0,
tabControlsObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ 0,
/*bottomControlsOffsetY*/ 0, /*contentOffsetY*/ 100,
/*topControlsMinHeightOffsetY*/ 0, /*bottomControlsMinHeightOffsetY*/ 0);
assertFalse("Browser controls are hidden when they should be fully visible.",
......@@ -165,7 +169,7 @@ public class FullscreenManagerUnitTest {
// #controlsResizeView should be flipped back to true.
assertTrue("ControlsResizeView is false,"
+ " but it should be true when the controls are fully visible.",
mFullscreenManager.controlsResizeView());
mControlsResizeView);
}
@Test
......@@ -179,14 +183,14 @@ public class FullscreenManagerUnitTest {
final int bottomHeight = 60;
final int bottomMinHeight = 0;
TabModelSelectorTabObserver tabFullscreenObserver =
mFullscreenManager.getTabFullscreenObserverForTesting();
TabModelSelectorTabObserver tabControlsObserver =
mFullscreenManager.getTabControlsObserverForTesting();
mFullscreenManager.setTopControlsHeight(topHeight, topMinHeight);
mFullscreenManager.setBottomControlsHeight(bottomHeight, bottomMinHeight);
// Send initial offsets.
tabFullscreenObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ 0,
tabControlsObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ 0,
/*bottomControlsOffsetY*/ 0, /*contentOffsetY*/ 100,
/*topControlsMinHeightOffsetY*/ 25, /*bottomControlsMinHeightOffsetY*/ 0);
// Initially, the controls should be fully visible.
......@@ -194,20 +198,20 @@ public class FullscreenManagerUnitTest {
BrowserControlsUtils.areBrowserControlsFullyVisible(mFullscreenManager));
assertTrue("ControlsResizeView is false,"
+ " but it should be true when the controls are fully visible.",
mFullscreenManager.controlsResizeView());
mControlsResizeView);
// Scroll all the way to the min-height.
tabFullscreenObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ -75,
tabControlsObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ -75,
/*bottomControlsOffsetY*/ 60, /*contentOffsetY*/ 25,
/*topControlsMinHeightOffsetY*/ 25, /*bottomControlsMinHeightOffsetY*/ 0);
assertTrue("Browser controls aren't at min-height.",
mFullscreenManager.areBrowserControlsAtMinHeight());
assertFalse("ControlsResizeView is true,"
+ " but it should be false when the controls are at min-height.",
mFullscreenManager.controlsResizeView());
mControlsResizeView);
// Now, scroll back to fully visible.
tabFullscreenObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ 0,
tabControlsObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ 0,
/*bottomControlsOffsetY*/ 0, /*contentOffsetY*/ 100,
/*topControlsMinHeightOffsetY*/ 25, /*bottomControlsMinHeightOffsetY*/ 0);
assertFalse("Browser controls are at min-height when they should be fully visible.",
......@@ -217,7 +221,7 @@ public class FullscreenManagerUnitTest {
// #controlsResizeView should be flipped back to true.
assertTrue("ControlsResizeView is false,"
+ " but it should be true when the controls are fully visible.",
mFullscreenManager.controlsResizeView());
mControlsResizeView);
}
@Test
......@@ -231,41 +235,41 @@ public class FullscreenManagerUnitTest {
final int bottomHeight = 60;
final int bottomMinHeight = 0;
TabModelSelectorTabObserver tabFullscreenObserver =
mFullscreenManager.getTabFullscreenObserverForTesting();
TabModelSelectorTabObserver tabControlsObserver =
mFullscreenManager.getTabControlsObserverForTesting();
mFullscreenManager.setTopControlsHeight(topHeight, topMinHeight);
mFullscreenManager.setBottomControlsHeight(bottomHeight, bottomMinHeight);
// Send initial offsets.
tabFullscreenObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ 0,
tabControlsObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ 0,
/*bottomControlsOffsetY*/ 0, /*contentOffsetY*/ 100,
/*topControlsMinHeightOffsetY*/ 25, /*bottomControlsMinHeightOffsetY*/ 0);
assertTrue("ControlsResizeView is false,"
+ " but it should be true when the controls are fully visible.",
mFullscreenManager.controlsResizeView());
mControlsResizeView);
// Scroll a little hide the controls partially.
tabFullscreenObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ -25,
tabControlsObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ -25,
/*bottomControlsOffsetY*/ 20, /*contentOffsetY*/ 75,
/*topControlsMinHeightOffsetY*/ 25, /*bottomControlsMinHeightOffsetY*/ 0);
assertTrue("ControlsResizeView is false, but it should still be true.",
mFullscreenManager.controlsResizeView());
assertTrue(
"ControlsResizeView is false, but it should still be true.", mControlsResizeView);
// Scroll controls all the way to the min-height.
tabFullscreenObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ -75,
tabControlsObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ -75,
/*bottomControlsOffsetY*/ 60, /*contentOffsetY*/ 25,
/*topControlsMinHeightOffsetY*/ 25, /*bottomControlsMinHeightOffsetY*/ 0);
assertFalse("ControlsResizeView is true,"
+ " but it should've flipped to false since the controls are idle now.",
mFullscreenManager.controlsResizeView());
mControlsResizeView);
// Scroll controls to show a little more.
tabFullscreenObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ -50,
tabControlsObserver.onBrowserControlsOffsetChanged(mTab, /*topControlsOffsetY*/ -50,
/*bottomControlsOffsetY*/ 40, /*contentOffsetY*/ 50,
/*topControlsMinHeightOffsetY*/ 25, /*bottomControlsMinHeightOffsetY*/ 0);
assertFalse("ControlsResizeView is true, but it should still be false.",
mFullscreenManager.controlsResizeView());
assertFalse(
"ControlsResizeView is true, but it should still be false.", mControlsResizeView);
}
// --- controlsResizeView tests
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment