| // Copyright 2019 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| package org.chromium.chrome.browser; |
| |
| import org.chromium.base.supplier.Supplier; |
| import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator; |
| import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator; |
| import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator; |
| import org.chromium.chrome.browser.externalauth.ExternalAuthUtils; |
| import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl; |
| import org.chromium.chrome.browser.native_page.NativePageFactory; |
| import org.chromium.chrome.browser.share.ShareDelegate; |
| import org.chromium.chrome.browser.tab.Tab; |
| import org.chromium.chrome.browser.tab.TabContextMenuItemDelegate; |
| import org.chromium.chrome.browser.tab.TabDelegateFactory; |
| import org.chromium.chrome.browser.tab.TabStateBrowserControlsVisibilityDelegate; |
| import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid; |
| import org.chromium.chrome.browser.tab_activity_glue.ActivityTabWebContentsDelegateAndroid; |
| import org.chromium.chrome.browser.ui.native_page.NativePage; |
| import org.chromium.components.browser_ui.util.BrowserControlsVisibilityDelegate; |
| import org.chromium.components.browser_ui.util.ComposedBrowserControlsVisibilityDelegate; |
| import org.chromium.components.external_intents.ExternalNavigationHandler; |
| |
| /** |
| * {@link TabDelegateFactory} class to be used in all {@link Tab} instances owned by a |
| * {@link ChromeTabbedActivity}. |
| */ |
| public class TabbedModeTabDelegateFactory implements TabDelegateFactory { |
| private final ChromeActivity mActivity; |
| private final BrowserControlsVisibilityDelegate mAppBrowserControlsVisibilityDelegate; |
| private final Supplier<ShareDelegate> mShareDelegateSupplier; |
| private final Supplier<EphemeralTabCoordinator> mEphemeralTabCoordinatorSupplier; |
| private NativePageFactory mNativePageFactory; |
| |
| public TabbedModeTabDelegateFactory(ChromeActivity activity, |
| BrowserControlsVisibilityDelegate appBrowserControlsVisibilityDelegate, |
| Supplier<ShareDelegate> shareDelegateSupplier, |
| Supplier<EphemeralTabCoordinator> ephemeralTabCoordinatorSupplier) { |
| mActivity = activity; |
| mAppBrowserControlsVisibilityDelegate = appBrowserControlsVisibilityDelegate; |
| mShareDelegateSupplier = shareDelegateSupplier; |
| mEphemeralTabCoordinatorSupplier = ephemeralTabCoordinatorSupplier; |
| } |
| |
| @Override |
| public TabWebContentsDelegateAndroid createWebContentsDelegate(Tab tab) { |
| return new ActivityTabWebContentsDelegateAndroid(tab, mActivity); |
| } |
| |
| @Override |
| public ExternalNavigationHandler createExternalNavigationHandler(Tab tab) { |
| return new ExternalNavigationHandler(new ExternalNavigationDelegateImpl(tab)); |
| } |
| |
| @Override |
| public ContextMenuPopulator createContextMenuPopulator(Tab tab) { |
| return new ChromeContextMenuPopulator( |
| new TabContextMenuItemDelegate( |
| tab, mActivity.getTabModelSelector(), mEphemeralTabCoordinatorSupplier), |
| mShareDelegateSupplier, ChromeContextMenuPopulator.ContextMenuMode.NORMAL, |
| ExternalAuthUtils.getInstance()); |
| } |
| |
| @Override |
| public BrowserControlsVisibilityDelegate createBrowserControlsVisibilityDelegate(Tab tab) { |
| return new ComposedBrowserControlsVisibilityDelegate( |
| new TabStateBrowserControlsVisibilityDelegate(tab), |
| mAppBrowserControlsVisibilityDelegate); |
| } |
| |
| @Override |
| public NativePage createNativePage(String url, NativePage candidatePage, Tab tab) { |
| if (mNativePageFactory == null) mNativePageFactory = new NativePageFactory(mActivity); |
| return mNativePageFactory.createNativePage(url, candidatePage, tab); |
| } |
| } |