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

Android: Delete TabImpl.isPreview/getSecurityModel

Deletes the convenience public methods in TabImpl class. The callsites
use a new util method defined in Preview or SecurityStateModel.
Tests that relied on TabImpl.getSecurityModel for mocking out the method
now has a new one in the class being tested.

Bug: 995903

Change-Id: I00d52617a10999be8dc36f629dbc64b5aa0d8bd2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2000411
Commit-Queue: Jinsuk Kim <jinsukkim@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#733817}
parent 3bb80c99
......@@ -1323,6 +1323,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/policy/PolicyAuditor.java",
"java/src/org/chromium/chrome/browser/prerender/ChromePrerenderService.java",
"java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java",
"java/src/org/chromium/chrome/browser/previews/Previews.java",
"java/src/org/chromium/chrome/browser/previews/PreviewsAndroidBridge.java",
"java/src/org/chromium/chrome/browser/previews/PreviewsUma.java",
"java/src/org/chromium/chrome/browser/printing/PrintShareActivity.java",
......
......@@ -5,6 +5,7 @@
package org.chromium.chrome.browser.browserservices.trustedwebactivityui.controller;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.customtabs.CloseButtonVisibilityManager;
......@@ -13,8 +14,8 @@ import org.chromium.chrome.browser.customtabs.content.TabObserverRegistrar;
import org.chromium.chrome.browser.customtabs.content.TabObserverRegistrar.CustomTabTabObserver;
import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarCoordinator;
import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.ssl.SecurityStateModel;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.webapps.WebDisplayMode;
import org.chromium.chrome.browser.webapps.WebappExtras;
import org.chromium.components.security_state.ConnectionSecurityLevel;
......@@ -123,8 +124,7 @@ public class TrustedWebActivityBrowserControlsVisibilityManager {
private @BrowserControlsState int computeBrowserControlsState(@Nullable Tab tab) {
// Force browser controls to show when the security level is dangerous for consistency with
// TabStateBrowserControlsVisibilityDelegate.
if (tab != null
&& ((TabImpl) tab).getSecurityLevel() == ConnectionSecurityLevel.DANGEROUS) {
if (tab != null && getSecurityLevel(tab) == ConnectionSecurityLevel.DANGEROUS) {
return BrowserControlsState.SHOWN;
}
......@@ -139,4 +139,10 @@ public class TrustedWebActivityBrowserControlsVisibilityManager {
private boolean isChildTab(@Nullable Tab tab) {
return tab != null && tab.getParentId() != Tab.INVALID_TAB_ID;
}
@ConnectionSecurityLevel
@VisibleForTesting
int getSecurityLevel(Tab tab) {
return SecurityStateModel.getSecurityLevelForWebContents(tab.getWebContents());
}
}
......@@ -54,8 +54,8 @@ import org.chromium.chrome.browser.night_mode.PowerSavingModeMonitor;
import org.chromium.chrome.browser.night_mode.SystemNightModeMonitor;
import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
import org.chromium.chrome.browser.page_info.PageInfoController;
import org.chromium.chrome.browser.previews.Previews;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.ui.appmenu.AppMenuPropertiesDelegate;
import org.chromium.chrome.browser.usage_stats.UsageStatsService;
import org.chromium.chrome.browser.util.IntentUtils;
......@@ -366,10 +366,7 @@ public class CustomTabActivity extends BaseCustomTabActivity<CustomTabActivityCo
return false;
}
Tab tab = mTabProvider.getTab();
if (tab != null && ((TabImpl) tab).isPreview()) {
return false;
}
if (Previews.isPreview(mTabProvider.getTab())) return false;
String publisherUrlPackage = mConnection.getTrustedCdnPublisherUrlPackage();
return publisherUrlPackage != null
......
......@@ -9,12 +9,11 @@ import androidx.browser.customtabs.CustomTabsSessionToken;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.ssl.SecurityStateModel;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabHidingType;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.components.security_state.ConnectionSecurityLevel;
import javax.inject.Inject;
......@@ -65,7 +64,7 @@ public class CustomTabNavigationEventObserver extends EmptyTabObserver {
@Override
public void onDidAttachInterstitialPage(Tab tab) {
if (((TabImpl) tab).getSecurityLevel() != ConnectionSecurityLevel.DANGEROUS) return;
if (SecurityStateModel.isContentDangerous(tab.getWebContents())) return;
mConnection.notifyNavigationEvent(mSessionToken, CustomTabsCallback.NAVIGATION_FAILED);
}
}
......@@ -22,12 +22,11 @@ import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProv
import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler;
import org.chromium.chrome.browser.share.ShareHelper;
import org.chromium.chrome.browser.ssl.SecurityStateModel;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabHidingType;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.components.security_state.ConnectionSecurityLevel;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.NavigationHandle;
......@@ -180,7 +179,7 @@ public class CustomTabObserver extends EmptyTabObserver {
@Override
public void onDidAttachInterstitialPage(Tab tab) {
if (((TabImpl) tab).getSecurityLevel() != ConnectionSecurityLevel.DANGEROUS) return;
if (SecurityStateModel.isContentDangerous(tab.getWebContents())) return;
resetPageLoadTracking();
}
......
......@@ -7,10 +7,13 @@ package org.chromium.chrome.browser.customtabs;
import static org.chromium.chrome.browser.ui.system.StatusBarColorController.DEFAULT_STATUS_BAR_COLOR;
import static org.chromium.chrome.browser.ui.system.StatusBarColorController.UNDEFINED_STATUS_BAR_COLOR;
import androidx.annotation.VisibleForTesting;
import org.chromium.chrome.browser.browserservices.BrowserServicesIntentDataProvider;
import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarColorController;
import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbarColorController.ToolbarColorType;
import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.previews.Previews;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.ui.system.StatusBarColorController;
......@@ -49,7 +52,7 @@ public class CustomTabStatusBarColorProvider {
@ToolbarColorType
int toolbarColorType = CustomTabToolbarColorController.computeToolbarColorType(
mIntentDataProvider, mUseTabThemeColor, tab);
mIntentDataProvider, mUseTabThemeColor, tab, () -> isPreview(tab));
switch (toolbarColorType) {
case ToolbarColorType.THEME_COLOR:
return UNDEFINED_STATUS_BAR_COLOR;
......@@ -60,4 +63,9 @@ public class CustomTabStatusBarColorProvider {
}
return DEFAULT_STATUS_BAR_COLOR;
}
@VisibleForTesting
boolean isPreview(Tab tab) {
return Previews.isPreview(tab);
}
}
......@@ -24,13 +24,13 @@ import org.chromium.chrome.browser.favicon.FaviconHelper;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.lifecycle.Destroyable;
import org.chromium.chrome.browser.lifecycle.NativeInitObserver;
import org.chromium.chrome.browser.ssl.SecurityStateModel;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabThemeColorHelper;
import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.chrome.browser.util.UrlUtilities;
import org.chromium.chrome.browser.webapps.WebappExtras;
import org.chromium.components.security_state.ConnectionSecurityLevel;
import org.chromium.content_public.browser.NavigationHandle;
import javax.inject.Inject;
......@@ -179,8 +179,7 @@ public class CustomTabTaskDescriptionHelper implements NativeInitObserver, Destr
}
private boolean hasSecurityWarningOrError(Tab tab) {
int securityLevel = ((TabImpl) tab).getSecurityLevel();
return securityLevel == ConnectionSecurityLevel.DANGEROUS;
return SecurityStateModel.isContentDangerous(tab.getWebContents());
}
};
mTabObserverRegistrar.registerActivityTabObserver(mIconTabObserver);
......
......@@ -19,12 +19,11 @@ import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.browser.customtabs.CustomTabsCallback;
import org.chromium.chrome.browser.ssl.SecurityStateModel;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabHidingType;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.components.security_state.ConnectionSecurityLevel;
import org.chromium.content_public.browser.NavigationEntry;
import org.chromium.net.NetError;
......@@ -126,7 +125,7 @@ public class DynamicModuleNavigationEventObserver extends EmptyTabObserver {
@Override
public void onDidAttachInterstitialPage(Tab tab) {
if (((TabImpl) tab).getSecurityLevel() != ConnectionSecurityLevel.DANGEROUS) return;
if (SecurityStateModel.isContentDangerous(tab.getWebContents())) return;
notifyOnNavigationEvent(NAVIGATION_FAILED, getExtrasBundleForNavigationEvent(tab));
}
}
......@@ -14,8 +14,8 @@ import org.chromium.chrome.browser.customtabs.content.CustomTabActivityTabProvid
import org.chromium.chrome.browser.customtabs.content.TabObserverRegistrar;
import org.chromium.chrome.browser.customtabs.content.TabObserverRegistrar.CustomTabTabObserver;
import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.previews.Previews;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.browser.tab.TabThemeColorHelper;
import org.chromium.chrome.browser.toolbar.ToolbarManager;
......@@ -43,6 +43,12 @@ public class CustomTabToolbarColorController {
int INTENT_TOOLBAR_COLOR = 2;
}
/**
* Interface used to receive a predicate that tells if the current tab is in preview mode.
* This makes the {@link #computeToolbarColorType()} test-friendly.
*/
public interface BooleanFunction { boolean get(); }
private final BrowserServicesIntentDataProvider mIntentDataProvider;
private final ChromeActivity mActivity;
private final TabObserverRegistrar mTabObserverRegistrar;
......@@ -67,13 +73,12 @@ public class CustomTabToolbarColorController {
* surfaces with different values for {@link ToolbarColorType.DEFAULT_COLOR}.
*/
public static int computeToolbarColorType(BrowserServicesIntentDataProvider intentDataProvider,
boolean useTabThemeColor, @Nullable Tab tab) {
boolean useTabThemeColor, @Nullable Tab tab, BooleanFunction isPreview) {
if (intentDataProvider.isOpenedByChrome()) {
return (tab == null) ? ToolbarColorType.DEFAULT_COLOR : ToolbarColorType.THEME_COLOR;
}
if (shouldUseDefaultThemeColorForFullscreen(intentDataProvider)
|| (tab != null && ((TabImpl) tab).isPreview())) {
if (shouldUseDefaultThemeColorForFullscreen(intentDataProvider) || isPreview.get()) {
return ToolbarColorType.DEFAULT_COLOR;
}
......@@ -155,7 +160,8 @@ public class CustomTabToolbarColorController {
private int computeColor() {
Tab tab = mTabProvider.getTab();
@ToolbarColorType
int toolbarColorType = computeToolbarColorType(mIntentDataProvider, mUseTabThemeColor, tab);
int toolbarColorType = computeToolbarColorType(
mIntentDataProvider, mUseTabThemeColor, tab, () -> Previews.isPreview(tab));
switch (toolbarColorType) {
case ToolbarColorType.THEME_COLOR:
assert tab != null;
......
// 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.previews;
import org.chromium.chrome.browser.ssl.SecurityStateModel;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.content_public.browser.WebContents;
/**
* Class for preview-related util methods.
*/
public final class Previews {
/**
* @param tab Tab object containing the WebContents.
* @return {@code true} if the page being displayed is a preview.
*/
public static boolean isPreview(Tab tab) {
if (tab == null || tab.isNativePage()) return false;
WebContents webContents = tab.getWebContents();
return webContents != null && !webContents.isShowingInterstitialPage()
&& !SecurityStateModel.isContentDangerous(webContents)
&& PreviewsAndroidBridge.getInstance().shouldShowPreviewUI(webContents);
}
}
......@@ -27,6 +27,10 @@ public class SecurityStateModel {
return SecurityStateModelJni.get().getSecurityLevelForWebContents(webContents);
}
public static boolean isContentDangerous(WebContents webContents) {
return getSecurityLevelForWebContents(webContents) == ConnectionSecurityLevel.DANGEROUS;
}
/**
* Returns whether to use a danger icon instead of an info icon in the URL bar for the WARNING
* security level.
......
......@@ -4,6 +4,8 @@ include_rules = [
"+chrome/android/java/src/org/chromium/chrome/browser/TabHidingType.java",
"+chrome/android/java/src/org/chromium/chrome/browser/flags/ChromeFeatureList.java",
"+chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java",
"+chrome/android/java/src/org/chromium/chrome/browser/previews/Previews.java",
"+chrome/android/java/src/org/chromium/chrome/browser/ssl/SecurityStateModel.java",
"+chrome/android/java/src/org/chromium/chrome/browser/tab",
"+chrome/android/java/src/org/chromium/chrome/browser/webapps/WebDisplayMode.java",
"+chrome/browser/preferences",
......@@ -28,9 +30,7 @@ specific_include_rules = {
"+chrome/android/java/src/org/chromium/chrome/browser/native_page/NativePageFactory.java",
"+chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtils.java",
"+chrome/android/java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java",
"+chrome/android/java/src/org/chromium/chrome/browser/previews/PreviewsAndroidBridge.java",
"+chrome/android/java/src/org/chromium/chrome/browser/rlz/RevenueStats.java",
"+chrome/android/java/src/org/chromium/chrome/browser/ssl/SecurityStateModel.java",
"+chrome/android/java/src/org/chromium/chrome/browser/night_mode",
"+chrome/android/public/profiles/java/src/org/chromium/chrome/browser/profiles/Profile.java",
"+chrome/browser/util/android/java/src/org/chromium/chrome/browser/util/UrlConstants.java",
......
......@@ -39,17 +39,14 @@ import org.chromium.chrome.browser.native_page.NativePageFactory;
import org.chromium.chrome.browser.night_mode.NightModeUtils;
import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler;
import org.chromium.chrome.browser.previews.PreviewsAndroidBridge;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.rlz.RevenueStats;
import org.chromium.chrome.browser.ssl.SecurityStateModel;
import org.chromium.chrome.browser.tab.TabState.WebContentsState;
import org.chromium.chrome.browser.tab.TabUma.TabCreationState;
import org.chromium.chrome.browser.util.UrlConstants;
import org.chromium.chrome.browser.vr.VrModuleProvider;
import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
import org.chromium.components.embedder_support.view.ContentView;
import org.chromium.components.security_state.ConnectionSecurityLevel;
import org.chromium.content_public.browser.ChildProcessImportance;
import org.chromium.content_public.browser.LoadUrlParams;
import org.chromium.content_public.browser.WebContents;
......@@ -723,23 +720,6 @@ public class TabImpl implements Tab {
return mRootId;
}
/**
* @return If the page being displayed is a Preview
*/
public boolean isPreview() {
return getWebContents() != null && !isNativePage() && !isShowingInterstitialPage()
&& getSecurityLevel() != ConnectionSecurityLevel.DANGEROUS
&& PreviewsAndroidBridge.getInstance().shouldShowPreviewUI(getWebContents());
}
/**
* @return The current {@link ConnectionSecurityLevel} for the tab.
*/
// TODO(tedchoc): Remove this and transition all clients to use LocationBarModel directly.
public int getSecurityLevel() {
return SecurityStateModel.getSecurityLevelForWebContents(getWebContents());
}
/**
* @return Original url of the tab, which is the original url from DOMDistiller.
*/
......
......@@ -10,10 +10,10 @@ import android.os.Message;
import org.chromium.chrome.browser.device.DeviceClassManager;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.ssl.SecurityStateModel;
import org.chromium.chrome.browser.util.AccessibilityUtil;
import org.chromium.chrome.browser.util.UrlConstants;
import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
import org.chromium.components.security_state.ConnectionSecurityLevel;
import org.chromium.content_public.browser.ImeAdapter;
import org.chromium.content_public.browser.ImeEventObserver;
import org.chromium.content_public.browser.NavigationHandle;
......@@ -191,9 +191,8 @@ public class TabStateBrowserControlsVisibilityDelegate
enableHidingBrowserControls &= !url.startsWith(UrlConstants.CHROME_URL_PREFIX);
enableHidingBrowserControls &= !url.startsWith(UrlConstants.CHROME_NATIVE_URL_PREFIX);
int securityState = mTab.getSecurityLevel();
enableHidingBrowserControls &= (securityState != ConnectionSecurityLevel.DANGEROUS);
enableHidingBrowserControls &=
!SecurityStateModel.isContentDangerous(mTab.getWebContents());
enableHidingBrowserControls &=
!SelectionPopupController.fromWebContents(webContents).isFocusedNodeEditable();
enableHidingBrowserControls &= !mTab.isShowingErrorPage();
......
......@@ -10,6 +10,8 @@ import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import org.chromium.base.UserData;
import org.chromium.chrome.browser.previews.Previews;
import org.chromium.chrome.browser.ssl.SecurityStateModel;
import org.chromium.chrome.browser.util.ColorUtils;
import org.chromium.components.browser_ui.styles.ChromeColors;
import org.chromium.components.security_state.ConnectionSecurityLevel;
......@@ -152,14 +154,15 @@ public class TabThemeColorHelper extends EmptyTabObserver implements UserData {
*/
private boolean checkThemingAllowed() {
// Do not apply the theme color if there are any security issues on the page.
final int securityLevel = mTab.getSecurityLevel();
final int securityLevel =
SecurityStateModel.getSecurityLevelForWebContents(mTab.getWebContents());
return securityLevel != ConnectionSecurityLevel.DANGEROUS
&& securityLevel != ConnectionSecurityLevel.SECURE_WITH_POLICY_INSTALLED_CERT
&& (mTab.getActivity() == null || !mTab.getActivity().isTablet())
&& (mTab.getActivity() == null
|| !mTab.getActivity().getNightModeStateProvider().isInNightMode())
&& !mTab.isNativePage() && !mTab.isShowingInterstitialPage() && !mTab.isIncognito()
&& !mTab.isPreview();
&& !Previews.isPreview(mTab);
}
/**
......
......@@ -26,6 +26,7 @@ import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
import org.chromium.chrome.browser.omnibox.OmniboxUrlEmphasizer;
import org.chromium.chrome.browser.omnibox.SearchEngineLogoUtils;
import org.chromium.chrome.browser.omnibox.UrlBarData;
import org.chromium.chrome.browser.previews.Previews;
import org.chromium.chrome.browser.previews.PreviewsAndroidBridge;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.ssl.SecurityStateModel;
......@@ -343,7 +344,7 @@ public class LocationBarModel implements ToolbarDataProvider, ToolbarCommonPrope
@Override
public boolean isPreview() {
return hasTab() && ((TabImpl) mTab).isPreview();
return hasTab() && Previews.isPreview(mTab);
}
@Override
......@@ -377,19 +378,25 @@ public class LocationBarModel implements ToolbarDataProvider, ToolbarCommonPrope
@VisibleForTesting
@ConnectionSecurityLevel
static int getSecurityLevel(Tab tab, boolean isOfflinePage, @Nullable String publisherUrl) {
int getSecurityLevel(Tab tab, boolean isOfflinePage, @Nullable String publisherUrl) {
if (tab == null || isOfflinePage) {
return ConnectionSecurityLevel.NONE;
}
int securityLevel = ((TabImpl) tab).getSecurityLevel();
if (publisherUrl != null) {
assert securityLevel != ConnectionSecurityLevel.DANGEROUS;
assert getSecurityLevelFromStateModel(tab.getWebContents())
!= ConnectionSecurityLevel.DANGEROUS;
return (URI.create(publisherUrl).getScheme().equals(UrlConstants.HTTPS_SCHEME))
? ConnectionSecurityLevel.SECURE
: ConnectionSecurityLevel.WARNING;
}
return securityLevel;
return getSecurityLevelFromStateModel(tab.getWebContents());
}
@VisibleForTesting
@ConnectionSecurityLevel
int getSecurityLevelFromStateModel(WebContents webContents) {
return SecurityStateModel.getSecurityLevelForWebContents(webContents);
}
@VisibleForTesting
......
......@@ -18,9 +18,9 @@ import org.chromium.chrome.browser.datareduction.DataReductionSavingsMilestonePr
import org.chromium.chrome.browser.feature_engagement.TrackerFactory;
import org.chromium.chrome.browser.flags.FeatureUtilities;
import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings;
import org.chromium.chrome.browser.previews.Previews;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.ui.appmenu.AppMenuCoordinator;
import org.chromium.chrome.browser.ui.appmenu.AppMenuHandler;
import org.chromium.chrome.browser.ui.widget.highlight.ViewHighlighter;
......@@ -66,13 +66,13 @@ public class ToolbarButtonInProductHelpController {
- mDataSavedOnStartPageLoad;
Tracker tracker = TrackerFactory.getTrackerForProfile(Profile.getLastUsedProfile());
if (dataSaved > 0L) tracker.notifyEvent(EventConstants.DATA_SAVED_ON_PAGE_LOAD);
if (((TabImpl) tab).isPreview()) {
if (Previews.isPreview(tab)) {
tracker.notifyEvent(EventConstants.PREVIEWS_PAGE_LOADED);
}
if (tab.isUserInteractable()) {
maybeShowDataSaverDetail();
if (dataSaved > 0L) maybeShowDataSaverMilestonePromo();
if (((TabImpl) tab).isPreview()) maybeShowPreviewVerboseStatus();
if (Previews.isPreview(tab)) maybeShowPreviewVerboseStatus();
}
}
};
......
......@@ -73,6 +73,7 @@ import org.chromium.chrome.browser.omnibox.LocationBar;
import org.chromium.chrome.browser.omnibox.SearchEngineLogoUtils;
import org.chromium.chrome.browser.omnibox.UrlFocusChangeListener;
import org.chromium.chrome.browser.partnercustomizations.HomepageManager;
import org.chromium.chrome.browser.previews.Previews;
import org.chromium.chrome.browser.previews.PreviewsAndroidBridge;
import org.chromium.chrome.browser.previews.PreviewsUma;
import org.chromium.chrome.browser.profiles.Profile;
......@@ -473,7 +474,7 @@ public class ToolbarManager implements ScrimObserver, ToolbarTabController, UrlF
}
// TODO(crbug.com/896476): Remove this.
if (((TabImpl) tab).isPreview()) {
if (Previews.isPreview(tab)) {
// Some previews (like Client LoFi) are not fully decided until the page
// finishes loading. If this is a preview, update the security icon which will
// also update the verbose status view to make sure the "Lite" badge is
......@@ -607,7 +608,7 @@ public class ToolbarManager implements ScrimObserver, ToolbarTabController, UrlF
mToolbar.onNavigatedToDifferentPage();
}
if (navigation.hasCommitted() && ((TabImpl) tab).isPreview()) {
if (navigation.hasCommitted() && Previews.isPreview(tab)) {
// Some previews are not fully decided until the page commits. If this
// is a preview, update the security icon which will also update the verbose
// status view to make sure the "Lite" badge is displayed.
......
......@@ -21,14 +21,12 @@ import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.SadTab;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabImpl;
import org.chromium.chrome.browser.tab.TabObserver;
import org.chromium.chrome.browser.tab.TabSelectionType;
import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.ApplicationTestUtils;
import org.chromium.chrome.test.util.ChromeTabUtils;
import org.chromium.components.security_state.ConnectionSecurityLevel;
import org.chromium.content_public.browser.test.util.Criteria;
import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
......@@ -136,13 +134,4 @@ public class TabTest {
Assert.assertFalse(mTab.needsReload());
Assert.assertFalse(isShowingSadTab());
}
@Test
@SmallTest
@Feature({"Tab"})
public void testTabSecurityLevel() {
TestThreadUtils.runOnUiThreadBlocking(() -> {
Assert.assertEquals(ConnectionSecurityLevel.NONE, ((TabImpl) mTab).getSecurityLevel());
});
}
}
......@@ -7,8 +7,11 @@ package org.chromium.chrome.browser.browserservices.trustedwebactivityui.control
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
......@@ -50,6 +53,7 @@ public class TrustedWebActivityBrowserControlsVisibilityManagerTest {
@Mock
public CloseButtonVisibilityManager mCloseButtonVisibilityManager;
@Mock
TrustedWebActivityBrowserControlsVisibilityManager mController;
@Before
......@@ -65,9 +69,8 @@ public class TrustedWebActivityBrowserControlsVisibilityManagerTest {
*/
@Test
public void testDangerousSecurityLevel() {
setTabSecurityLevel(ConnectionSecurityLevel.DANGEROUS);
mController = buildController(mock(BrowserServicesIntentDataProvider.class));
setTabSecurityLevel(ConnectionSecurityLevel.DANGEROUS);
mController.updateIsInTwaMode(true);
assertEquals(BrowserControlsState.SHOWN, getLastBrowserControlsState());
assertFalse(getLastCloseButtonVisibility());
......@@ -131,7 +134,7 @@ public class TrustedWebActivityBrowserControlsVisibilityManagerTest {
}
private void setTabSecurityLevel(int securityLevel) {
when(mTab.getSecurityLevel()).thenReturn(securityLevel);
doReturn(securityLevel).when(mController).getSecurityLevel(any());
}
private BrowserServicesIntentDataProvider buildWebApkIntentDataProvider(
......@@ -144,9 +147,9 @@ public class TrustedWebActivityBrowserControlsVisibilityManagerTest {
private TrustedWebActivityBrowserControlsVisibilityManager buildController(
BrowserServicesIntentDataProvider intentDataProvider) {
return new TrustedWebActivityBrowserControlsVisibilityManager(mTabObserverRegistrar,
return spy(new TrustedWebActivityBrowserControlsVisibilityManager(mTabObserverRegistrar,
mTabProvider, mToolbarCoordinator, mCloseButtonVisibilityManager,
intentDataProvider);
intentDataProvider));
}
/**
......
......@@ -4,6 +4,8 @@
package org.chromium.chrome.browser.customtabs;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
......@@ -16,6 +18,7 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
......@@ -44,12 +47,12 @@ public class CustomTabStatusBarColorProviderTest {
public void setUp() {
MockitoAnnotations.initMocks(this);
mColorProvider = new CustomTabStatusBarColorProvider(
mCustomTabIntentDataProvider, mStatusBarColorController);
mColorProvider = Mockito.spy(new CustomTabStatusBarColorProvider(
mCustomTabIntentDataProvider, mStatusBarColorController));
when(mCustomTabIntentDataProvider.getToolbarColor()).thenReturn(USER_PROVIDED_COLOR);
when(mCustomTabIntentDataProvider.hasCustomToolbarColor()).thenReturn(true);
when(mTab.isPreview()).thenReturn(false);
doReturn(false).when(mColorProvider).isPreview(any());
}
@Test
......@@ -77,7 +80,7 @@ public class CustomTabStatusBarColorProviderTest {
@Test
public void useTabThemeColor_preview() {
when(mTab.isPreview()).thenReturn(true);
doReturn(true).when(mColorProvider).isPreview(any());
mColorProvider.setUseTabThemeColor(true);
Assert.assertEquals(DEFAULT_STATUS_BAR_COLOR, getStatusBarColor(mTab));
......
......@@ -4,6 +4,9 @@
package org.chromium.chrome.browser.toolbar;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import org.mockito.Mock;
......@@ -35,6 +38,7 @@ public final class ToolbarSecurityIconTest {
@Mock
SecurityStateModel.Natives mSecurityStateMocks;
@Mock
private LocationBarModel mLocationBarModel;
@CalledByNative
......@@ -44,7 +48,7 @@ public final class ToolbarSecurityIconTest {
public void setUp() {
MockitoAnnotations.initMocks(this);
SecurityStateModelJni.TEST_HOOKS.setInstanceForTesting(mSecurityStateMocks);
mLocationBarModel = new LocationBarModel(ContextUtils.getApplicationContext());
mLocationBarModel = spy(new LocationBarModel(ContextUtils.getApplicationContext()));
mLocationBarModel.initializeWithNative();
}
......@@ -56,30 +60,34 @@ public final class ToolbarSecurityIconTest {
@CalledByNativeJavaTest
public void testGetSecurityLevel() {
assertEquals(ConnectionSecurityLevel.NONE,
LocationBarModel.getSecurityLevel(null, !IS_OFFLINE_PAGE, null));
mLocationBarModel.getSecurityLevel(null, !IS_OFFLINE_PAGE, null));
assertEquals(ConnectionSecurityLevel.NONE,
LocationBarModel.getSecurityLevel(null, IS_OFFLINE_PAGE, null));
mLocationBarModel.getSecurityLevel(null, IS_OFFLINE_PAGE, null));
assertEquals(ConnectionSecurityLevel.NONE,
LocationBarModel.getSecurityLevel(mTab, IS_OFFLINE_PAGE, null));
mLocationBarModel.getSecurityLevel(mTab, IS_OFFLINE_PAGE, null));
for (int securityLevel : SECURITY_LEVELS) {
when((mTab).getSecurityLevel()).thenReturn(securityLevel);
doReturn(securityLevel).when(mLocationBarModel).getSecurityLevelFromStateModel(any());
assertEquals("Wrong security level returned for " + securityLevel, securityLevel,
LocationBarModel.getSecurityLevel(mTab, !IS_OFFLINE_PAGE, null));
mLocationBarModel.getSecurityLevel(mTab, !IS_OFFLINE_PAGE, null));
}
when((mTab).getSecurityLevel()).thenReturn(ConnectionSecurityLevel.SECURE);
doReturn(ConnectionSecurityLevel.SECURE)
.when(mLocationBarModel)
.getSecurityLevelFromStateModel(any());
assertEquals("Wrong security level returned for HTTPS publisher URL",
ConnectionSecurityLevel.SECURE,
LocationBarModel.getSecurityLevel(mTab, !IS_OFFLINE_PAGE, "https://example.com"));
mLocationBarModel.getSecurityLevel(mTab, !IS_OFFLINE_PAGE, "https://example.com"));
assertEquals("Wrong security level returned for HTTP publisher URL",
ConnectionSecurityLevel.WARNING,
LocationBarModel.getSecurityLevel(mTab, !IS_OFFLINE_PAGE, "http://example.com"));
mLocationBarModel.getSecurityLevel(mTab, !IS_OFFLINE_PAGE, "http://example.com"));
when((mTab).getSecurityLevel()).thenReturn(ConnectionSecurityLevel.DANGEROUS);
doReturn(ConnectionSecurityLevel.DANGEROUS)
.when(mLocationBarModel)
.getSecurityLevelFromStateModel(any());
assertEquals("Wrong security level returned for publisher URL on insecure page",
ConnectionSecurityLevel.DANGEROUS,
LocationBarModel.getSecurityLevel(mTab, !IS_OFFLINE_PAGE, null));
mLocationBarModel.getSecurityLevel(mTab, !IS_OFFLINE_PAGE, null));
}
@CalledByNativeJavaTest
......
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