Commit 789f9c4b authored by Peter Kotwicz's avatar Peter Kotwicz Committed by Commit Bot

[Android WebAPK] Introduce builder for WebApkInfo for tests

This CL:
- Removes id parameter from WebApkInfo#create()
- Introduces builder class for WebApkInfo - WebApkInfoBuilder - and
  refactors tests to use it
- Removes test-only 14 arg WebappInfo#create() method and switches
  tests to use WebappInfo#create() version which takes intent as input
- Introduces method to create minimal intent for building WebappInfo -
  WebappTestHelper#createMinimalWebappIntent()
- Changes WebApkUkmRecorder to work with tests which where
  WebApkInfo#manifestUrl() returns null

BUG=None

Change-Id: I7d2eb49c47509f6581e579fb05f3b9c7330eeca6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1759927Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Reviewed-by: default avatarYaron Friedman <yfriedman@chromium.org>
Commit-Queue: Peter Kotwicz <pkotwicz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#688286}
parent 5eca7944
...@@ -360,9 +360,8 @@ public class WebApkInfo extends WebappInfo { ...@@ -360,9 +360,8 @@ public class WebApkInfo extends WebappInfo {
(canUseSplashFromContentProvider && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N (canUseSplashFromContentProvider && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
&& hasContentProviderForSplash(webApkPackageName)); && hasContentProviderForSplash(webApkPackageName));
return create(WebApkConstants.WEBAPK_ID_PREFIX + webApkPackageName, url, scope, return create(url, scope, new Icon(primaryIcon), new Icon(badgeIcon), new Icon(splashIcon),
new Icon(primaryIcon), new Icon(badgeIcon), new Icon(splashIcon), name, shortName, name, shortName, displayMode, orientation, source, themeColor, backgroundColor,
displayMode, orientation, source, themeColor, backgroundColor,
defaultBackgroundColor, isPrimaryIconMaskable, webApkPackageName, shellApkVersion, defaultBackgroundColor, isPrimaryIconMaskable, webApkPackageName, shellApkVersion,
manifestUrl, manifestStartUrl, distributor, iconUrlToMurmur2HashMap, shareTarget, manifestUrl, manifestStartUrl, distributor, iconUrlToMurmur2HashMap, shareTarget,
shareTargetActivityName, forceNavigation, isSplashProvidedByWebApk, shareData, shareTargetActivityName, forceNavigation, isSplashProvidedByWebApk, shareData,
...@@ -371,7 +370,6 @@ public class WebApkInfo extends WebappInfo { ...@@ -371,7 +370,6 @@ public class WebApkInfo extends WebappInfo {
/** /**
* Construct a {@link WebApkInfo} instance. * Construct a {@link WebApkInfo} instance.
* @param id ID for the WebAPK.
* @param url URL that the WebAPK should navigate to when launched. * @param url URL that the WebAPK should navigate to when launched.
* @param scope Scope for the WebAPK. * @param scope Scope for the WebAPK.
* @param primaryIcon Primary icon to show for the WebAPK. * @param primaryIcon Primary icon to show for the WebAPK.
...@@ -407,18 +405,17 @@ public class WebApkInfo extends WebappInfo { ...@@ -407,18 +405,17 @@ public class WebApkInfo extends WebappInfo {
* @param shareData Shared information from the share intent. * @param shareData Shared information from the share intent.
* @param webApkVersionCode WebAPK's version code. * @param webApkVersionCode WebAPK's version code.
*/ */
public static WebApkInfo create(String id, String url, String scope, Icon primaryIcon, public static WebApkInfo create(String url, String scope, Icon primaryIcon, Icon badgeIcon,
Icon badgeIcon, Icon splashIcon, String name, String shortName, Icon splashIcon, String name, String shortName, @WebDisplayMode int displayMode,
@WebDisplayMode int displayMode, int orientation, int source, long themeColor, int orientation, int source, long themeColor, long backgroundColor,
long backgroundColor, int defaultBackgroundColor, boolean isPrimaryIconMaskable, int defaultBackgroundColor, boolean isPrimaryIconMaskable, String webApkPackageName,
String webApkPackageName, int shellApkVersion, String manifestUrl, int shellApkVersion, String manifestUrl, String manifestStartUrl,
String manifestStartUrl, @WebApkDistributor int distributor, @WebApkDistributor int distributor, Map<String, String> iconUrlToMurmur2HashMap,
Map<String, String> iconUrlToMurmur2HashMap, ShareTarget shareTarget, ShareTarget shareTarget, String shareTargetActivityName, boolean forceNavigation,
String shareTargetActivityName, boolean forceNavigation,
boolean isSplashProvidedByWebApk, ShareData shareData, int webApkVersionCode) { boolean isSplashProvidedByWebApk, ShareData shareData, int webApkVersionCode) {
if (id == null || url == null || manifestStartUrl == null || webApkPackageName == null) { if (url == null || manifestStartUrl == null || webApkPackageName == null) {
Log.e(TAG, Log.e(TAG,
"Incomplete data provided: " + id + ", " + url + ", " + manifestStartUrl + ", " "Incomplete data provided: " + url + ", " + manifestStartUrl + ", "
+ webApkPackageName); + webApkPackageName);
return null; return null;
} }
...@@ -430,7 +427,7 @@ public class WebApkInfo extends WebappInfo { ...@@ -430,7 +427,7 @@ public class WebApkInfo extends WebappInfo {
scope = ShortcutHelper.getScopeFromUrl(manifestStartUrl); scope = ShortcutHelper.getScopeFromUrl(manifestStartUrl);
} }
return new WebApkInfo(id, url, scope, primaryIcon, badgeIcon, splashIcon, name, shortName, return new WebApkInfo(url, scope, primaryIcon, badgeIcon, splashIcon, name, shortName,
displayMode, orientation, source, themeColor, backgroundColor, displayMode, orientation, source, themeColor, backgroundColor,
defaultBackgroundColor, isPrimaryIconMaskable, webApkPackageName, shellApkVersion, defaultBackgroundColor, isPrimaryIconMaskable, webApkPackageName, shellApkVersion,
manifestUrl, manifestStartUrl, distributor, iconUrlToMurmur2HashMap, shareTarget, manifestUrl, manifestStartUrl, distributor, iconUrlToMurmur2HashMap, shareTarget,
...@@ -438,7 +435,7 @@ public class WebApkInfo extends WebappInfo { ...@@ -438,7 +435,7 @@ public class WebApkInfo extends WebappInfo {
webApkVersionCode); webApkVersionCode);
} }
protected WebApkInfo(String id, String url, String scope, Icon primaryIcon, Icon badgeIcon, protected WebApkInfo(String url, String scope, Icon primaryIcon, Icon badgeIcon,
Icon splashIcon, String name, String shortName, @WebDisplayMode int displayMode, Icon splashIcon, String name, String shortName, @WebDisplayMode int displayMode,
int orientation, int source, long themeColor, long backgroundColor, int orientation, int source, long themeColor, long backgroundColor,
int defaultBackgroundColor, boolean isPrimaryIconMaskable, String webApkPackageName, int defaultBackgroundColor, boolean isPrimaryIconMaskable, String webApkPackageName,
...@@ -446,8 +443,9 @@ public class WebApkInfo extends WebappInfo { ...@@ -446,8 +443,9 @@ public class WebApkInfo extends WebappInfo {
@WebApkDistributor int distributor, Map<String, String> iconUrlToMurmur2HashMap, @WebApkDistributor int distributor, Map<String, String> iconUrlToMurmur2HashMap,
ShareTarget shareTarget, String shareTargetActivityName, boolean forceNavigation, ShareTarget shareTarget, String shareTargetActivityName, boolean forceNavigation,
boolean isSplashProvidedByWebApk, ShareData shareData, int webApkVersionCode) { boolean isSplashProvidedByWebApk, ShareData shareData, int webApkVersionCode) {
super(id, url, scope, primaryIcon, name, shortName, displayMode, orientation, source, super(WebApkConstants.WEBAPK_ID_PREFIX + webApkPackageName, url, scope, primaryIcon, name,
themeColor, backgroundColor, defaultBackgroundColor, false /* isIconGenerated */, shortName, displayMode, orientation, source, themeColor, backgroundColor,
defaultBackgroundColor, false /* isIconGenerated */,
isPrimaryIconMaskable /* isIconAdaptive */, forceNavigation); isPrimaryIconMaskable /* isIconAdaptive */, forceNavigation);
mBadgeIcon = badgeIcon; mBadgeIcon = badgeIcon;
mSplashIcon = splashIcon; mSplashIcon = splashIcon;
......
...@@ -127,7 +127,7 @@ public class WebApkUpdateDataFetcher extends EmptyTabObserver { ...@@ -127,7 +127,7 @@ public class WebApkUpdateDataFetcher extends EmptyTabObserver {
shareParamsFileNames, shareParamsAccepts); shareParamsFileNames, shareParamsAccepts);
int defaultBackgroundColor = SplashLayout.getDefaultBackgroundColor(appContext); int defaultBackgroundColor = SplashLayout.getDefaultBackgroundColor(appContext);
WebApkInfo info = WebApkInfo.create(mOldInfo.id(), mOldInfo.url(), scopeUrl, WebApkInfo info = WebApkInfo.create(mOldInfo.url(), scopeUrl,
new WebApkInfo.Icon(primaryIconBitmap), new WebApkInfo.Icon(badgeIconBitmap), null, new WebApkInfo.Icon(primaryIconBitmap), new WebApkInfo.Icon(badgeIconBitmap), null,
name, shortName, displayMode, orientation, mOldInfo.source(), themeColor, name, shortName, displayMode, orientation, mOldInfo.source(), themeColor,
backgroundColor, defaultBackgroundColor, isPrimaryIconMaskable, backgroundColor, defaultBackgroundColor, isPrimaryIconMaskable,
......
...@@ -112,6 +112,10 @@ public class WebappInfo { ...@@ -112,6 +112,10 @@ public class WebappInfo {
public static WebappInfo create(Intent intent) { public static WebappInfo create(Intent intent) {
String id = idFromIntent(intent); String id = idFromIntent(intent);
String url = urlFromIntent(intent); String url = urlFromIntent(intent);
if (id == null || url == null) {
Log.e(TAG, "Incomplete data provided: " + id + ", " + url);
return null;
}
String icon = IntentUtils.safeGetStringExtra(intent, ShortcutHelper.EXTRA_ICON); String icon = IntentUtils.safeGetStringExtra(intent, ShortcutHelper.EXTRA_ICON);
String scope = IntentUtils.safeGetStringExtra(intent, ShortcutHelper.EXTRA_SCOPE); String scope = IntentUtils.safeGetStringExtra(intent, ShortcutHelper.EXTRA_SCOPE);
...@@ -137,9 +141,11 @@ public class WebappInfo { ...@@ -137,9 +141,11 @@ public class WebappInfo {
String name = nameFromIntent(intent); String name = nameFromIntent(intent);
String shortName = shortNameFromIntent(intent); String shortName = shortNameFromIntent(intent);
return create(id, url, scope, new Icon(icon), name, shortName, displayMode, orientation, int defaultBackgroundColor =
source, themeColor, backgroundColor, isIconGenerated, isIconAdaptive, SplashLayout.getDefaultBackgroundColor(ContextUtils.getApplicationContext());
forceNavigation); return new WebappInfo(id, url, scope, new Icon(icon), name, shortName, displayMode,
orientation, source, themeColor, backgroundColor, defaultBackgroundColor,
isIconGenerated, isIconAdaptive, forceNavigation);
} }
/** /**
...@@ -160,22 +166,6 @@ public class WebappInfo { ...@@ -160,22 +166,6 @@ public class WebappInfo {
* @param forceNavigation Whether the webapp should navigate to {@link url} if the * @param forceNavigation Whether the webapp should navigate to {@link url} if the
* webapp is already open. * webapp is already open.
*/ */
public static WebappInfo create(String id, String url, String scope, Icon icon, String name,
String shortName, @WebDisplayMode int displayMode, int orientation, int source,
long themeColor, long backgroundColor, boolean isIconGenerated, boolean isIconAdaptive,
boolean forceNavigation) {
if (id == null || url == null) {
Log.e(TAG, "Incomplete data provided: " + id + ", " + url);
return null;
}
int defaultBackgroundColor =
SplashLayout.getDefaultBackgroundColor(ContextUtils.getApplicationContext());
return new WebappInfo(id, url, scope, icon, name, shortName, displayMode, orientation,
source, themeColor, backgroundColor, defaultBackgroundColor, isIconGenerated,
isIconAdaptive, forceNavigation);
}
protected WebappInfo(String id, String url, String scope, Icon icon, String name, protected WebappInfo(String id, String url, String scope, Icon icon, String name,
String shortName, @WebDisplayMode int displayMode, int orientation, int source, String shortName, @WebDisplayMode int displayMode, int orientation, int source,
long themeColor, long backgroundColor, int defaultBackgroundColor, long themeColor, long backgroundColor, int defaultBackgroundColor,
......
...@@ -20,6 +20,8 @@ import android.support.test.InstrumentationRegistry; ...@@ -20,6 +20,8 @@ import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest; import android.support.test.filters.SmallTest;
import android.test.mock.MockPackageManager; import android.test.mock.MockPackageManager;
import androidx.browser.customtabs.CustomTabsIntent;
import org.junit.After; import org.junit.After;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
...@@ -31,9 +33,9 @@ import org.chromium.base.ContextUtils; ...@@ -31,9 +33,9 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.DisableIf; import org.chromium.base.test.util.DisableIf;
import org.chromium.blink_public.platform.WebDisplayMode;
import org.chromium.chrome.browser.ChromeFeatureList; import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.IntentHandler;
import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider; import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider;
import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.OverrideUrlLoadingResult; import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.OverrideUrlLoadingResult;
import org.chromium.chrome.browser.instantapps.InstantAppsHandler; import org.chromium.chrome.browser.instantapps.InstantAppsHandler;
...@@ -41,6 +43,7 @@ import org.chromium.chrome.browser.tab.Tab; ...@@ -41,6 +43,7 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabRedirectHandler; import org.chromium.chrome.browser.tab.TabRedirectHandler;
import org.chromium.chrome.browser.webapps.WebappInfo; import org.chromium.chrome.browser.webapps.WebappInfo;
import org.chromium.chrome.browser.webapps.WebappScopePolicy; import org.chromium.chrome.browser.webapps.WebappScopePolicy;
import org.chromium.chrome.test.util.browser.WebappTestHelper;
import org.chromium.content_public.browser.test.NativeLibraryTestRule; import org.chromium.content_public.browser.test.NativeLibraryTestRule;
import org.chromium.ui.base.PageTransition; import org.chromium.ui.base.PageTransition;
import org.chromium.webapk.lib.common.WebApkConstants; import org.chromium.webapk.lib.common.WebApkConstants;
...@@ -51,8 +54,6 @@ import java.util.HashMap; ...@@ -51,8 +54,6 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import androidx.browser.customtabs.CustomTabsIntent;
/** /**
* Instrumentation tests for {@link ExternalNavigationHandler}. * Instrumentation tests for {@link ExternalNavigationHandler}.
*/ */
...@@ -1566,8 +1567,9 @@ public class ExternalNavigationHandlerTest { ...@@ -1566,8 +1567,9 @@ public class ExternalNavigationHandlerTest {
} }
private static WebappInfo newWebappInfoFromScope(String scope) { private static WebappInfo newWebappInfoFromScope(String scope) {
return WebappInfo.create("", "", scope, null, null, null, WebDisplayMode.STANDALONE, 0, 0, Intent webappIntent = WebappTestHelper.createMinimalWebappIntent("" /* id */, "" /* url */);
0, 0, false, false, false); webappIntent.putExtra(ShortcutHelper.EXTRA_SCOPE, scope);
return WebappInfo.create(webappIntent);
} }
private static class IntentActivity { private static class IntentActivity {
......
...@@ -21,13 +21,10 @@ import org.chromium.base.ContextUtils; ...@@ -21,13 +21,10 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.metrics.RecordHistogram; import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Feature;
import org.chromium.blink_public.platform.WebDisplayMode;
import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.DeferredStartupHandler; import org.chromium.chrome.browser.DeferredStartupHandler;
import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.ShortcutSource;
import org.chromium.chrome.browser.customtabs.CustomTabActivity; import org.chromium.chrome.browser.customtabs.CustomTabActivity;
import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider; import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider;
import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid; import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid;
...@@ -37,11 +34,11 @@ import org.chromium.chrome.browser.util.IntentUtils; ...@@ -37,11 +34,11 @@ import org.chromium.chrome.browser.util.IntentUtils;
import org.chromium.chrome.test.ChromeActivityTestRule; import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.ChromeTabUtils;
import org.chromium.chrome.test.util.browser.WebApkInfoBuilder;
import org.chromium.content_public.browser.test.NativeLibraryTestRule; import org.chromium.content_public.browser.test.NativeLibraryTestRule;
import org.chromium.content_public.browser.test.util.Criteria; 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.CriteriaHelper;
import org.chromium.content_public.browser.test.util.JavaScriptUtils; import org.chromium.content_public.browser.test.util.JavaScriptUtils;
import org.chromium.content_public.common.ScreenOrientationValues;
import org.chromium.webapk.lib.common.WebApkConstants; import org.chromium.webapk.lib.common.WebApkConstants;
/** Tests for WebApkActivity. */ /** Tests for WebApkActivity. */
...@@ -230,16 +227,10 @@ public final class WebApkActivityTest { ...@@ -230,16 +227,10 @@ public final class WebApkActivityTest {
} }
private WebApkInfo createWebApkInfo(String startUrl, String scopeUrl) { private WebApkInfo createWebApkInfo(String startUrl, String scopeUrl) {
return WebApkInfo.create(TEST_WEBAPK_ID, startUrl, scopeUrl, null /* primaryIcon */, WebApkInfoBuilder webApkInfoBuilder =
null /* badgeIcon */, null /* splashIcon */, "" /* name */, "" /* short_name */, new WebApkInfoBuilder(TEST_WEBAPK_PACKAGE_NAME, startUrl);
WebDisplayMode.STANDALONE, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN, webApkInfoBuilder.setScope(scopeUrl);
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING /* themeColor */, return webApkInfoBuilder.build();
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING /* backgroundColor */,
0 /* defaultBackgroundColor */, false /* isPrimaryIconMaskable */,
TEST_WEBAPK_PACKAGE_NAME, 10 /* packageVersion */, "" /* manifestURL */,
"" /* manifestStartURL */, WebApkInfo.WebApkDistributor.BROWSER, null, null,
null /*shareTargetActivityName*/, false /* forceNavigation */,
false /* isSplashProvidedByWebApk */, null /* shareData */, 1 /* apkVersionCode */);
} }
private String getTestServerUrl(String relativeUrl) { private String getTestServerUrl(String relativeUrl) {
......
...@@ -22,12 +22,11 @@ import org.chromium.chrome.browser.ShortcutHelper; ...@@ -22,12 +22,11 @@ import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule; import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
import org.chromium.chrome.test.util.browser.WebApkInfoBuilder;
import org.chromium.chrome.test.util.browser.WebappTestPage; import org.chromium.chrome.test.util.browser.WebappTestPage;
import org.chromium.content_public.browser.UiThreadTaskTraits; import org.chromium.content_public.browser.UiThreadTaskTraits;
import org.chromium.net.test.EmbeddedTestServerRule; import org.chromium.net.test.EmbeddedTestServerRule;
import java.util.HashMap;
/** /**
* Tests the WebApkUpdateDataFetcher. * Tests the WebApkUpdateDataFetcher.
*/ */
...@@ -112,13 +111,11 @@ public class WebApkUpdateDataFetcherTest { ...@@ -112,13 +111,11 @@ public class WebApkUpdateDataFetcherTest {
final String manifestUrl, final WebApkUpdateDataFetcher.Observer observer) { final String manifestUrl, final WebApkUpdateDataFetcher.Observer observer) {
final WebApkUpdateDataFetcher fetcher = new WebApkUpdateDataFetcher(); final WebApkUpdateDataFetcher fetcher = new WebApkUpdateDataFetcher();
PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> { PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
WebApkInfo oldInfo = WebApkInfo.create("", "", scopeUrl, null, null, null, null, null, WebApkInfoBuilder oldWebApkInfoBuilder =
-1, -1, -1, -1, -1, -1, false, "random.package", -1, manifestUrl, "", new WebApkInfoBuilder("random.package", "" /* url */);
WebApkInfo.WebApkDistributor.BROWSER, new HashMap<String, String>(), null, oldWebApkInfoBuilder.setScope(scopeUrl);
null /*shareTargetActivityName*/, false /* forceNavigation */, oldWebApkInfoBuilder.setManifestUrl(manifestUrl);
false /* isSplashProvidedByWebApk */, null /* shareData */, fetcher.start(mTab, oldWebApkInfoBuilder.build(), observer);
1 /* webApkVersionCode */);
fetcher.start(mTab, oldInfo, observer);
}); });
} }
......
...@@ -158,7 +158,7 @@ public class WebApkUpdateManagerTest { ...@@ -158,7 +158,7 @@ public class WebApkUpdateManagerTest {
final TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(waiter, storage); final TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(waiter, storage);
TestThreadUtils.runOnUiThreadBlocking(() -> { TestThreadUtils.runOnUiThreadBlocking(() -> {
WebApkInfo info = WebApkInfo.create(WEBAPK_ID, "", creationData.scope, null, null, null, WebApkInfo info = WebApkInfo.create("", creationData.scope, null, null, null,
creationData.name, creationData.shortName, creationData.displayMode, creationData.name, creationData.shortName, creationData.displayMode,
creationData.orientation, 0, creationData.themeColor, creationData.orientation, 0, creationData.themeColor,
creationData.backgroundColor, 0, creationData.isPrimaryIconMaskable, "", creationData.backgroundColor, 0, creationData.isPrimaryIconMaskable, "",
......
...@@ -26,21 +26,19 @@ import org.chromium.base.test.util.Feature; ...@@ -26,21 +26,19 @@ import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.RetryOnFailure; import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.base.test.util.ScalableTimeout; import org.chromium.base.test.util.ScalableTimeout;
import org.chromium.base.test.util.UrlUtils; import org.chromium.base.test.util.UrlUtils;
import org.chromium.blink_public.platform.WebDisplayMode;
import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.DeferredStartupHandler; import org.chromium.chrome.browser.DeferredStartupHandler;
import org.chromium.chrome.browser.ShortcutHelper; import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.ShortcutSource;
import org.chromium.chrome.browser.tab.TabIdManager; import org.chromium.chrome.browser.tab.TabIdManager;
import org.chromium.chrome.browser.util.IntentUtils; import org.chromium.chrome.browser.util.IntentUtils;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.MultiActivityTestRule; import org.chromium.chrome.test.MultiActivityTestRule;
import org.chromium.chrome.test.util.ApplicationTestUtils; import org.chromium.chrome.test.util.ApplicationTestUtils;
import org.chromium.chrome.test.util.browser.WebappTestHelper;
import org.chromium.content_public.browser.test.util.Criteria; 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.CriteriaHelper;
import org.chromium.content_public.common.ScreenOrientationValues;
/** /**
* Tests that WebappActivities are launched correctly. * Tests that WebappActivities are launched correctly.
...@@ -75,7 +73,7 @@ public class WebappModeTest { ...@@ -75,7 +73,7 @@ public class WebappModeTest {
+ "ggR0lNUFeBDhcAAAAMSURBVAjXY2AUawEAALcAnI/TkI8AAAAASUVORK5CYII="; + "ggR0lNUFeBDhcAAAAMSURBVAjXY2AUawEAALcAnI/TkI8AAAAASUVORK5CYII=";
private Intent createIntent(String id, String url, String title, String icon, boolean addMac) { private Intent createIntent(String id, String url, String title, String icon, boolean addMac) {
Intent intent = new Intent(); Intent intent = WebappTestHelper.createMinimalWebappIntent(id, url);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setPackage(InstrumentationRegistry.getTargetContext().getPackageName()); intent.setPackage(InstrumentationRegistry.getTargetContext().getPackageName());
intent.setAction(WebappLauncherActivity.ACTION_START_WEBAPP); intent.setAction(WebappLauncherActivity.ACTION_START_WEBAPP);
...@@ -86,13 +84,8 @@ public class WebappModeTest { ...@@ -86,13 +84,8 @@ public class WebappModeTest {
intent.putExtra(ShortcutHelper.EXTRA_MAC, mac); intent.putExtra(ShortcutHelper.EXTRA_MAC, mac);
} }
WebappInfo webappInfo = WebappInfo.create(id, url, null, new WebappInfo.Icon(icon), title, intent.putExtra(ShortcutHelper.EXTRA_ICON, icon);
null, WebDisplayMode.STANDALONE, ScreenOrientationValues.PORTRAIT, intent.putExtra(ShortcutHelper.EXTRA_NAME, title);
ShortcutSource.UNKNOWN, ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, false /* isIconGenerated */,
false /* isIconAdaptive */, false /* forceNavigation */);
webappInfo.setWebappIntentExtras(intent);
return intent; return intent;
} }
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.webapps; package org.chromium.chrome.browser.webapps;
import android.content.Intent;
import android.support.test.filters.MediumTest; import android.support.test.filters.MediumTest;
import android.support.test.rule.UiThreadTestRule; import android.support.test.rule.UiThreadTestRule;
...@@ -16,6 +17,9 @@ import org.junit.runner.RunWith; ...@@ -16,6 +17,9 @@ import org.junit.runner.RunWith;
import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Feature; import org.chromium.base.test.util.Feature;
import org.chromium.blink_public.platform.WebDisplayMode; import org.chromium.blink_public.platform.WebDisplayMode;
import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.test.util.browser.WebApkInfoBuilder;
import org.chromium.chrome.test.util.browser.WebappTestHelper;
import org.chromium.components.security_state.ConnectionSecurityLevel; import org.chromium.components.security_state.ConnectionSecurityLevel;
import org.chromium.content_public.browser.test.NativeLibraryTestRule; import org.chromium.content_public.browser.test.NativeLibraryTestRule;
...@@ -128,17 +132,15 @@ public class WebappVisibilityTest { ...@@ -128,17 +132,15 @@ public class WebappVisibilityTest {
private static WebappInfo createWebappInfo(String webappStartUrlOrScopeUrl, private static WebappInfo createWebappInfo(String webappStartUrlOrScopeUrl,
@WebappScopePolicy.Type int scopePolicy, @WebDisplayMode int displayMode) { @WebappScopePolicy.Type int scopePolicy, @WebDisplayMode int displayMode) {
return scopePolicy == WebappScopePolicy.Type.LEGACY if (scopePolicy == WebappScopePolicy.Type.LEGACY) {
? WebappInfo.create("", webappStartUrlOrScopeUrl, null, null, null, null, Intent webappIntent = WebappTestHelper.createMinimalWebappIntent(
displayMode, 0, 0, 0, 0, false /* isIconGenerated */, "" /* id */, webappStartUrlOrScopeUrl);
false /* isIconAdaptive */, false /* forceNavigation */) webappIntent.putExtra(ShortcutHelper.EXTRA_DISPLAY_MODE, displayMode);
: WebApkInfo.create( return WebappInfo.create(webappIntent);
"", "", webappStartUrlOrScopeUrl, null, null, null, null, null, displayMode, }
0, 0, 0, 0, 0, false, "", 0, null, "", WebApkInfo.WebApkDistributor.BROWSER, WebApkInfoBuilder webApkInfoBuilder = new WebApkInfoBuilder("random.package", "" /* url */);
null, null, null /*shareTargetActivityName*/, false /* forceNavigation */, webApkInfoBuilder.setScope(webappStartUrlOrScopeUrl);
false /* isSplashProvidedByWebApk */, null /* shareData */, webApkInfoBuilder.setDisplayMode(displayMode);
1 /* webApkVersionCode */ return webApkInfoBuilder.build();
);
} }
} }
...@@ -358,7 +358,7 @@ public class WebApkUpdateManagerUnitTest { ...@@ -358,7 +358,7 @@ public class WebApkUpdateManagerUnitTest {
if (manifestData == null) return null; if (manifestData == null) return null;
final String kPackageName = "org.random.webapk"; final String kPackageName = "org.random.webapk";
return WebApkInfo.create(getWebApkId(kPackageName), "", manifestData.scopeUrl, return WebApkInfo.create("", manifestData.scopeUrl,
new WebApkInfo.Icon(manifestData.primaryIcon), new WebApkInfo.Icon(manifestData.primaryIcon),
new WebApkInfo.Icon(manifestData.badgeIcon), null, manifestData.name, new WebApkInfo.Icon(manifestData.badgeIcon), null, manifestData.name,
manifestData.shortName, manifestData.displayMode, manifestData.orientation, -1, manifestData.shortName, manifestData.displayMode, manifestData.orientation, -1,
......
...@@ -15,6 +15,7 @@ import org.chromium.base.test.BaseRobolectricTestRunner; ...@@ -15,6 +15,7 @@ import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.blink_public.platform.WebDisplayMode; import org.chromium.blink_public.platform.WebDisplayMode;
import org.chromium.chrome.browser.ShortcutHelper; import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.ShortcutSource; import org.chromium.chrome.browser.ShortcutSource;
import org.chromium.chrome.test.util.browser.WebappTestHelper;
import org.chromium.content_public.common.ScreenOrientationValues; import org.chromium.content_public.common.ScreenOrientationValues;
/** /**
...@@ -30,11 +31,10 @@ public class WebappInfoTest { ...@@ -30,11 +31,10 @@ public class WebappInfoTest {
String shortName = "name"; String shortName = "name";
String url = "about:blank"; String url = "about:blank";
WebappInfo info = WebappInfo.create(id, url, null, null, name, shortName, Intent intent = WebappTestHelper.createMinimalWebappIntent(id, url);
WebDisplayMode.STANDALONE, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN, intent.putExtra(ShortcutHelper.EXTRA_NAME, name);
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, intent.putExtra(ShortcutHelper.EXTRA_SHORT_NAME, shortName);
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, false /* isIconGenerated */, WebappInfo info = WebappInfo.create(intent);
false /* isIconAdaptive */, false /* forceNavigation */);
Assert.assertNotNull(info); Assert.assertNotNull(info);
} }
...@@ -45,11 +45,10 @@ public class WebappInfoTest { ...@@ -45,11 +45,10 @@ public class WebappInfoTest {
String shortName = "name"; String shortName = "name";
String url = "http://google.com"; String url = "http://google.com";
WebappInfo info = WebappInfo.create(id, url, null, null, name, shortName, Intent intent = WebappTestHelper.createMinimalWebappIntent(id, url);
WebDisplayMode.STANDALONE, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN, intent.putExtra(ShortcutHelper.EXTRA_NAME, name);
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, intent.putExtra(ShortcutHelper.EXTRA_SHORT_NAME, shortName);
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, false /* isIconGenerated */, WebappInfo info = WebappInfo.create(intent);
false /* isIconAdaptive */, false /* forceNavigation */);
Assert.assertNotNull(info); Assert.assertNotNull(info);
} }
...@@ -124,16 +123,16 @@ public class WebappInfoTest { ...@@ -124,16 +123,16 @@ public class WebappInfoTest {
@Test @Test
public void testDisplayModeAndOrientationAndSource() { public void testDisplayModeAndOrientationAndSource() {
String id = "webapp id";
String name = "longName"; String name = "longName";
String shortName = "name"; String shortName = "name";
String url = "http://money.cnn.com";
WebappInfo info = WebappInfo.create(id, url, null, null, name, shortName, Intent intent = createIntentWithUrlAndId();
WebDisplayMode.FULLSCREEN, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN, intent.putExtra(ShortcutHelper.EXTRA_NAME, name);
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, intent.putExtra(ShortcutHelper.EXTRA_SHORT_NAME, shortName);
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, false /* isIconGenerated */, intent.putExtra(ShortcutHelper.EXTRA_DISPLAY_MODE, WebDisplayMode.FULLSCREEN);
false /* isIconAdaptive */, false /* forceNavigation */); intent.putExtra(ShortcutHelper.EXTRA_ORIENTATION, ScreenOrientationValues.DEFAULT);
intent.putExtra(ShortcutHelper.EXTRA_SOURCE, ShortcutSource.UNKNOWN);
WebappInfo info = WebappInfo.create(intent);
Assert.assertEquals(WebDisplayMode.FULLSCREEN, info.displayMode()); Assert.assertEquals(WebDisplayMode.FULLSCREEN, info.displayMode());
Assert.assertEquals(ScreenOrientationValues.DEFAULT, info.orientation()); Assert.assertEquals(ScreenOrientationValues.DEFAULT, info.orientation());
Assert.assertEquals(ShortcutSource.UNKNOWN, info.source()); Assert.assertEquals(ShortcutSource.UNKNOWN, info.source());
...@@ -141,33 +140,30 @@ public class WebappInfoTest { ...@@ -141,33 +140,30 @@ public class WebappInfoTest {
@Test @Test
public void testNormalColors() { public void testNormalColors() {
String id = "webapp id";
String name = "longName"; String name = "longName";
String shortName = "name"; String shortName = "name";
String url = "http://money.cnn.com";
long themeColor = 0xFF00FF00L; long themeColor = 0xFF00FF00L;
long backgroundColor = 0xFF0000FFL; long backgroundColor = 0xFF0000FFL;
WebappInfo info = WebappInfo.create(id, url, null, null, name, shortName, Intent intent = createIntentWithUrlAndId();
WebDisplayMode.STANDALONE, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN, intent.putExtra(ShortcutHelper.EXTRA_NAME, name);
themeColor, backgroundColor, false /* isIconGenerated */, intent.putExtra(ShortcutHelper.EXTRA_SHORT_NAME, shortName);
false /* isIconAdaptive */, false /* forceNavigation */); intent.putExtra(ShortcutHelper.EXTRA_THEME_COLOR, themeColor);
intent.putExtra(ShortcutHelper.EXTRA_BACKGROUND_COLOR, backgroundColor);
WebappInfo info = WebappInfo.create(intent);
Assert.assertEquals(themeColor, info.themeColor()); Assert.assertEquals(themeColor, info.themeColor());
Assert.assertEquals(backgroundColor, info.backgroundColor()); Assert.assertEquals(backgroundColor, info.backgroundColor());
} }
@Test @Test
public void testInvalidOrMissingColors() { public void testInvalidOrMissingColors() {
String id = "webapp id";
String name = "longName"; String name = "longName";
String shortName = "name"; String shortName = "name";
String url = "http://money.cnn.com";
WebappInfo info = WebappInfo.create(id, url, null, null, name, shortName, Intent intent = createIntentWithUrlAndId();
WebDisplayMode.STANDALONE, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN, intent.putExtra(ShortcutHelper.EXTRA_NAME, name);
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, intent.putExtra(ShortcutHelper.EXTRA_SHORT_NAME, shortName);
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, false /* isIconGenerated */, WebappInfo info = WebappInfo.create(intent);
false /* isIconAdaptive */, false /* forceNavigation */);
Assert.assertEquals(ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, info.themeColor()); Assert.assertEquals(ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, info.themeColor());
Assert.assertEquals( Assert.assertEquals(
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, info.backgroundColor()); ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, info.backgroundColor());
...@@ -337,9 +333,7 @@ public class WebappInfoTest { ...@@ -337,9 +333,7 @@ public class WebappInfoTest {
*/ */
@Test @Test
public void testForceNavigationNotSpecified() { public void testForceNavigationNotSpecified() {
Intent intent = new Intent(); Intent intent = createIntentWithUrlAndId();
intent.putExtra(ShortcutHelper.EXTRA_ID, "webapp_id");
intent.putExtra(ShortcutHelper.EXTRA_URL, "about:blank");
Assert.assertFalse(WebappInfo.create(intent).shouldForceNavigation()); Assert.assertFalse(WebappInfo.create(intent).shouldForceNavigation());
} }
......
...@@ -39,6 +39,9 @@ void JNI_WebApkUkmRecorder_RecordSessionDuration( ...@@ -39,6 +39,9 @@ void JNI_WebApkUkmRecorder_RecordSessionDuration(
jint distributor, jint distributor,
jint version_code, jint version_code,
jlong duration) { jlong duration) {
if (!manifest_url)
return;
WebApkUkmRecorder::RecordSessionDuration( WebApkUkmRecorder::RecordSessionDuration(
GURL(base::android::ConvertJavaStringToUTF8(env, manifest_url)), GURL(base::android::ConvertJavaStringToUTF8(env, manifest_url)),
distributor, version_code, duration); distributor, version_code, duration);
......
...@@ -132,7 +132,9 @@ android_library("chrome_java_test_support") { ...@@ -132,7 +132,9 @@ android_library("chrome_java_test_support") {
"javatests/src/org/chromium/chrome/test/util/browser/tabmodel/MockTabModel.java", "javatests/src/org/chromium/chrome/test/util/browser/tabmodel/MockTabModel.java",
"javatests/src/org/chromium/chrome/test/util/browser/tabmodel/MockTabModelSelector.java", "javatests/src/org/chromium/chrome/test/util/browser/tabmodel/MockTabModelSelector.java",
"javatests/src/org/chromium/chrome/test/util/browser/TabTitleObserver.java", "javatests/src/org/chromium/chrome/test/util/browser/TabTitleObserver.java",
"javatests/src/org/chromium/chrome/test/util/browser/WebApkInfoBuilder.java",
"javatests/src/org/chromium/chrome/test/util/browser/WebappTestPage.java", "javatests/src/org/chromium/chrome/test/util/browser/WebappTestPage.java",
"javatests/src/org/chromium/chrome/test/util/browser/WebappTestHelper.java",
"javatests/src/org/chromium/chrome/test/util/ChromeRestriction.java", "javatests/src/org/chromium/chrome/test/util/ChromeRestriction.java",
"javatests/src/org/chromium/chrome/test/util/ChromeSigninUtils.java", "javatests/src/org/chromium/chrome/test/util/ChromeSigninUtils.java",
"javatests/src/org/chromium/chrome/test/util/ChromeTabUtils.java", "javatests/src/org/chromium/chrome/test/util/ChromeTabUtils.java",
...@@ -182,6 +184,7 @@ android_library("chrome_java_test_support") { ...@@ -182,6 +184,7 @@ android_library("chrome_java_test_support") {
"//third_party/android_sdk:android_test_base_java", "//third_party/android_sdk:android_test_base_java",
"//third_party/android_support_test_runner:rules_java", "//third_party/android_support_test_runner:rules_java",
"//third_party/android_support_test_runner:runner_java", "//third_party/android_support_test_runner:runner_java",
"//third_party/blink/public:blink_headers_java",
"//third_party/hamcrest:hamcrest_core_java", "//third_party/hamcrest:hamcrest_core_java",
"//third_party/jsr-305:jsr_305_javalib", "//third_party/jsr-305:jsr_305_javalib",
"//third_party/junit", "//third_party/junit",
......
// 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.test.util.browser;
import android.graphics.Color;
import org.chromium.blink_public.platform.WebDisplayMode;
import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.ShortcutSource;
import org.chromium.chrome.browser.webapps.WebApkInfo;
import org.chromium.chrome.browser.webapps.WebApkInfo.WebApkDistributor;
import org.chromium.content_public.common.ScreenOrientationValues;
import java.util.HashMap;
/** Builder class for {@link WebApkInfo} objects. */
public class WebApkInfoBuilder {
private String mWebApkPackageName;
private String mUrl;
private String mScope;
private @WebDisplayMode int mDisplayMode = WebDisplayMode.STANDALONE;
private String mManifestUrl;
public WebApkInfoBuilder(String webApkPackageName, String url) {
mWebApkPackageName = webApkPackageName;
mUrl = url;
}
public void setScope(String scope) {
mScope = scope;
}
public void setDisplayMode(@WebDisplayMode int displayMode) {
mDisplayMode = displayMode;
}
public void setManifestUrl(String manifestUrl) {
mManifestUrl = manifestUrl;
}
/**
* Builds {@link WebApkInfo} object using options that have been set.
*/
public WebApkInfo build() {
return WebApkInfo.create(mUrl, mScope, null, null, null, null, null, mDisplayMode,
ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, Color.WHITE,
false /* isPrimaryIconMaskable */, mWebApkPackageName, /* shellApkVersion */ 1,
mManifestUrl, mUrl, WebApkDistributor.BROWSER,
new HashMap<String, String>() /* iconUrlToMurmur2HashMap */, null, null,
false /* forceNavigation */, false /* isSplashProvidedByWebApk */, null,
1 /* webApkVersionCode */);
}
}
// 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.test.util.browser;
import android.content.Intent;
import org.chromium.chrome.browser.ShortcutHelper;
/** Helper class for webapp tests. */
public class WebappTestHelper {
/**
* Returns simplest intent which builds valid WebappInfo via {@link WebappInfo#create()}.
*/
public static Intent createMinimalWebappIntent(String id, String url) {
Intent intent = new Intent();
intent.putExtra(ShortcutHelper.EXTRA_ID, id);
intent.putExtra(ShortcutHelper.EXTRA_URL, url);
return intent;
}
}
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