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 {
(canUseSplashFromContentProvider && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
&& hasContentProviderForSplash(webApkPackageName));
return create(WebApkConstants.WEBAPK_ID_PREFIX + webApkPackageName, url, scope,
new Icon(primaryIcon), new Icon(badgeIcon), new Icon(splashIcon), name, shortName,
displayMode, orientation, source, themeColor, backgroundColor,
return create(url, scope, new Icon(primaryIcon), new Icon(badgeIcon), new Icon(splashIcon),
name, shortName, displayMode, orientation, source, themeColor, backgroundColor,
defaultBackgroundColor, isPrimaryIconMaskable, webApkPackageName, shellApkVersion,
manifestUrl, manifestStartUrl, distributor, iconUrlToMurmur2HashMap, shareTarget,
shareTargetActivityName, forceNavigation, isSplashProvidedByWebApk, shareData,
......@@ -371,7 +370,6 @@ public class WebApkInfo extends WebappInfo {
/**
* Construct a {@link WebApkInfo} instance.
* @param id ID for the WebAPK.
* @param url URL that the WebAPK should navigate to when launched.
* @param scope Scope for the WebAPK.
* @param primaryIcon Primary icon to show for the WebAPK.
......@@ -407,18 +405,17 @@ public class WebApkInfo extends WebappInfo {
* @param shareData Shared information from the share intent.
* @param webApkVersionCode WebAPK's version code.
*/
public static WebApkInfo create(String id, String url, String scope, Icon primaryIcon,
Icon badgeIcon, Icon splashIcon, String name, String shortName,
@WebDisplayMode int displayMode, int orientation, int source, long themeColor,
long backgroundColor, int defaultBackgroundColor, boolean isPrimaryIconMaskable,
String webApkPackageName, int shellApkVersion, String manifestUrl,
String manifestStartUrl, @WebApkDistributor int distributor,
Map<String, String> iconUrlToMurmur2HashMap, ShareTarget shareTarget,
String shareTargetActivityName, boolean forceNavigation,
public static WebApkInfo create(String url, String scope, Icon primaryIcon, Icon badgeIcon,
Icon splashIcon, String name, String shortName, @WebDisplayMode int displayMode,
int orientation, int source, long themeColor, long backgroundColor,
int defaultBackgroundColor, boolean isPrimaryIconMaskable, String webApkPackageName,
int shellApkVersion, String manifestUrl, String manifestStartUrl,
@WebApkDistributor int distributor, Map<String, String> iconUrlToMurmur2HashMap,
ShareTarget shareTarget, String shareTargetActivityName, boolean forceNavigation,
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,
"Incomplete data provided: " + id + ", " + url + ", " + manifestStartUrl + ", "
"Incomplete data provided: " + url + ", " + manifestStartUrl + ", "
+ webApkPackageName);
return null;
}
......@@ -430,7 +427,7 @@ public class WebApkInfo extends WebappInfo {
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,
defaultBackgroundColor, isPrimaryIconMaskable, webApkPackageName, shellApkVersion,
manifestUrl, manifestStartUrl, distributor, iconUrlToMurmur2HashMap, shareTarget,
......@@ -438,7 +435,7 @@ public class WebApkInfo extends WebappInfo {
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,
int orientation, int source, long themeColor, long backgroundColor,
int defaultBackgroundColor, boolean isPrimaryIconMaskable, String webApkPackageName,
......@@ -446,8 +443,9 @@ public class WebApkInfo extends WebappInfo {
@WebApkDistributor int distributor, Map<String, String> iconUrlToMurmur2HashMap,
ShareTarget shareTarget, String shareTargetActivityName, boolean forceNavigation,
boolean isSplashProvidedByWebApk, ShareData shareData, int webApkVersionCode) {
super(id, url, scope, primaryIcon, name, shortName, displayMode, orientation, source,
themeColor, backgroundColor, defaultBackgroundColor, false /* isIconGenerated */,
super(WebApkConstants.WEBAPK_ID_PREFIX + webApkPackageName, url, scope, primaryIcon, name,
shortName, displayMode, orientation, source, themeColor, backgroundColor,
defaultBackgroundColor, false /* isIconGenerated */,
isPrimaryIconMaskable /* isIconAdaptive */, forceNavigation);
mBadgeIcon = badgeIcon;
mSplashIcon = splashIcon;
......
......@@ -127,7 +127,7 @@ public class WebApkUpdateDataFetcher extends EmptyTabObserver {
shareParamsFileNames, shareParamsAccepts);
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,
name, shortName, displayMode, orientation, mOldInfo.source(), themeColor,
backgroundColor, defaultBackgroundColor, isPrimaryIconMaskable,
......
......@@ -112,6 +112,10 @@ public class WebappInfo {
public static WebappInfo create(Intent intent) {
String id = idFromIntent(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 scope = IntentUtils.safeGetStringExtra(intent, ShortcutHelper.EXTRA_SCOPE);
......@@ -137,9 +141,11 @@ public class WebappInfo {
String name = nameFromIntent(intent);
String shortName = shortNameFromIntent(intent);
return create(id, url, scope, new Icon(icon), name, shortName, displayMode, orientation,
source, themeColor, backgroundColor, isIconGenerated, isIconAdaptive,
forceNavigation);
int defaultBackgroundColor =
SplashLayout.getDefaultBackgroundColor(ContextUtils.getApplicationContext());
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 {
* @param forceNavigation Whether the webapp should navigate to {@link url} if the
* 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,
String shortName, @WebDisplayMode int displayMode, int orientation, int source,
long themeColor, long backgroundColor, int defaultBackgroundColor,
......
......@@ -20,6 +20,8 @@ import android.support.test.InstrumentationRegistry;
import android.support.test.filters.SmallTest;
import android.test.mock.MockPackageManager;
import androidx.browser.customtabs.CustomTabsIntent;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
......@@ -31,9 +33,9 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.test.BaseJUnit4ClassRunner;
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.IntentHandler;
import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.customtabs.CustomTabIntentDataProvider;
import org.chromium.chrome.browser.externalnav.ExternalNavigationHandler.OverrideUrlLoadingResult;
import org.chromium.chrome.browser.instantapps.InstantAppsHandler;
......@@ -41,6 +43,7 @@ import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabRedirectHandler;
import org.chromium.chrome.browser.webapps.WebappInfo;
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.ui.base.PageTransition;
import org.chromium.webapk.lib.common.WebApkConstants;
......@@ -51,8 +54,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.regex.Pattern;
import androidx.browser.customtabs.CustomTabsIntent;
/**
* Instrumentation tests for {@link ExternalNavigationHandler}.
*/
......@@ -1566,8 +1567,9 @@ public class ExternalNavigationHandlerTest {
}
private static WebappInfo newWebappInfoFromScope(String scope) {
return WebappInfo.create("", "", scope, null, null, null, WebDisplayMode.STANDALONE, 0, 0,
0, 0, false, false, false);
Intent webappIntent = WebappTestHelper.createMinimalWebappIntent("" /* id */, "" /* url */);
webappIntent.putExtra(ShortcutHelper.EXTRA_SCOPE, scope);
return WebappInfo.create(webappIntent);
}
private static class IntentActivity {
......
......@@ -21,13 +21,10 @@ import org.chromium.base.ContextUtils;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.base.test.util.CommandLineFlags;
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.ChromeSwitches;
import org.chromium.chrome.browser.ChromeTabbedActivity;
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.CustomTabIntentDataProvider;
import org.chromium.chrome.browser.tab.TabWebContentsDelegateAndroid;
......@@ -37,11 +34,11 @@ import org.chromium.chrome.browser.util.IntentUtils;
import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
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.util.Criteria;
import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.JavaScriptUtils;
import org.chromium.content_public.common.ScreenOrientationValues;
import org.chromium.webapk.lib.common.WebApkConstants;
/** Tests for WebApkActivity. */
......@@ -230,16 +227,10 @@ public final class WebApkActivityTest {
}
private WebApkInfo createWebApkInfo(String startUrl, String scopeUrl) {
return WebApkInfo.create(TEST_WEBAPK_ID, startUrl, scopeUrl, null /* primaryIcon */,
null /* badgeIcon */, null /* splashIcon */, "" /* name */, "" /* short_name */,
WebDisplayMode.STANDALONE, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING /* themeColor */,
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 */);
WebApkInfoBuilder webApkInfoBuilder =
new WebApkInfoBuilder(TEST_WEBAPK_PACKAGE_NAME, startUrl);
webApkInfoBuilder.setScope(scopeUrl);
return webApkInfoBuilder.build();
}
private String getTestServerUrl(String relativeUrl) {
......
......@@ -22,12 +22,11 @@ import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
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.content_public.browser.UiThreadTaskTraits;
import org.chromium.net.test.EmbeddedTestServerRule;
import java.util.HashMap;
/**
* Tests the WebApkUpdateDataFetcher.
*/
......@@ -112,13 +111,11 @@ public class WebApkUpdateDataFetcherTest {
final String manifestUrl, final WebApkUpdateDataFetcher.Observer observer) {
final WebApkUpdateDataFetcher fetcher = new WebApkUpdateDataFetcher();
PostTask.runOrPostTask(UiThreadTaskTraits.DEFAULT, () -> {
WebApkInfo oldInfo = WebApkInfo.create("", "", scopeUrl, null, null, null, null, null,
-1, -1, -1, -1, -1, -1, false, "random.package", -1, manifestUrl, "",
WebApkInfo.WebApkDistributor.BROWSER, new HashMap<String, String>(), null,
null /*shareTargetActivityName*/, false /* forceNavigation */,
false /* isSplashProvidedByWebApk */, null /* shareData */,
1 /* webApkVersionCode */);
fetcher.start(mTab, oldInfo, observer);
WebApkInfoBuilder oldWebApkInfoBuilder =
new WebApkInfoBuilder("random.package", "" /* url */);
oldWebApkInfoBuilder.setScope(scopeUrl);
oldWebApkInfoBuilder.setManifestUrl(manifestUrl);
fetcher.start(mTab, oldWebApkInfoBuilder.build(), observer);
});
}
......
......@@ -158,7 +158,7 @@ public class WebApkUpdateManagerTest {
final TestWebApkUpdateManager updateManager = new TestWebApkUpdateManager(waiter, storage);
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.orientation, 0, creationData.themeColor,
creationData.backgroundColor, 0, creationData.isPrimaryIconMaskable, "",
......
......@@ -26,21 +26,19 @@ import org.chromium.base.test.util.Feature;
import org.chromium.base.test.util.RetryOnFailure;
import org.chromium.base.test.util.ScalableTimeout;
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.ChromeSwitches;
import org.chromium.chrome.browser.ChromeTabbedActivity;
import org.chromium.chrome.browser.DeferredStartupHandler;
import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.ShortcutSource;
import org.chromium.chrome.browser.tab.TabIdManager;
import org.chromium.chrome.browser.util.IntentUtils;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.MultiActivityTestRule;
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.CriteriaHelper;
import org.chromium.content_public.common.ScreenOrientationValues;
/**
* Tests that WebappActivities are launched correctly.
......@@ -75,7 +73,7 @@ public class WebappModeTest {
+ "ggR0lNUFeBDhcAAAAMSURBVAjXY2AUawEAALcAnI/TkI8AAAAASUVORK5CYII=";
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.setPackage(InstrumentationRegistry.getTargetContext().getPackageName());
intent.setAction(WebappLauncherActivity.ACTION_START_WEBAPP);
......@@ -86,13 +84,8 @@ public class WebappModeTest {
intent.putExtra(ShortcutHelper.EXTRA_MAC, mac);
}
WebappInfo webappInfo = WebappInfo.create(id, url, null, new WebappInfo.Icon(icon), title,
null, WebDisplayMode.STANDALONE, ScreenOrientationValues.PORTRAIT,
ShortcutSource.UNKNOWN, ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, false /* isIconGenerated */,
false /* isIconAdaptive */, false /* forceNavigation */);
webappInfo.setWebappIntentExtras(intent);
intent.putExtra(ShortcutHelper.EXTRA_ICON, icon);
intent.putExtra(ShortcutHelper.EXTRA_NAME, title);
return intent;
}
......
......@@ -4,6 +4,7 @@
package org.chromium.chrome.browser.webapps;
import android.content.Intent;
import android.support.test.filters.MediumTest;
import android.support.test.rule.UiThreadTestRule;
......@@ -16,6 +17,9 @@ import org.junit.runner.RunWith;
import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Feature;
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.content_public.browser.test.NativeLibraryTestRule;
......@@ -128,17 +132,15 @@ public class WebappVisibilityTest {
private static WebappInfo createWebappInfo(String webappStartUrlOrScopeUrl,
@WebappScopePolicy.Type int scopePolicy, @WebDisplayMode int displayMode) {
return scopePolicy == WebappScopePolicy.Type.LEGACY
? WebappInfo.create("", webappStartUrlOrScopeUrl, null, null, null, null,
displayMode, 0, 0, 0, 0, false /* isIconGenerated */,
false /* isIconAdaptive */, false /* forceNavigation */)
: WebApkInfo.create(
"", "", webappStartUrlOrScopeUrl, null, null, null, null, null, displayMode,
0, 0, 0, 0, 0, false, "", 0, null, "", WebApkInfo.WebApkDistributor.BROWSER,
null, null, null /*shareTargetActivityName*/, false /* forceNavigation */,
false /* isSplashProvidedByWebApk */, null /* shareData */,
1 /* webApkVersionCode */
);
if (scopePolicy == WebappScopePolicy.Type.LEGACY) {
Intent webappIntent = WebappTestHelper.createMinimalWebappIntent(
"" /* id */, webappStartUrlOrScopeUrl);
webappIntent.putExtra(ShortcutHelper.EXTRA_DISPLAY_MODE, displayMode);
return WebappInfo.create(webappIntent);
}
WebApkInfoBuilder webApkInfoBuilder = new WebApkInfoBuilder("random.package", "" /* url */);
webApkInfoBuilder.setScope(webappStartUrlOrScopeUrl);
webApkInfoBuilder.setDisplayMode(displayMode);
return webApkInfoBuilder.build();
}
}
......@@ -358,7 +358,7 @@ public class WebApkUpdateManagerUnitTest {
if (manifestData == null) return null;
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.badgeIcon), null, manifestData.name,
manifestData.shortName, manifestData.displayMode, manifestData.orientation, -1,
......
......@@ -15,6 +15,7 @@ import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.blink_public.platform.WebDisplayMode;
import org.chromium.chrome.browser.ShortcutHelper;
import org.chromium.chrome.browser.ShortcutSource;
import org.chromium.chrome.test.util.browser.WebappTestHelper;
import org.chromium.content_public.common.ScreenOrientationValues;
/**
......@@ -30,11 +31,10 @@ public class WebappInfoTest {
String shortName = "name";
String url = "about:blank";
WebappInfo info = WebappInfo.create(id, url, null, null, name, shortName,
WebDisplayMode.STANDALONE, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, false /* isIconGenerated */,
false /* isIconAdaptive */, false /* forceNavigation */);
Intent intent = WebappTestHelper.createMinimalWebappIntent(id, url);
intent.putExtra(ShortcutHelper.EXTRA_NAME, name);
intent.putExtra(ShortcutHelper.EXTRA_SHORT_NAME, shortName);
WebappInfo info = WebappInfo.create(intent);
Assert.assertNotNull(info);
}
......@@ -45,11 +45,10 @@ public class WebappInfoTest {
String shortName = "name";
String url = "http://google.com";
WebappInfo info = WebappInfo.create(id, url, null, null, name, shortName,
WebDisplayMode.STANDALONE, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, false /* isIconGenerated */,
false /* isIconAdaptive */, false /* forceNavigation */);
Intent intent = WebappTestHelper.createMinimalWebappIntent(id, url);
intent.putExtra(ShortcutHelper.EXTRA_NAME, name);
intent.putExtra(ShortcutHelper.EXTRA_SHORT_NAME, shortName);
WebappInfo info = WebappInfo.create(intent);
Assert.assertNotNull(info);
}
......@@ -124,16 +123,16 @@ public class WebappInfoTest {
@Test
public void testDisplayModeAndOrientationAndSource() {
String id = "webapp id";
String name = "longName";
String shortName = "name";
String url = "http://money.cnn.com";
WebappInfo info = WebappInfo.create(id, url, null, null, name, shortName,
WebDisplayMode.FULLSCREEN, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, false /* isIconGenerated */,
false /* isIconAdaptive */, false /* forceNavigation */);
Intent intent = createIntentWithUrlAndId();
intent.putExtra(ShortcutHelper.EXTRA_NAME, name);
intent.putExtra(ShortcutHelper.EXTRA_SHORT_NAME, shortName);
intent.putExtra(ShortcutHelper.EXTRA_DISPLAY_MODE, WebDisplayMode.FULLSCREEN);
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(ScreenOrientationValues.DEFAULT, info.orientation());
Assert.assertEquals(ShortcutSource.UNKNOWN, info.source());
......@@ -141,33 +140,30 @@ public class WebappInfoTest {
@Test
public void testNormalColors() {
String id = "webapp id";
String name = "longName";
String shortName = "name";
String url = "http://money.cnn.com";
long themeColor = 0xFF00FF00L;
long backgroundColor = 0xFF0000FFL;
WebappInfo info = WebappInfo.create(id, url, null, null, name, shortName,
WebDisplayMode.STANDALONE, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN,
themeColor, backgroundColor, false /* isIconGenerated */,
false /* isIconAdaptive */, false /* forceNavigation */);
Intent intent = createIntentWithUrlAndId();
intent.putExtra(ShortcutHelper.EXTRA_NAME, name);
intent.putExtra(ShortcutHelper.EXTRA_SHORT_NAME, shortName);
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(backgroundColor, info.backgroundColor());
}
@Test
public void testInvalidOrMissingColors() {
String id = "webapp id";
String name = "longName";
String shortName = "name";
String url = "http://money.cnn.com";
WebappInfo info = WebappInfo.create(id, url, null, null, name, shortName,
WebDisplayMode.STANDALONE, ScreenOrientationValues.DEFAULT, ShortcutSource.UNKNOWN,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, false /* isIconGenerated */,
false /* isIconAdaptive */, false /* forceNavigation */);
Intent intent = createIntentWithUrlAndId();
intent.putExtra(ShortcutHelper.EXTRA_NAME, name);
intent.putExtra(ShortcutHelper.EXTRA_SHORT_NAME, shortName);
WebappInfo info = WebappInfo.create(intent);
Assert.assertEquals(ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, info.themeColor());
Assert.assertEquals(
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING, info.backgroundColor());
......@@ -337,9 +333,7 @@ public class WebappInfoTest {
*/
@Test
public void testForceNavigationNotSpecified() {
Intent intent = new Intent();
intent.putExtra(ShortcutHelper.EXTRA_ID, "webapp_id");
intent.putExtra(ShortcutHelper.EXTRA_URL, "about:blank");
Intent intent = createIntentWithUrlAndId();
Assert.assertFalse(WebappInfo.create(intent).shouldForceNavigation());
}
......
......@@ -39,6 +39,9 @@ void JNI_WebApkUkmRecorder_RecordSessionDuration(
jint distributor,
jint version_code,
jlong duration) {
if (!manifest_url)
return;
WebApkUkmRecorder::RecordSessionDuration(
GURL(base::android::ConvertJavaStringToUTF8(env, manifest_url)),
distributor, version_code, duration);
......
......@@ -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/MockTabModelSelector.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/WebappTestHelper.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/ChromeTabUtils.java",
......@@ -182,6 +184,7 @@ android_library("chrome_java_test_support") {
"//third_party/android_sdk:android_test_base_java",
"//third_party/android_support_test_runner:rules_java",
"//third_party/android_support_test_runner:runner_java",
"//third_party/blink/public:blink_headers_java",
"//third_party/hamcrest:hamcrest_core_java",
"//third_party/jsr-305:jsr_305_javalib",
"//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