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..286c0012318e66a064d7c6851522401f7a9c8587 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 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 forceNavigation = IntentUtils.safeGetBooleanExtra( |
+ intent, WebApkConstants.EXTRA_WEBAPK_FORCE_NAVIGATION, false); |
+ |
+ return create(webApkPackageName, url, source, forceNavigation); |
} |
/** |
@@ -65,8 +69,11 @@ 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 source Source that the WebAPK was launched from. |
+ * @param forceNavigation Whether the WebAPK should navigate to {@link url} if it is already |
+ * running. |
*/ |
- public static WebApkInfo create(String webApkPackageName, String url, int source) { |
+ public static WebApkInfo create( |
+ String webApkPackageName, String url, int source, boolean forceNavigation) { |
// 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,10 +107,10 @@ 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, forceNavigation, |
+ scope, new Icon(icon), name, shortName, displayMode, orientation, source, |
+ themeColor, backgroundColor, webApkPackageName, shellApkVersion, manifestUrl, |
+ manifestStartUrl, iconUrlToMurmur2HashMap); |
} |
/** |
@@ -111,6 +118,8 @@ public class WebApkInfo extends WebappInfo { |
* |
* @param id ID for the WebAPK. |
* @param url URL that the WebAPK should navigate to when launched. |
+ * @param forceNavigation Whether the WebAPK should navigate to {@link url} 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. |
@@ -129,10 +138,11 @@ public class WebApkInfo extends WebappInfo { |
* @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, |
- String manifestStartUrl, Map<String, String> iconUrlToMurmur2HashMap) { |
+ public static WebApkInfo create(String id, String url, boolean forceNavigation, 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, |
"Incomplete data provided: " + id + ", " + url + ", " + manifestStartUrl + ", " |
@@ -147,17 +157,19 @@ public class WebApkInfo extends WebappInfo { |
scope = ShortcutHelper.getScopeFromUrl(manifestStartUrl); |
} |
- return new WebApkInfo(id, url, scope, icon, name, shortName, displayMode, |
+ return new WebApkInfo(id, url, forceNavigation, 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 forceNavigation, 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); |
+ mForceNavigation = forceNavigation; |
mWebApkPackageName = webApkPackageName; |
mShellApkVersion = shellApkVersion; |
mManifestUrl = manifestUrl; |
@@ -168,6 +180,11 @@ public class WebApkInfo extends WebappInfo { |
protected WebApkInfo() {} |
@Override |
+ public boolean shouldForceNavigation() { |
+ return mForceNavigation; |
+ } |
+ |
+ @Override |
public String webApkPackageName() { |
return mWebApkPackageName; |
} |
@@ -194,6 +211,7 @@ 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_FORCE_NAVIGATION, mForceNavigation); |
} |
/** |