Skip to content

Commit

Permalink
[Android][IncognitoReauth] Pass IncognitoReauthControllerSupplier to
Browse files Browse the repository at this point in the history
TabSwitcher component.

This CL pass the IncognitoReauthControllerSupplier to
TabSwitcherMediator in order to facilitate clearing of Incognito tab
list when re-auth is pending.

This CL only passes the supplier, the logic of clearing tab list will
follow in next CL.

Bug: 1227656
Change-Id: I3181995276e24315587866d48793309deed78a02
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3925982
Reviewed-by: David Trainor <dtrainor@chromium.org>
Reviewed-by: Xi Han <hanxi@chromium.org>
Commit-Queue: Rohit Agarwal <roagarwal@chromium.org>
Reviewed-by: Mei Liang <meiliang@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1054828}
  • Loading branch information
Rohit Agarwal authored and Chromium LUCI CQ committed Oct 4, 2022
1 parent 87d7875 commit 75ec70b
Show file tree
Hide file tree
Showing 10 changed files with 99 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.chromium.chrome.browser.flags.CachedFeatureFlags;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
import org.chromium.chrome.browser.incognito.reauth.IncognitoReauthController;
import org.chromium.chrome.browser.init.ChromeActivityNativeDelegate;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher;
Expand Down Expand Up @@ -104,6 +105,7 @@ public class StartSurfaceCoordinator implements StartSurface {
private final OneshotSupplierImpl<TabSwitcherCustomViewManager>
mTabSwitcherCustomViewManagerSupplier;
private final CrowButtonDelegate mCrowButtonDelegate;
private final OneshotSupplier<IncognitoReauthController> mIncognitoReauthControllerSupplier;

@VisibleForTesting
static final String START_SHOWN_AT_STARTUP_UMA = "Startup.Android.StartSurfaceShownAtStartup";
Expand Down Expand Up @@ -224,6 +226,8 @@ public int getTopPositionRelativeToContainerView(View childView) {
* @param toolbarSupplier Supplies the {@link Toolbar}.
* @param crowButtonDelegate The {@link CrowButtonDelegate} to handle Crow click events.
* @param backPressManager {@link BackPressManager} to handle back press.
* @param incognitoReauthControllerSupplier {@link OneshotSupplier<IncognitoReauthController>}
* to detect pending re-auth when tab switcher is shown.
*/
public StartSurfaceCoordinator(@NonNull Activity activity,
@NonNull ScrimCoordinator scrimCoordinator,
Expand All @@ -245,7 +249,8 @@ public StartSurfaceCoordinator(@NonNull Activity activity,
@NonNull MenuOrKeyboardActionController menuOrKeyboardActionController,
@NonNull MultiWindowModeStateDispatcher multiWindowModeStateDispatcher,
@NonNull JankTracker jankTracker, @NonNull Supplier<Toolbar> toolbarSupplier,
@NonNull CrowButtonDelegate crowButtonDelegate, BackPressManager backPressManager) {
@NonNull CrowButtonDelegate crowButtonDelegate, BackPressManager backPressManager,
@NonNull OneshotSupplier<IncognitoReauthController> incognitoReauthControllerSupplier) {
mConstructedTimeNs = SystemClock.elapsedRealtimeNanos();
mActivity = activity;
mScrimCoordinator = scrimCoordinator;
Expand All @@ -269,6 +274,7 @@ public StartSurfaceCoordinator(@NonNull Activity activity,
mMultiWindowModeStateDispatcher = multiWindowModeStateDispatcher;
mToolbarSupplier = toolbarSupplier;
mCrowButtonDelegate = crowButtonDelegate;
mIncognitoReauthControllerSupplier = incognitoReauthControllerSupplier;

mTabSwitcherCustomViewManagerSupplier = new OneshotSupplierImpl<>();
boolean excludeQueryTiles = !mIsStartSurfaceEnabled
Expand All @@ -280,7 +286,7 @@ public StartSurfaceCoordinator(@NonNull Activity activity,
browserControlsManager, tabCreatorManager, menuOrKeyboardActionController,
containerView, shareDelegateSupplier, multiWindowModeStateDispatcher,
scrimCoordinator, /* rootView= */ containerView, dynamicResourceLoaderSupplier,
snackbarManager, modalDialogManager);
snackbarManager, modalDialogManager, incognitoReauthControllerSupplier);
mTabSwitcherCustomViewManagerSupplier.set(
mTabSwitcher.getTabSwitcherCustomViewManager());
} else {
Expand Down Expand Up @@ -621,6 +627,8 @@ public OneshotSupplier<TabSwitcherCustomViewManager> getTabSwitcherCustomViewMan
* @param shareDelegateSupplier Supplies the current {@link ShareDelegate}.
* @param multiWindowModeStateDispatcher Gives access to the multi window mode state.
* @param rootView The root view of the app.
* @param incognitoReauthControllerSupplier {@link OneshotSupplier<IncognitoReauthController>}
* to detect pending re-auth when tab switcher is shown.
* @return The {@link TasksSurface}.
*/
TasksSurface createTasksSurface(@NonNull Activity activity,
Expand All @@ -637,13 +645,16 @@ TasksSurface createTasksSurface(@NonNull Activity activity,
@NonNull MenuOrKeyboardActionController menuOrKeyboardActionController,
@NonNull Supplier<ShareDelegate> shareDelegateSupplier,
@NonNull MultiWindowModeStateDispatcher multiWindowModeStateDispatcher,
@NonNull ViewGroup rootView) {
@NonNull ViewGroup rootView,
@Nullable OneshotSupplier<IncognitoReauthController>
incognitoReauthControllerSupplier) {
return new TasksSurfaceCoordinator(activity, scrimCoordinator, propertyModel,
tabSwitcherType, parentTabSupplier, hasMVTiles, hasQueryTiles, windowAndroid,
activityLifecycleDispatcher, tabModelSelector, snackbarManager,
dynamicResourceLoaderSupplier, tabContentManager, modalDialogManager,
browserControlsStateProvider, tabCreatorManager, menuOrKeyboardActionController,
shareDelegateSupplier, multiWindowModeStateDispatcher, rootView);
shareDelegateSupplier, multiWindowModeStateDispatcher, rootView,
incognitoReauthControllerSupplier);
}

@VisibleForTesting
Expand Down Expand Up @@ -691,7 +702,7 @@ private void createAndSetStartSurface(boolean excludeQueryTiles) {
mActivityLifecycleDispatcher, mTabModelSelector, mSnackbarManager,
mDynamicResourceLoaderSupplier, mTabContentManager, mModalDialogManager,
mBrowserControlsManager, mTabCreatorManager, mMenuOrKeyboardActionController,
mShareDelegateSupplier, mMultiWindowModeStateDispatcher, mContainerView);
mShareDelegateSupplier, mMultiWindowModeStateDispatcher, mContainerView, null);
mTasksSurface.getView().setId(R.id.primary_tasks_surface_view);
initializeOffsetChangedListener();
addHeaderOffsetChangeListener(mOffsetChangedListenerToGenerateScrollEvents);
Expand All @@ -715,7 +726,8 @@ private TabSwitcher.Controller initializeSecondaryTasksSurface() {
mActivityLifecycleDispatcher, mTabModelSelector, mSnackbarManager,
mDynamicResourceLoaderSupplier, mTabContentManager, mModalDialogManager,
mBrowserControlsManager, mTabCreatorManager, mMenuOrKeyboardActionController,
mShareDelegateSupplier, mMultiWindowModeStateDispatcher, mContainerView);
mShareDelegateSupplier, mMultiWindowModeStateDispatcher, mContainerView,
mIncognitoReauthControllerSupplier);
if (mIsInitializedWithNative) {
mSecondaryTasksSurface.onFinishNativeInitialization(
mActivity, mOmniboxStubSupplier.get(), /*feedReliabilityLogger=*/null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import androidx.annotation.NonNull;

import org.chromium.base.jank_tracker.JankTracker;
import org.chromium.base.supplier.OneshotSupplier;
import org.chromium.base.supplier.OneshotSupplierImpl;
import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.back_press.BackPressManager;
Expand All @@ -19,6 +20,7 @@
import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
import org.chromium.chrome.browser.incognito.reauth.IncognitoReauthController;
import org.chromium.chrome.browser.init.ChromeActivityNativeDelegate;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher;
Expand Down Expand Up @@ -102,6 +104,8 @@ public static Layout createTabSwitcherAndStartSurfaceLayout(Context context,
* @param toolbarSupplier Supplies the {@link Toolbar}.
* @param crowButtonDelegate The {@link CrowButtonDelegate} to handle Crow click events.
* @param backPressManager {@link BackPressManager} to handle back press gesture.
* @param incognitoReauthControllerSupplier {@link OneshotSupplier<IncognitoReauthController>}
* to detect pending re-auth when tab switcher is shown.
* @return the {@link StartSurface}
*/
public static StartSurface createStartSurface(@NonNull Activity activity,
Expand All @@ -124,14 +128,15 @@ public static StartSurface createStartSurface(@NonNull Activity activity,
@NonNull MenuOrKeyboardActionController menuOrKeyboardActionController,
@NonNull MultiWindowModeStateDispatcher multiWindowModeStateDispatcher,
@NonNull JankTracker jankTracker, @NonNull Supplier<Toolbar> toolbarSupplier,
@NonNull CrowButtonDelegate crowButtonDelegate, BackPressManager backPressManager) {
@NonNull CrowButtonDelegate crowButtonDelegate, BackPressManager backPressManager,
@NonNull OneshotSupplier<IncognitoReauthController> incognitoReauthControllerSupplier) {
return new StartSurfaceCoordinator(activity, scrimCoordinator, sheetController,
startSurfaceOneshotSupplier, parentTabSupplier, hadWarmStart, windowAndroid,
containerView, dynamicResourceLoaderSupplier, tabModelSelector,
browserControlsManager, snackbarManager, shareDelegateSupplier, omniboxStubSupplier,
tabContentManager, modalDialogManager, chromeActivityNativeDelegate,
activityLifecycleDispatcher, tabCreatorManager, menuOrKeyboardActionController,
multiWindowModeStateDispatcher, jankTracker, toolbarSupplier, crowButtonDelegate,
backPressManager);
backPressManager, incognitoReauthControllerSupplier);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.feed.FeedReliabilityLogger;
import org.chromium.chrome.browser.feedback.HelpAndFeedbackLauncherImpl;
import org.chromium.chrome.browser.incognito.reauth.IncognitoReauthController;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher;
import org.chromium.chrome.browser.ntp.IncognitoCookieControlsManager;
Expand Down Expand Up @@ -100,7 +101,9 @@ public TasksSurfaceCoordinator(@NonNull Activity activity,
@NonNull MenuOrKeyboardActionController menuOrKeyboardActionController,
@NonNull Supplier<ShareDelegate> shareDelegateSupplier,
@NonNull MultiWindowModeStateDispatcher multiWindowModeStateDispatcher,
@NonNull ViewGroup rootView) {
@NonNull ViewGroup rootView,
@Nullable OneshotSupplier<IncognitoReauthController>
incognitoReauthControllerSupplier) {
mActivity = activity;
mView = (TasksView) LayoutInflater.from(activity).inflate(R.layout.tasks_view_layout, null);
mView.initialize(activityLifecycleDispatcher,
Expand All @@ -123,12 +126,15 @@ public TasksSurfaceCoordinator(@NonNull Activity activity,
multiWindowModeStateDispatcher, scrimCoordinator, rootView,
dynamicResourceLoaderSupplier, snackbarManager, modalDialogManager);
} else if (tabSwitcherType == TabSwitcherType.GRID) {
assert incognitoReauthControllerSupplier
!= null : "Valid Incognito re-auth controller supplier needed to create GTS.";
mTabSwitcher = TabManagementModuleProvider.getDelegate().createGridTabSwitcher(activity,
activityLifecycleDispatcher, tabModelSelector, tabContentManager,
browserControlsStateProvider, tabCreatorManager, menuOrKeyboardActionController,
mView.getBodyViewContainer(), shareDelegateSupplier,
multiWindowModeStateDispatcher, scrimCoordinator, rootView,
dynamicResourceLoaderSupplier, snackbarManager, modalDialogManager);
dynamicResourceLoaderSupplier, snackbarManager, modalDialogManager,
incognitoReauthControllerSupplier);
} else if (tabSwitcherType == TabSwitcherType.SINGLE) {
mTabSwitcher = new SingleTabSwitcherCoordinator(
activity, mView.getCarouselTabSwitcherContainer(), tabModelSelector);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.fullscreen.BrowserControlsManager;
import org.chromium.chrome.browser.homepage.HomepageManager;
import org.chromium.chrome.browser.incognito.reauth.IncognitoReauthController;
import org.chromium.chrome.browser.init.ActivityLifecycleDispatcherImpl;
import org.chromium.chrome.browser.init.ChromeActivityNativeDelegate;
import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcherImpl;
Expand Down Expand Up @@ -115,6 +116,9 @@ public class StartSurfaceCoordinatorUnitTestRule implements TestRule {
private Activity mActivity;
private StartSurfaceCoordinator mCoordinator;

private final OneshotSupplierImpl<IncognitoReauthController>
mIncognitoReauthControllerSupplier = new OneshotSupplierImpl<>();

private static class MockTabModelFilterProvider extends TabModelFilterProvider {
public MockTabModelFilterProvider(Activity activity) {
List<TabModel> tabModels = new ArrayList<>();
Expand Down Expand Up @@ -268,6 +272,7 @@ protected void rawTopContentOffsetChangedForVr() {
OmniboxStub omniboxStub = Mockito.mock(OmniboxStub.class);
when(omniboxStub.getVoiceRecognitionHandler()).thenReturn(voiceRecognitionHandler);
when(voiceRecognitionHandler.isVoiceSearchEnabled()).thenReturn(true);
mIncognitoReauthControllerSupplier.set(Mockito.mock(IncognitoReauthController.class));

mCoordinator = new StartSurfaceCoordinator(mActivity, scrimCoordinator,
Mockito.mock(BottomSheetController.class), new OneshotSupplierImpl<>(),
Expand All @@ -282,7 +287,7 @@ tabContentManager, new FakeModalDialogManager(ModalDialogType.APP),
Mockito.mock(MenuOrKeyboardActionController.class),
new MultiWindowModeStateDispatcherImpl(mActivity), new DummyJankTracker(),
new ObservableSupplierImpl<>(), new CrowButtonDelegateImpl(),
new BackPressManager());
new BackPressManager(), mIncognitoReauthControllerSupplier);

Assert.assertFalse(LibraryLoader.getInstance().isLoaded());
when(mLibraryLoader.isInitialized()).thenReturn(true);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import org.chromium.chrome.browser.compositor.layouts.LayoutRenderHost;
import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.incognito.reauth.IncognitoReauthController;
import org.chromium.chrome.browser.layouts.LayoutStateProvider;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher;
Expand Down Expand Up @@ -90,6 +91,8 @@ Layout createTabSwitcherLayout(Context context, LayoutUpdateHost updateHost,
* @param dynamicResourceLoaderSupplier Supplies the current {@link DynamicResourceLoader}.
* @param snackbarManager Manages the snackbar.
* @param modalDialogManager Manages modal dialogs.
* @param incognitoReauthControllerSupplier {@link OneshotSupplier<IncognitoReauthController>}
* to detect pending re-auth when tab switcher is shown.
* @return The {@link TabSwitcher}.
*/
TabSwitcher createGridTabSwitcher(@NonNull Activity activity,
Expand All @@ -105,7 +108,8 @@ TabSwitcher createGridTabSwitcher(@NonNull Activity activity,
@NonNull ScrimCoordinator scrimCoordinator, @NonNull ViewGroup rootView,
@NonNull Supplier<DynamicResourceLoader> dynamicResourceLoaderSupplier,
@NonNull SnackbarManager snackbarManager,
@NonNull ModalDialogManager modalDialogManager);
@NonNull ModalDialogManager modalDialogManager,
@NonNull OneshotSupplier<IncognitoReauthController> incognitoReauthControllerSupplier);

/**
* Create the {@link TabSwitcher} to display Tabs in carousel.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import org.chromium.chrome.browser.compositor.layouts.LayoutUpdateHost;
import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.incognito.reauth.IncognitoReauthController;
import org.chromium.chrome.browser.layouts.LayoutStateProvider;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.metrics.UmaSessionStats;
Expand Down Expand Up @@ -68,7 +69,8 @@ public TabSwitcher createGridTabSwitcher(@NonNull Activity activity,
@NonNull ScrimCoordinator scrimCoordinator, @NonNull ViewGroup rootView,
@NonNull Supplier<DynamicResourceLoader> dynamicResourceLoaderSupplier,
@NonNull SnackbarManager snackbarManager,
@NonNull ModalDialogManager modalDialogManager) {
@NonNull ModalDialogManager modalDialogManager,
@NonNull OneshotSupplier<IncognitoReauthController> incognitoReauthControllerSupplier) {
if (UmaSessionStats.isMetricsServiceAvailable()) {
UmaSessionStats.registerSyntheticFieldTrial(
ChromeFeatureList.TAB_GRID_LAYOUT_ANDROID + SYNTHETIC_TRIAL_POSTFIX,
Expand All @@ -83,7 +85,8 @@ public TabSwitcher createGridTabSwitcher(@NonNull Activity activity,
&& SysUtils.isLowEndDevice()
? TabListCoordinator.TabListMode.LIST
: TabListCoordinator.TabListMode.GRID,
rootView, dynamicResourceLoaderSupplier, snackbarManager, modalDialogManager);
rootView, dynamicResourceLoaderSupplier, snackbarManager, modalDialogManager,
incognitoReauthControllerSupplier);
}

@Override
Expand All @@ -106,7 +109,7 @@ public TabSwitcher createCarouselTabSwitcher(@NonNull Activity activity,
menuOrKeyboardActionController, containerView, shareDelegateSupplier,
multiWindowModeStateDispatcher, scrimCoordinator,
TabListCoordinator.TabListMode.CAROUSEL, rootView, dynamicResourceLoaderSupplier,
snackbarManager, modalDialogManager);
snackbarManager, modalDialogManager, null);
}

@Override
Expand Down
Loading

0 comments on commit 75ec70b

Please sign in to comment.