Commit d9a7d364 authored by Peter Kotwicz's avatar Peter Kotwicz Committed by Commit Bot

[WebAPK] Enable adding site to homescreen when WebAPK is out of scope

This CL:
- Modifies CustomTabAppMenuPropertiesDelegateto enable adding site
to homescreen when WebAPK is out of scope
- Introduces EmptyVerifier and uses it for custom tabs
- Deletes ExternalIntentsPolicyProviderin favour of accessing
verifier directly
- Moves trustedwebactivityui.controller.Verifier ot
ui.controller.Verifier

BUG=1083256

Change-Id: Ic0c1c98ccb3ccef2b71019b3da544c34488477b2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2205519
Commit-Queue: Peter Kotwicz <pkotwicz@chromium.org>
Reviewed-by: default avatarPeter Conn <peconn@chromium.org>
Reviewed-by: default avatarGlenn Hartmann <hartmanng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#772468}
parent 1997565a
...@@ -190,7 +190,6 @@ chrome_java_sources = [ ...@@ -190,7 +190,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityOpenTimeRecorder.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TrustedWebActivityOpenTimeRecorder.java",
"java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TwaRegistrar.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TwaRegistrar.java",
"java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TwaVerifier.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/TwaVerifier.java",
"java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/controller/Verifier.java",
"java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/sharing/TwaSharingController.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/sharing/TwaSharingController.java",
"java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/splashscreen/SplashImageHolder.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/splashscreen/SplashImageHolder.java",
"java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/splashscreen/TwaSplashController.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/splashscreen/TwaSplashController.java",
...@@ -198,6 +197,8 @@ chrome_java_sources = [ ...@@ -198,6 +197,8 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/view/DisclosureNotification.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/view/DisclosureNotification.java",
"java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/view/DisclosureSnackbar.java", "java/src/org/chromium/chrome/browser/browserservices/trustedwebactivityui/view/DisclosureSnackbar.java",
"java/src/org/chromium/chrome/browser/browserservices/ui/SharedActivityCoordinator.java", "java/src/org/chromium/chrome/browser/browserservices/ui/SharedActivityCoordinator.java",
"java/src/org/chromium/chrome/browser/browserservices/ui/controller/EmptyVerifier.java",
"java/src/org/chromium/chrome/browser/browserservices/ui/controller/Verifier.java",
"java/src/org/chromium/chrome/browser/browserservices/ui/splashscreen/webapps/WebappSplashController.java", "java/src/org/chromium/chrome/browser/browserservices/ui/splashscreen/webapps/WebappSplashController.java",
"java/src/org/chromium/chrome/browser/browserservices/ui/trustedwebactivity/TrustedWebActivityCoordinator.java", "java/src/org/chromium/chrome/browser/browserservices/ui/trustedwebactivity/TrustedWebActivityCoordinator.java",
"java/src/org/chromium/chrome/browser/browsing_data/BrowsingDataBridge.java", "java/src/org/chromium/chrome/browser/browsing_data/BrowsingDataBridge.java",
...@@ -435,7 +436,6 @@ chrome_java_sources = [ ...@@ -435,7 +436,6 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/customtabs/CustomTabsClientFileProcessor.java", "java/src/org/chromium/chrome/browser/customtabs/CustomTabsClientFileProcessor.java",
"java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java", "java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java",
"java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnectionService.java", "java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnectionService.java",
"java/src/org/chromium/chrome/browser/customtabs/ExternalIntentsPolicyProvider.java",
"java/src/org/chromium/chrome/browser/customtabs/FirstMeaningfulPaintObserver.java", "java/src/org/chromium/chrome/browser/customtabs/FirstMeaningfulPaintObserver.java",
"java/src/org/chromium/chrome/browser/customtabs/HiddenTabHolder.java", "java/src/org/chromium/chrome/browser/customtabs/HiddenTabHolder.java",
"java/src/org/chromium/chrome/browser/customtabs/NavigationInfoCaptureTrigger.java", "java/src/org/chromium/chrome/browser/customtabs/NavigationInfoCaptureTrigger.java",
......
...@@ -12,6 +12,7 @@ import org.chromium.base.ObserverList; ...@@ -12,6 +12,7 @@ import org.chromium.base.ObserverList;
import org.chromium.base.Promise; import org.chromium.base.Promise;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider; import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.TrustedWebActivityModel; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.TrustedWebActivityModel;
import org.chromium.chrome.browser.browserservices.ui.controller.Verifier;
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
import org.chromium.chrome.browser.customtabs.content.TabObserverRegistrar; import org.chromium.chrome.browser.customtabs.content.TabObserverRegistrar;
import org.chromium.chrome.browser.customtabs.content.TabObserverRegistrar.CustomTabTabObserver; import org.chromium.chrome.browser.customtabs.content.TabObserverRegistrar.CustomTabTabObserver;
......
...@@ -10,6 +10,7 @@ import androidx.browser.customtabs.CustomTabsService; ...@@ -10,6 +10,7 @@ import androidx.browser.customtabs.CustomTabsService;
import org.chromium.base.Promise; import org.chromium.base.Promise;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider; import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.browserservices.OriginVerifier; import org.chromium.chrome.browser.browserservices.OriginVerifier;
import org.chromium.chrome.browser.browserservices.ui.controller.Verifier;
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher; import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
......
...@@ -17,7 +17,7 @@ import org.chromium.base.Promise; ...@@ -17,7 +17,7 @@ import org.chromium.base.Promise;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider; import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.browserservices.TrustedWebActivityUmaRecorder; import org.chromium.chrome.browser.browserservices.TrustedWebActivityUmaRecorder;
import org.chromium.chrome.browser.browserservices.TrustedWebActivityUmaRecorder.ShareRequestMethod; import org.chromium.chrome.browser.browserservices.TrustedWebActivityUmaRecorder.ShareRequestMethod;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.Verifier; import org.chromium.chrome.browser.browserservices.ui.controller.Verifier;
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController;
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvider;
import org.chromium.chrome.browser.dependency_injection.ActivityScope; import org.chromium.chrome.browser.dependency_injection.ActivityScope;
......
...@@ -14,9 +14,8 @@ import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProv ...@@ -14,9 +14,8 @@ import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProv
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.CurrentPageVerifier; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.CurrentPageVerifier;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.CurrentPageVerifier.VerificationStatus; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.CurrentPageVerifier.VerificationStatus;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityBrowserControlsVisibilityManager; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TrustedWebActivityBrowserControlsVisibilityManager;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.Verifier; import org.chromium.chrome.browser.browserservices.ui.controller.Verifier;
import org.chromium.chrome.browser.customtabs.CustomTabStatusBarColorProvider; import org.chromium.chrome.browser.customtabs.CustomTabStatusBarColorProvider;
import org.chromium.chrome.browser.customtabs.ExternalIntentsPolicyProvider;
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController;
import org.chromium.chrome.browser.customtabs.features.ImmersiveModeController; import org.chromium.chrome.browser.customtabs.features.ImmersiveModeController;
import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarColorController; import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarColorController;
...@@ -50,7 +49,6 @@ public class SharedActivityCoordinator implements InflationObserver { ...@@ -50,7 +49,6 @@ public class SharedActivityCoordinator implements InflationObserver {
@Inject @Inject
public SharedActivityCoordinator(CurrentPageVerifier currentPageVerifier, Verifier verifier, public SharedActivityCoordinator(CurrentPageVerifier currentPageVerifier, Verifier verifier,
CustomTabActivityNavigationController navigationController, CustomTabActivityNavigationController navigationController,
ExternalIntentsPolicyProvider externalIntentsPolicyProvider,
BrowserServicesIntentDataProvider intentDataProvider, BrowserServicesIntentDataProvider intentDataProvider,
CustomTabToolbarColorController toolbarColorController, CustomTabToolbarColorController toolbarColorController,
CustomTabStatusBarColorProvider statusBarColorProvider, CustomTabStatusBarColorProvider statusBarColorProvider,
...@@ -66,8 +64,6 @@ public class SharedActivityCoordinator implements InflationObserver { ...@@ -66,8 +64,6 @@ public class SharedActivityCoordinator implements InflationObserver {
mImmersiveDisplayMode = computeImmersiveMode(intentDataProvider); mImmersiveDisplayMode = computeImmersiveMode(intentDataProvider);
navigationController.setLandingPageOnCloseCriterion(verifier::wasPreviouslyVerified); navigationController.setLandingPageOnCloseCriterion(verifier::wasPreviouslyVerified);
externalIntentsPolicyProvider.setPolicyCriteria(
verifier::shouldIgnoreExternalIntentHandlers);
currentPageVerifier.addVerificationObserver(this::onVerificationUpdate); currentPageVerifier.addVerificationObserver(this::onVerificationUpdate);
lifecycleDispatcher.register(this); lifecycleDispatcher.register(this);
......
// 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.browserservices.ui.controller;
import androidx.annotation.Nullable;
import org.chromium.base.Promise;
import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import javax.inject.Inject;
/**
* Empty {@link Verifier} implementation.
*/
@ActivityScope
public class EmptyVerifier implements Verifier {
@Inject
public EmptyVerifier() {}
@Override
public final Promise<Boolean> verify(String url) {
return Promise.fulfilled(false);
}
@Override
public boolean wasPreviouslyVerified(String url) {
return false;
}
@Nullable
@Override
public String getVerifiedScope(String url) {
return url;
}
@Override
public boolean shouldIgnoreExternalIntentHandlers(String url) {
return false;
}
}
\ No newline at end of file
...@@ -2,12 +2,12 @@ ...@@ -2,12 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
package org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller; package org.chromium.chrome.browser.browserservices.ui.controller;
import org.chromium.base.Promise;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import org.chromium.base.Promise;
/** /**
* A Delegate for the {@link CurrentPageVerifier} that provides implementation specific to * A Delegate for the {@link CurrentPageVerifier} that provides implementation specific to
* Trusted Web Activities, WebAPKs or A2HS as appropriate. * Trusted Web Activities, WebAPKs or A2HS as appropriate.
......
...@@ -27,6 +27,7 @@ import org.chromium.chrome.browser.ChromeActivity; ...@@ -27,6 +27,7 @@ import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.KeyboardShortcuts; import org.chromium.chrome.browser.KeyboardShortcuts;
import org.chromium.chrome.browser.WarmupManager; import org.chromium.chrome.browser.WarmupManager;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider; import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.browserservices.ui.controller.Verifier;
import org.chromium.chrome.browser.browserservices.ui.trustedwebactivity.TrustedWebActivityCoordinator; import org.chromium.chrome.browser.browserservices.ui.trustedwebactivity.TrustedWebActivityCoordinator;
import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior; import org.chromium.chrome.browser.compositor.layouts.OverviewModeBehavior;
import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController; import org.chromium.chrome.browser.customtabs.content.CustomTabActivityNavigationController;
...@@ -47,6 +48,7 @@ import org.chromium.chrome.browser.tabmodel.ChromeTabCreator; ...@@ -47,6 +48,7 @@ import org.chromium.chrome.browser.tabmodel.ChromeTabCreator;
import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelSelector;
import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl; import org.chromium.chrome.browser.tabmodel.TabModelSelectorImpl;
import org.chromium.chrome.browser.ui.RootUiCoordinator; import org.chromium.chrome.browser.ui.RootUiCoordinator;
import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate;
import org.chromium.chrome.browser.usage_stats.UsageStatsService; import org.chromium.chrome.browser.usage_stats.UsageStatsService;
import org.chromium.chrome.browser.webapps.SameTaskWebApkActivity; import org.chromium.chrome.browser.webapps.SameTaskWebApkActivity;
import org.chromium.chrome.browser.webapps.WebappActivityCoordinator; import org.chromium.chrome.browser.webapps.WebappActivityCoordinator;
...@@ -76,6 +78,7 @@ public abstract class BaseCustomTabActivity<C extends BaseCustomTabActivityCompo ...@@ -76,6 +78,7 @@ public abstract class BaseCustomTabActivity<C extends BaseCustomTabActivityCompo
protected CustomTabNightModeStateController mNightModeStateController; protected CustomTabNightModeStateController mNightModeStateController;
protected @Nullable WebappActivityCoordinator mWebappActivityCoordinator; protected @Nullable WebappActivityCoordinator mWebappActivityCoordinator;
protected @Nullable TrustedWebActivityCoordinator mTwaCoordinator; protected @Nullable TrustedWebActivityCoordinator mTwaCoordinator;
protected Verifier mVerifier;
private ObservableSupplierImpl<OverviewModeBehavior> mOverviewModeBehaviorSupplier = private ObservableSupplierImpl<OverviewModeBehavior> mOverviewModeBehaviorSupplier =
new ObservableSupplierImpl<>(); new ObservableSupplierImpl<>();
...@@ -165,6 +168,7 @@ public abstract class BaseCustomTabActivity<C extends BaseCustomTabActivityCompo ...@@ -165,6 +168,7 @@ public abstract class BaseCustomTabActivity<C extends BaseCustomTabActivityCompo
mStatusBarColorProvider = component.resolveCustomTabStatusBarColorProvider(); mStatusBarColorProvider = component.resolveCustomTabStatusBarColorProvider();
mTabFactory = component.resolveTabFactory(); mTabFactory = component.resolveTabFactory();
mCustomTabIntentHandler = component.resolveIntentHandler(); mCustomTabIntentHandler = component.resolveIntentHandler();
mVerifier = component.resolveVerifier();
component.resolveCompositorContentInitializer(); component.resolveCompositorContentInitializer();
component.resolveTaskDescriptionHelper(); component.resolveTaskDescriptionHelper();
...@@ -344,6 +348,18 @@ public abstract class BaseCustomTabActivity<C extends BaseCustomTabActivityCompo ...@@ -344,6 +348,18 @@ public abstract class BaseCustomTabActivity<C extends BaseCustomTabActivityCompo
return mTabProvider.getTab(); return mTabProvider.getTab();
} }
@Override
public AppMenuPropertiesDelegate createAppMenuPropertiesDelegate() {
return new CustomTabAppMenuPropertiesDelegate(this, getActivityTabProvider(),
getMultiWindowModeStateDispatcher(), getTabModelSelector(), getToolbarManager(),
getWindow().getDecorView(), mBookmarkBridgeSupplier, mVerifier,
mIntentDataProvider.getUiType(), mIntentDataProvider.getMenuTitles(),
mIntentDataProvider.isOpenedByChrome(),
mIntentDataProvider.shouldShowShareMenuItem(),
mIntentDataProvider.shouldShowStarButton(),
mIntentDataProvider.shouldShowDownloadButton(), mIntentDataProvider.isIncognito());
}
@Override @Override
protected int getControlContainerLayoutId() { protected int getControlContainerLayoutId() {
return R.layout.custom_tabs_control_container; return R.layout.custom_tabs_control_container;
......
...@@ -51,7 +51,6 @@ import org.chromium.chrome.browser.page_info.ChromePageInfoControllerDelegate; ...@@ -51,7 +51,6 @@ import org.chromium.chrome.browser.page_info.ChromePageInfoControllerDelegate;
import org.chromium.chrome.browser.page_info.ChromePermissionParamsListBuilderDelegate; import org.chromium.chrome.browser.page_info.ChromePermissionParamsListBuilderDelegate;
import org.chromium.chrome.browser.previews.Previews; import org.chromium.chrome.browser.previews.Previews;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate;
import org.chromium.components.page_info.PageInfoController; import org.chromium.components.page_info.PageInfoController;
import org.chromium.content_public.browser.LoadUrlParams; import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
...@@ -152,18 +151,6 @@ public class CustomTabActivity extends BaseCustomTabActivity<CustomTabActivityCo ...@@ -152,18 +151,6 @@ public class CustomTabActivity extends BaseCustomTabActivity<CustomTabActivityCo
getActivityTab().loadUrl(new LoadUrlParams(searchUrl)); getActivityTab().loadUrl(new LoadUrlParams(searchUrl));
} }
@Override
public AppMenuPropertiesDelegate createAppMenuPropertiesDelegate() {
return new CustomTabAppMenuPropertiesDelegate(this, getActivityTabProvider(),
getMultiWindowModeStateDispatcher(), getTabModelSelector(), getToolbarManager(),
getWindow().getDecorView(), mBookmarkBridgeSupplier,
mIntentDataProvider.getUiType(), mIntentDataProvider.getMenuTitles(),
mIntentDataProvider.isOpenedByChrome(),
mIntentDataProvider.shouldShowShareMenuItem(),
mIntentDataProvider.shouldShowStarButton(),
mIntentDataProvider.shouldShowDownloadButton(), mIntentDataProvider.isIncognito());
}
@Override @Override
public String getPackageName() { public String getPackageName() {
if (mShouldOverridePackage) return mIntentDataProvider.getClientPackageName(); if (mShouldOverridePackage) return mIntentDataProvider.getClientPackageName();
......
...@@ -25,6 +25,7 @@ import org.chromium.chrome.browser.DefaultBrowserInfo; ...@@ -25,6 +25,7 @@ import org.chromium.chrome.browser.DefaultBrowserInfo;
import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl; import org.chromium.chrome.browser.app.appmenu.AppMenuPropertiesDelegateImpl;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge; import org.chromium.chrome.browser.bookmarks.BookmarkBridge;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider.CustomTabsUiType; import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider.CustomTabsUiType;
import org.chromium.chrome.browser.browserservices.ui.controller.Verifier;
import org.chromium.chrome.browser.firstrun.FirstRunStatus; import org.chromium.chrome.browser.firstrun.FirstRunStatus;
import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher; import org.chromium.chrome.browser.multiwindow.MultiWindowModeStateDispatcher;
import org.chromium.chrome.browser.share.ShareHelper; import org.chromium.chrome.browser.share.ShareHelper;
...@@ -46,6 +47,7 @@ import java.util.Map; ...@@ -46,6 +47,7 @@ import java.util.Map;
public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateImpl { public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegateImpl {
private static final String CUSTOM_MENU_ITEM_ID_KEY = "CustomMenuItemId"; private static final String CUSTOM_MENU_ITEM_ID_KEY = "CustomMenuItemId";
private final Verifier mVerifier;
private final @CustomTabsUiType int mUiType; private final @CustomTabsUiType int mUiType;
private final boolean mShowShare; private final boolean mShowShare;
private final boolean mShowStar; private final boolean mShowStar;
...@@ -65,11 +67,12 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat ...@@ -65,11 +67,12 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
ActivityTabProvider activityTabProvider, ActivityTabProvider activityTabProvider,
MultiWindowModeStateDispatcher multiWindowModeStateDispatcher, MultiWindowModeStateDispatcher multiWindowModeStateDispatcher,
TabModelSelector tabModelSelector, ToolbarManager toolbarManager, View decorView, TabModelSelector tabModelSelector, ToolbarManager toolbarManager, View decorView,
ObservableSupplier<BookmarkBridge> bookmarkBridgeSupplier, ObservableSupplier<BookmarkBridge> bookmarkBridgeSupplier, Verifier verifier,
@CustomTabsUiType final int uiType, List<String> menuEntries, boolean isOpenedByChrome, @CustomTabsUiType final int uiType, List<String> menuEntries, boolean isOpenedByChrome,
boolean showShare, boolean showStar, boolean showDownload, boolean isIncognito) { boolean showShare, boolean showStar, boolean showDownload, boolean isIncognito) {
super(context, activityTabProvider, multiWindowModeStateDispatcher, tabModelSelector, super(context, activityTabProvider, multiWindowModeStateDispatcher, tabModelSelector,
toolbarManager, decorView, null, bookmarkBridgeSupplier); toolbarManager, decorView, null, bookmarkBridgeSupplier);
mVerifier = verifier;
mUiType = uiType; mUiType = uiType;
mMenuEntries = menuEntries; mMenuEntries = menuEntries;
mIsOpenedByChrome = isOpenedByChrome; mIsOpenedByChrome = isOpenedByChrome;
...@@ -93,6 +96,8 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat ...@@ -93,6 +96,8 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
public void prepareMenu(Menu menu, AppMenuHandler handler) { public void prepareMenu(Menu menu, AppMenuHandler handler) {
Tab currentTab = mActivityTabProvider.get(); Tab currentTab = mActivityTabProvider.get();
if (currentTab != null) { if (currentTab != null) {
String url = currentTab.getUrlString();
MenuItem forwardMenuItem = menu.findItem(R.id.forward_menu_id); MenuItem forwardMenuItem = menu.findItem(R.id.forward_menu_id);
forwardMenuItem.setEnabled(currentTab.canGoForward()); forwardMenuItem.setEnabled(currentTab.canGoForward());
...@@ -147,7 +152,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat ...@@ -147,7 +152,9 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
menu.findItem(R.id.reader_mode_prefs_id).setVisible(true); menu.findItem(R.id.reader_mode_prefs_id).setVisible(true);
} else if (mUiType == CustomTabsUiType.MINIMAL_UI_WEBAPP) { } else if (mUiType == CustomTabsUiType.MINIMAL_UI_WEBAPP) {
requestDesktopSiteVisible = false; requestDesktopSiteVisible = false;
addToHomeScreenVisible = false; // For Webapps & WebAPKs Verifier#wasPreviouslyVerified() performs verification
// (instead of looking up cached value).
addToHomeScreenVisible = !mVerifier.wasPreviouslyVerified(url);
downloadItemVisible = false; downloadItemVisible = false;
bookmarkItemVisible = false; bookmarkItemVisible = false;
} else if (mUiType == CustomTabsUiType.OFFLINE_PAGE) { } else if (mUiType == CustomTabsUiType.OFFLINE_PAGE) {
...@@ -169,7 +176,6 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat ...@@ -169,7 +176,6 @@ public class CustomTabAppMenuPropertiesDelegate extends AppMenuPropertiesDelegat
addToHomeScreenVisible = false; addToHomeScreenVisible = false;
} }
String url = currentTab.getUrlString();
boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX) boolean isChromeScheme = url.startsWith(UrlConstants.CHROME_URL_PREFIX)
|| url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX); || url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX);
if (isChromeScheme || TextUtils.isEmpty(url)) { if (isChromeScheme || TextUtils.isEmpty(url)) {
......
...@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.ChromeActivity; ...@@ -24,6 +24,7 @@ import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.ShortcutHelper; import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider; import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.browserservices.ui.controller.Verifier;
import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator; import org.chromium.chrome.browser.compositor.bottombar.ephemeraltab.EphemeralTabCoordinator;
import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator; import org.chromium.chrome.browser.contextmenu.ChromeContextMenuPopulator;
import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator; import org.chromium.chrome.browser.contextmenu.ContextMenuPopulator;
...@@ -82,7 +83,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { ...@@ -82,7 +83,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory {
private static final String TAG = "customtabs"; private static final String TAG = "customtabs";
private final String mClientPackageName; private final String mClientPackageName;
private final ExternalAuthUtils mExternalAuthUtils; private final ExternalAuthUtils mExternalAuthUtils;
private final ExternalIntentsPolicyProvider mExternalIntentsPolicyProvider; private final Verifier mVerifier;
private final @ActivityType int mActivityType; private final @ActivityType int mActivityType;
private boolean mHasActivityStarted; private boolean mHasActivityStarted;
...@@ -90,13 +91,12 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { ...@@ -90,13 +91,12 @@ public class CustomTabDelegateFactory implements TabDelegateFactory {
/** /**
* Constructs a new instance of {@link CustomTabNavigationDelegate}. * Constructs a new instance of {@link CustomTabNavigationDelegate}.
*/ */
CustomTabNavigationDelegate(Tab tab, ExternalAuthUtils authUtils, CustomTabNavigationDelegate(Tab tab, ExternalAuthUtils authUtils, Verifier verifier,
ExternalIntentsPolicyProvider externalIntentsPolicyProvider,
@ActivityType int activityType) { @ActivityType int activityType) {
super(tab); super(tab);
mClientPackageName = TabAssociatedApp.from(tab).getAppId(); mClientPackageName = TabAssociatedApp.from(tab).getAppId();
mExternalAuthUtils = authUtils; mExternalAuthUtils = authUtils;
mExternalIntentsPolicyProvider = externalIntentsPolicyProvider; mVerifier = verifier;
mActivityType = activityType; mActivityType = activityType;
} }
...@@ -183,7 +183,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { ...@@ -183,7 +183,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory {
public boolean shouldDisableExternalIntentRequestsForUrl(String url) { public boolean shouldDisableExternalIntentRequestsForUrl(String url) {
// http://crbug.com/647569 : Do not forward URL requests to external intents for URLs // http://crbug.com/647569 : Do not forward URL requests to external intents for URLs
// within the Webapp/TWA's scope. // within the Webapp/TWA's scope.
return mExternalIntentsPolicyProvider.shouldIgnoreExternalIntentHandlers(url); return mVerifier.shouldIgnoreExternalIntentHandlers(url);
} }
} }
...@@ -339,7 +339,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { ...@@ -339,7 +339,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory {
private final ExternalAuthUtils mExternalAuthUtils; private final ExternalAuthUtils mExternalAuthUtils;
private final MultiWindowUtils mMultiWindowUtils; private final MultiWindowUtils mMultiWindowUtils;
private final PendingIntent mFocusIntent; private final PendingIntent mFocusIntent;
private ExternalIntentsPolicyProvider mExternalIntentsPolicyProvider; private final Verifier mVerifier;
private TabWebContentsDelegateAndroid mWebContentsDelegateAndroid; private TabWebContentsDelegateAndroid mWebContentsDelegateAndroid;
private ExternalNavigationDelegateImpl mNavigationDelegate; private ExternalNavigationDelegateImpl mNavigationDelegate;
...@@ -358,8 +358,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { ...@@ -358,8 +358,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory {
* @param authUtils To determine whether apps are Google signed. * @param authUtils To determine whether apps are Google signed.
* @param multiWindowUtils To use to determine which ChromeTabbedActivity to open new tabs in. * @param multiWindowUtils To use to determine which ChromeTabbedActivity to open new tabs in.
* @param focusIntent A PendingIntent to launch to focus the client. * @param focusIntent A PendingIntent to launch to focus the client.
* @param externalIntentsPolicyProvider A provider of {@link ExternalIntentPolicy} that decides * @param verifier Decides how to handle navigation to a new URL.
* how to handle navigation to a new URL.
* @param ephemeralTabCoordinatorSupplier A provider of {@link EphemeralTabCoordinator} that * @param ephemeralTabCoordinatorSupplier A provider of {@link EphemeralTabCoordinator} that
* shows preview tab. * shows preview tab.
*/ */
...@@ -368,8 +367,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { ...@@ -368,8 +367,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory {
@WebDisplayMode int displayMode, boolean shouldEnableEmbeddedMediaExperience, @WebDisplayMode int displayMode, boolean shouldEnableEmbeddedMediaExperience,
BrowserControlsVisibilityDelegate visibilityDelegate, ExternalAuthUtils authUtils, BrowserControlsVisibilityDelegate visibilityDelegate, ExternalAuthUtils authUtils,
MultiWindowUtils multiWindowUtils, @Nullable PendingIntent focusIntent, MultiWindowUtils multiWindowUtils, @Nullable PendingIntent focusIntent,
ExternalIntentsPolicyProvider externalIntentsPolicyProvider, Verifier verifier, Supplier<EphemeralTabCoordinator> ephemeralTabCoordinatorSupplier) {
Supplier<EphemeralTabCoordinator> ephemeralTabCoordinatorSupplier) {
mActivity = activity; mActivity = activity;
mShouldHideBrowserControls = shouldHideBrowserControls; mShouldHideBrowserControls = shouldHideBrowserControls;
mIsOpenedByChrome = isOpenedByChrome; mIsOpenedByChrome = isOpenedByChrome;
...@@ -381,7 +379,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { ...@@ -381,7 +379,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory {
mExternalAuthUtils = authUtils; mExternalAuthUtils = authUtils;
mMultiWindowUtils = multiWindowUtils; mMultiWindowUtils = multiWindowUtils;
mFocusIntent = focusIntent; mFocusIntent = focusIntent;
mExternalIntentsPolicyProvider = externalIntentsPolicyProvider; mVerifier = verifier;
mEphemeralTabCoordinatorSupplier = ephemeralTabCoordinatorSupplier; mEphemeralTabCoordinatorSupplier = ephemeralTabCoordinatorSupplier;
} }
...@@ -389,15 +387,14 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { ...@@ -389,15 +387,14 @@ public class CustomTabDelegateFactory implements TabDelegateFactory {
public CustomTabDelegateFactory(ChromeActivity<?> activity, public CustomTabDelegateFactory(ChromeActivity<?> activity,
BrowserServicesIntentDataProvider intentDataProvider, BrowserServicesIntentDataProvider intentDataProvider,
CustomTabBrowserControlsVisibilityDelegate visibilityDelegate, CustomTabBrowserControlsVisibilityDelegate visibilityDelegate,
ExternalAuthUtils authUtils, MultiWindowUtils multiWindowUtils, ExternalAuthUtils authUtils, MultiWindowUtils multiWindowUtils, Verifier verifier,
ExternalIntentsPolicyProvider externalIntentsPolicyProvider,
Supplier<EphemeralTabCoordinator> ephemeralTabCoordinatorSupplier) { Supplier<EphemeralTabCoordinator> ephemeralTabCoordinatorSupplier) {
this(activity, intentDataProvider.shouldEnableUrlBarHiding(), this(activity, intentDataProvider.shouldEnableUrlBarHiding(),
intentDataProvider.isOpenedByChrome(), getWebApkScopeUrl(intentDataProvider), intentDataProvider.isOpenedByChrome(), getWebApkScopeUrl(intentDataProvider),
getDisplayMode(intentDataProvider), getDisplayMode(intentDataProvider),
intentDataProvider.shouldEnableEmbeddedMediaExperience(), visibilityDelegate, intentDataProvider.shouldEnableEmbeddedMediaExperience(), visibilityDelegate,
authUtils, multiWindowUtils, intentDataProvider.getFocusIntent(), authUtils, multiWindowUtils, intentDataProvider.getFocusIntent(), verifier,
externalIntentsPolicyProvider, ephemeralTabCoordinatorSupplier); ephemeralTabCoordinatorSupplier);
} }
/** /**
...@@ -447,7 +444,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory { ...@@ -447,7 +444,7 @@ public class CustomTabDelegateFactory implements TabDelegateFactory {
mNavigationDelegate = new ExternalNavigationDelegateImpl(tab); mNavigationDelegate = new ExternalNavigationDelegateImpl(tab);
} else { } else {
mNavigationDelegate = new CustomTabNavigationDelegate( mNavigationDelegate = new CustomTabNavigationDelegate(
tab, mExternalAuthUtils, mExternalIntentsPolicyProvider, mActivityType); tab, mExternalAuthUtils, mVerifier, mActivityType);
} }
return new ExternalNavigationHandler(mNavigationDelegate); return new ExternalNavigationHandler(mNavigationDelegate);
} }
......
// 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.customtabs;
import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import javax.inject.Inject;
import androidx.annotation.Nullable;
/**
* This class is used to decide whether a navigation to a certain URL should be kept within Chrome
* (as opposed to considering Android Apps that can handle it).
*/
@ActivityScope
public class ExternalIntentsPolicyProvider {
@Nullable private PolicyCriteria mPolicyCriteria;
@Inject
ExternalIntentsPolicyProvider() {}
/**
* An interface that allows specifying whether a navigation to a given url should be kept within
* Chrome.
*/
public interface PolicyCriteria {
/** Whether a navigation to the given url should be kept within Chrome. */
boolean shouldIgnoreExternalIntentHandlers(String url);
}
public void setPolicyCriteria(PolicyCriteria criteria) {
assert mPolicyCriteria == null
: "ExternalIntentsPolicyProvider can't handle multiple policies";
mPolicyCriteria = criteria;
}
boolean shouldIgnoreExternalIntentHandlers(String url) {
return mPolicyCriteria != null && mPolicyCriteria.shouldIgnoreExternalIntentHandlers(url);
}
}
...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.customtabs.dependency_injection; ...@@ -6,6 +6,7 @@ package org.chromium.chrome.browser.customtabs.dependency_injection;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.TwaFinishHandler; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.TwaFinishHandler;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.CurrentPageVerifier; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.CurrentPageVerifier;
import org.chromium.chrome.browser.browserservices.ui.controller.Verifier;
import org.chromium.chrome.browser.customtabs.CustomTabCompositorContentInitializer; import org.chromium.chrome.browser.customtabs.CustomTabCompositorContentInitializer;
import org.chromium.chrome.browser.customtabs.CustomTabDelegateFactory; import org.chromium.chrome.browser.customtabs.CustomTabDelegateFactory;
import org.chromium.chrome.browser.customtabs.CustomTabStatusBarColorProvider; import org.chromium.chrome.browser.customtabs.CustomTabStatusBarColorProvider;
...@@ -42,6 +43,7 @@ public interface BaseCustomTabActivityComponent extends ChromeActivityComponent ...@@ -42,6 +43,7 @@ public interface BaseCustomTabActivityComponent extends ChromeActivityComponent
TwaFinishHandler resolveTwaFinishHandler(); TwaFinishHandler resolveTwaFinishHandler();
WebappActivityCoordinator resolveWebappActivityCoordinator(); WebappActivityCoordinator resolveWebappActivityCoordinator();
WebApkActivityCoordinator resolveWebApkActivityCoordinator(); WebApkActivityCoordinator resolveWebApkActivityCoordinator();
Verifier resolveVerifier();
// For testing // For testing
SplashController resolveSplashController(); SplashController resolveSplashController();
......
...@@ -7,7 +7,8 @@ package org.chromium.chrome.browser.customtabs.dependency_injection; ...@@ -7,7 +7,8 @@ package org.chromium.chrome.browser.customtabs.dependency_injection;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider; import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.TwaIntentHandlingStrategy; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.TwaIntentHandlingStrategy;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TwaVerifier; import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.TwaVerifier;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.Verifier; import org.chromium.chrome.browser.browserservices.ui.controller.EmptyVerifier;
import org.chromium.chrome.browser.browserservices.ui.controller.Verifier;
import org.chromium.chrome.browser.customtabs.CustomTabNightModeStateController; import org.chromium.chrome.browser.customtabs.CustomTabNightModeStateController;
import org.chromium.chrome.browser.customtabs.content.CustomTabIntentHandler.IntentIgnoringCriterion; import org.chromium.chrome.browser.customtabs.content.CustomTabIntentHandler.IntentIgnoringCriterion;
import org.chromium.chrome.browser.customtabs.content.CustomTabIntentHandlingStrategy; import org.chromium.chrome.browser.customtabs.content.CustomTabIntentHandlingStrategy;
...@@ -67,14 +68,18 @@ public class BaseCustomTabActivityModule { ...@@ -67,14 +68,18 @@ public class BaseCustomTabActivityModule {
@Provides @Provides
public Verifier provideVerifier(Lazy<WebApkVerifier> webApkVerifier, public Verifier provideVerifier(Lazy<WebApkVerifier> webApkVerifier,
Lazy<AddToHomescreenVerifier> addToHomescreenVerifier, Lazy<TwaVerifier> twaVerifier) { Lazy<AddToHomescreenVerifier> addToHomescreenVerifier, Lazy<TwaVerifier> twaVerifier,
if (mActivityType == ActivityType.WEB_APK) { Lazy<EmptyVerifier> emptyVerifier) {
return webApkVerifier.get(); switch (mActivityType) {
case ActivityType.WEB_APK:
return webApkVerifier.get();
case ActivityType.WEBAPP:
return addToHomescreenVerifier.get();
case ActivityType.TRUSTED_WEB_ACTIVITY:
return twaVerifier.get();
default:
return emptyVerifier.get();
} }
if (mActivityType == ActivityType.WEBAPP) {
return addToHomescreenVerifier.get();
}
return twaVerifier.get();
} }
@Provides @Provides
......
...@@ -16,19 +16,14 @@ import org.chromium.base.metrics.RecordUserAction; ...@@ -16,19 +16,14 @@ import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeApplication; import org.chromium.chrome.browser.ChromeApplication;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider; import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider.CustomTabsUiType;
import org.chromium.chrome.browser.customtabs.BaseCustomTabActivity; import org.chromium.chrome.browser.customtabs.BaseCustomTabActivity;
import org.chromium.chrome.browser.customtabs.CustomTabAppMenuPropertiesDelegate;
import org.chromium.chrome.browser.customtabs.content.CustomTabIntentHandler.IntentIgnoringCriterion; import org.chromium.chrome.browser.customtabs.content.CustomTabIntentHandler.IntentIgnoringCriterion;
import org.chromium.chrome.browser.customtabs.content.TabObserverRegistrar; import org.chromium.chrome.browser.customtabs.content.TabObserverRegistrar;
import org.chromium.chrome.browser.customtabs.dependency_injection.BaseCustomTabActivityModule; import org.chromium.chrome.browser.customtabs.dependency_injection.BaseCustomTabActivityModule;
import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule; import org.chromium.chrome.browser.dependency_injection.ChromeActivityCommonsModule;
import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate;
import org.chromium.chrome.browser.webapps.dependency_injection.WebappActivityComponent; import org.chromium.chrome.browser.webapps.dependency_injection.WebappActivityComponent;
import org.chromium.webapk.lib.common.WebApkConstants; import org.chromium.webapk.lib.common.WebApkConstants;
import java.util.ArrayList;
/** /**
* Displays a webapp in a nearly UI-less Chrome (InfoBars still appear). * Displays a webapp in a nearly UI-less Chrome (InfoBars still appear).
*/ */
...@@ -99,17 +94,6 @@ public class WebappActivity extends BaseCustomTabActivity<WebappActivityComponen ...@@ -99,17 +94,6 @@ public class WebappActivity extends BaseCustomTabActivity<WebappActivityComponen
getFullscreenManager().exitPersistentFullscreenMode(); getFullscreenManager().exitPersistentFullscreenMode();
} }
@Override
public AppMenuPropertiesDelegate createAppMenuPropertiesDelegate() {
return new CustomTabAppMenuPropertiesDelegate(this, getActivityTabProvider(),
getMultiWindowModeStateDispatcher(), getTabModelSelector(), getToolbarManager(),
getWindow().getDecorView(), mBookmarkBridgeSupplier,
CustomTabsUiType.MINIMAL_UI_WEBAPP, new ArrayList<String>(),
false /* is opened by Chrome */, true /* should show share */,
false /* should show star (bookmarking) */, false /* should show download */,
false /* is incognito */);
}
@Override @Override
public boolean onMenuOrKeyboardAction(int id, boolean fromMenu) { public boolean onMenuOrKeyboardAction(int id, boolean fromMenu) {
// Disable creating bookmark. // Disable creating bookmark.
......
...@@ -90,6 +90,27 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider ...@@ -90,6 +90,27 @@ public class WebappIntentDataProvider extends BrowserServicesIntentDataProvider
return CustomTabsIntent.SHOW_PAGE_TITLE; return CustomTabsIntent.SHOW_PAGE_TITLE;
} }
@Override
public boolean shouldShowShareMenuItem() {
return true;
}
@Override
@CustomTabsUiType
public int getUiType() {
return CustomTabsUiType.MINIMAL_UI_WEBAPP;
}
@Override
public boolean shouldShowStarButton() {
return false;
}
@Override
public boolean shouldShowDownloadButton() {
return false;
}
@Override @Override
@Nullable @Nullable
public ShareData getShareData() { public ShareData getShareData() {
......
...@@ -7,7 +7,7 @@ package org.chromium.chrome.browser.webapps; ...@@ -7,7 +7,7 @@ package org.chromium.chrome.browser.webapps;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import org.chromium.base.Promise; import org.chromium.base.Promise;
import org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller.Verifier; import org.chromium.chrome.browser.browserservices.ui.controller.Verifier;
/** /**
* Contains common implementation between {@link AddToHomescreenVerifier} and * Contains common implementation between {@link AddToHomescreenVerifier} and
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller; package org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller;
import org.chromium.base.Promise; import org.chromium.base.Promise;
import org.chromium.chrome.browser.browserservices.ui.controller.Verifier;
import org.chromium.components.embedder_support.util.Origin; import org.chromium.components.embedder_support.util.Origin;
import java.util.HashMap; import java.util.HashMap;
......
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