Commit 5070f7a1 authored by Ethan Xu's avatar Ethan Xu Committed by Commit Bot

[Android WebAPK] Do not crash on empty share intent

This CL fixes a java.lang.StringIndexOutOfBoundsException in
HostBrowserLauncherParams#createWebShareTargetUriString() when the WebAPK receives the following
share intent:

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setTyle("text/plain");

BUG=None
TEST=HostBrowserLauncherParamsTest.*

Change-Id: If14cafcb43ed3f7668a7165e071674027713316d
Reviewed-on: https://chromium-review.googlesource.com/c/1285069
Commit-Queue: Ethan Xu <xuethan@google.com>
Reviewed-by: default avatarPeter Kotwicz <pkotwicz@chromium.org>
Reviewed-by: default avatarGlenn Hartmann <hartmanng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#600956}
parent 0f156856
......@@ -66,6 +66,34 @@ public class HostBrowserLauncherParamsTest {
Assert.assertEquals("https://www.chromium.org/wst?hello=world", uri);
}
/*
* Test that {@link HostBrowserLauncherParams#createWebShareTargetUriString()} can handle
* the case where both values in every pair are null.
*/
@Test
public void testCreateWebShareTargetUriStringAllNull() {
ArrayList<Pair<String, String>> params = new ArrayList<>();
params.add(new Pair<>(null, null));
params.add(new Pair<>(null, null));
String uri = HostBrowserLauncherParams.createWebShareTargetUriString(
"https://www.chromium.org/wst", params);
Assert.assertEquals("https://www.chromium.org/wst", uri);
}
/*
* Test that {@link HostBrowserLauncherParams#createWebShareTargetUriString()} can handle
* the cases where some keys in all pair are null.
*/
@Test
public void testCreateWebShareTargetUriStringAllNullWithSomeElementNotNull() {
ArrayList<Pair<String, String>> params = new ArrayList<>();
params.add(new Pair<>("a", null));
params.add(new Pair<>(null, "b"));
String uri = HostBrowserLauncherParams.createWebShareTargetUriString(
"https://www.chromium.org/wst", params);
Assert.assertEquals("https://www.chromium.org/wst", uri);
}
/*
* Test that {@link HostBrowserLauncherParams#createWebShareTargetUriString()} handles replacing
* the query string of an action url with an existing query.
......
......@@ -128,7 +128,11 @@ public class HostBrowserLauncherParams {
Uri shareUri = Uri.parse(action);
Uri.Builder builder = shareUri.buildUpon();
// Uri.Builder uses %20 rather than + for spaces, the spec requires +.
builder.encodedQuery(queryBuilder.build().toString().replace("%20", "+").substring(1));
String queryString = queryBuilder.build().toString();
if (TextUtils.isEmpty(queryString)) {
return action;
}
builder.encodedQuery(queryString.replace("%20", "+").substring(1));
return builder.build().toString();
}
......
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