Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4035)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java

Issue 2758193002: [Android WebAPKs] Don't navigate WebAPK when launching it from launcher (Closed)
Patch Set: Merge branch 'package_name2' into twitter Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java
index 27893265b23d0f08c6023e93ea3af21442ace207..10682a35ad95987488616736c65ab35f3155fd0c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkInfo.java
@@ -31,6 +31,7 @@ import java.util.Map;
public class WebApkInfo extends WebappInfo {
private static final String TAG = "WebApkInfo";
+ private boolean mShouldNavigateIfAlreadyRunning;
dominickn 2017/03/21 02:09:33 I would call this mForceNavigation;
private String mWebApkPackageName;
private int mShellApkVersion;
private String mManifestUrl;
@@ -55,7 +56,10 @@ public class WebApkInfo extends WebappInfo {
String url = urlFromIntent(intent);
int source = sourceFromIntent(intent);
- return create(webApkPackageName, url, source);
+ boolean navigateIfAlreadyRunning = IntentUtils.safeGetBooleanExtra(
+ intent, WebApkConstants.EXTRA_WEBAPK_NAVIGATE_IF_ALREADY_OPEN, false);
+
+ return create(webApkPackageName, url, navigateIfAlreadyRunning, source);
}
/**
@@ -64,9 +68,12 @@ public class WebApkInfo extends WebappInfo {
*
* @param webApkPackageName The package name of the WebAPK.
* @param url Url that the WebAPK should navigate to when launched.
+ * @param navigateIfAlreadyRunning Whether the WebAPK should navigate to {@link uri} if it is
+ * already running.
* @param source Source that the WebAPK was launched from.
*/
- public static WebApkInfo create(String webApkPackageName, String url, int source) {
+ public static WebApkInfo create(
+ String webApkPackageName, String url, boolean navigateIfAlreadyRunning, int source) {
dominickn 2017/03/21 02:09:33 Nit: I would put the boolean last. Nit: I would c
// Unlike non-WebAPK web apps, WebAPK ids are predictable. A malicious actor may send an
// intent with a valid start URL and arbitrary other data. Only use the start URL, the
// package name and the ShortcutSource from the launch intent and extract the remaining data
@@ -100,38 +107,41 @@ public class WebApkInfo extends WebappInfo {
int iconId = IntentUtils.safeGetInt(bundle, WebApkMetaDataKeys.ICON_ID, 0);
Bitmap icon = decodeImageResource(webApkPackageName, iconId);
- return create(WebApkConstants.WEBAPK_ID_PREFIX + webApkPackageName, url, scope,
- new Icon(icon), name, shortName, displayMode, orientation, source, themeColor,
- backgroundColor, webApkPackageName, shellApkVersion, manifestUrl, manifestStartUrl,
- iconUrlToMurmur2HashMap);
+ return create(WebApkConstants.WEBAPK_ID_PREFIX + webApkPackageName, url,
+ navigateIfAlreadyRunning, scope, new Icon(icon), name, shortName, displayMode,
+ orientation, source, themeColor, backgroundColor, webApkPackageName,
+ shellApkVersion, manifestUrl, manifestStartUrl, iconUrlToMurmur2HashMap);
}
/**
* 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 icon Icon to show for the WebAPK.
- * @param name Name of the WebAPK.
- * @param shortName The short name of the WebAPK.
- * @param displayMode Display mode of the WebAPK.
- * @param orientation Orientation of the WebAPK.
- * @param source Source that the WebAPK was launched from.
- * @param themeColor The theme color of the WebAPK.
- * @param backgroundColor The background color of the WebAPK.
- * @param webApkPackageName The package of the WebAPK.
- * @param shellApkVersion Version of the code in //chrome/android/webapk/shell_apk.
- * @param manifestUrl URL of the Web Manifest.
- * @param manifestStartUrl URL that the WebAPK should navigate to when launched from the
- * homescreen. Different from the {@link url} parameter if the
- * WebAPK is launched from a deep link.
- * @param iconUrlToMurmur2HashMap Map of the WebAPK's icon URLs to Murmur2 hashes of the
- * icon untransformed bytes.
+ * @param id ID for the WebAPK.
+ * @param url URL that the WebAPK should navigate to when launched.
+ * @param navigateIfAlreadyRunning Whether the WebAPK should navigate to {@link uri} if the
+ * WebAPK is already open.
+ * @param scope Scope for the WebAPK.
+ * @param icon Icon to show for the WebAPK.
+ * @param name Name of the WebAPK.
+ * @param shortName The short name of the WebAPK.
+ * @param displayMode Display mode of the WebAPK.
+ * @param orientation Orientation of the WebAPK.
+ * @param source Source that the WebAPK was launched from.
+ * @param themeColor The theme color of the WebAPK.
+ * @param backgroundColor The background color of the WebAPK.
+ * @param webApkPackageName The package of the WebAPK.
+ * @param shellApkVersion Version of the code in //chrome/android/webapk/shell_apk.
+ * @param manifestUrl URL of the Web Manifest.
+ * @param manifestStartUrl URL that the WebAPK should navigate to when launched from the
+ * homescreen. Different from the {@link url} parameter if the
+ * WebAPK is launched from a deep link.
+ * @param iconUrlToMurmur2HashMap Map of the WebAPK's icon URLs to Murmur2 hashes of the
+ * icon untransformed bytes.
*/
- public static WebApkInfo create(String id, String url, String scope, Icon icon, String name,
- String shortName, int displayMode, int orientation, int source, long themeColor,
- long backgroundColor, String webApkPackageName, int shellApkVersion, String manifestUrl,
+ public static WebApkInfo create(String id, String url, boolean navigateIfAlreadyRunning,
+ String scope, Icon icon, String name, String shortName, int displayMode,
+ int orientation, int source, long themeColor, long backgroundColor,
+ String webApkPackageName, int shellApkVersion, String manifestUrl,
String manifestStartUrl, Map<String, String> iconUrlToMurmur2HashMap) {
if (id == null || url == null || manifestStartUrl == null || webApkPackageName == null) {
Log.e(TAG,
@@ -147,17 +157,19 @@ public class WebApkInfo extends WebappInfo {
scope = ShortcutHelper.getScopeFromUrl(manifestStartUrl);
}
- return new WebApkInfo(id, url, scope, icon, name, shortName, displayMode,
- orientation, source, themeColor, backgroundColor, webApkPackageName,
+ return new WebApkInfo(id, url, navigateIfAlreadyRunning, scope, icon, name, shortName,
+ displayMode, orientation, source, themeColor, backgroundColor, webApkPackageName,
shellApkVersion, manifestUrl, manifestStartUrl, iconUrlToMurmur2HashMap);
}
- protected WebApkInfo(String id, String url, String scope, Icon icon, String name,
- String shortName, int displayMode, int orientation, int source, long themeColor,
- long backgroundColor, String webApkPackageName, int shellApkVersion, String manifestUrl,
- String manifestStartUrl, Map<String, String> iconUrlToMurmur2HashMap) {
+ protected WebApkInfo(String id, String url, boolean navigateIfAlreadyRunning, String scope,
+ Icon icon, String name, String shortName, int displayMode, int orientation, int source,
+ long themeColor, long backgroundColor, String webApkPackageName, int shellApkVersion,
+ String manifestUrl, String manifestStartUrl,
+ Map<String, String> iconUrlToMurmur2HashMap) {
super(id, url, scope, icon, name, shortName, displayMode, orientation, source, themeColor,
backgroundColor, false);
+ mShouldNavigateIfAlreadyRunning = navigateIfAlreadyRunning;
mWebApkPackageName = webApkPackageName;
mShellApkVersion = shellApkVersion;
mManifestUrl = manifestUrl;
@@ -168,6 +180,11 @@ public class WebApkInfo extends WebappInfo {
protected WebApkInfo() {}
@Override
+ public boolean shouldNavigateIfAlreadyRunning() {
dominickn 2017/03/21 02:09:32 shouldForceNavigation()
+ return mShouldNavigateIfAlreadyRunning;
+ }
+
+ @Override
public String webApkPackageName() {
return mWebApkPackageName;
}
@@ -194,6 +211,8 @@ public class WebApkInfo extends WebappInfo {
intent.putExtra(ShortcutHelper.EXTRA_URL, uri().toString());
intent.putExtra(ShortcutHelper.EXTRA_SOURCE, source());
intent.putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, webApkPackageName());
+ intent.putExtra(WebApkConstants.EXTRA_WEBAPK_NAVIGATE_IF_ALREADY_OPEN,
+ mShouldNavigateIfAlreadyRunning);
}
/**

Powered by Google App Engine
This is Rietveld 408576698