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

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

Issue 1867543002: Enable deep-linking from notifications for recently used web apps on the Android home screen. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bulk-webappdatastorage
Patch Set: UI thread strikes again Created 4 years, 8 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/junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java
index d57dbae637fbe4e18cbc2222ad1b76d54fe6cbe1..0148c8b8b5b17ab42c302c05b9e541360fe9d808 100644
--- a/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java
+++ b/chrome/android/junit/src/org/chromium/chrome/browser/webapps/WebappRegistryTest.java
@@ -49,6 +49,7 @@ public class WebappRegistryTest {
Set<String> mExpected;
FetchCallback(Set<String> expected) {
+ mCallbackCalled = false;
mExpected = expected;
}
@@ -61,16 +62,39 @@ public class WebappRegistryTest {
private class FetchStorageCallback implements WebappRegistry.FetchWebappDataStorageCallback {
Intent mShortcutIntent;
+ boolean mMarkLaunched;
- FetchStorageCallback(Intent shortcutIntent) {
+ FetchStorageCallback(Intent shortcutIntent, boolean markLaunched) {
mCallbackCalled = false;
mShortcutIntent = shortcutIntent;
+ mMarkLaunched = markLaunched;
}
@Override
public void onWebappDataStorageRetrieved(WebappDataStorage storage) {
mCallbackCalled = true;
storage.updateFromShortcutIntent(mShortcutIntent);
+ storage.updateLastUsedTime();
+ if (mMarkLaunched) storage.setLaunched();
+ }
+ }
+
+ private class FetchStorageByUrlCallback
+ implements WebappRegistry.FetchWebappDataStorageCallback {
+ String mUrl;
+ String mScope;
+
+ FetchStorageByUrlCallback(String url, String scope) {
+ mCallbackCalled = false;
+ mUrl = url;
+ mScope = scope;
+ }
+
+ @Override
+ public void onWebappDataStorageRetrieved(WebappDataStorage storage) {
+ mCallbackCalled = true;
gone 2016/04/07 19:10:44 This really should be a member variable of this ca
dominickn 2016/04/08 01:10:46 Done.
+ assertEquals(mUrl, storage.getUrl());
+ assertEquals(mScope, storage.getScope());
}
}
@@ -116,9 +140,7 @@ public class WebappRegistryTest {
@Test
@Feature({"Webapp"})
- public void testWebappRegistrationUpdatesLastUsed() throws Exception {
- long before = System.currentTimeMillis();
dominickn 2016/04/06 13:07:01 The before check started being flaky for me, so I
-
+ public void testWebappRegistrationUpdatesLastUsedAndDoesNotMarkLaunched() throws Exception {
WebappRegistry.registerWebapp(Robolectric.application, "test", null);
BackgroundShadowAsyncTask.runBackgroundTasks();
long after = System.currentTimeMillis();
@@ -127,7 +149,10 @@ public class WebappRegistryTest {
WebappDataStorage.SHARED_PREFS_FILE_PREFIX + "test", Context.MODE_PRIVATE);
long actual = webAppPrefs.getLong(WebappDataStorage.KEY_LAST_USED,
WebappDataStorage.LAST_USED_INVALID);
- assertTrue("Timestamp is out of range", before <= actual && actual <= after);
+ assertTrue("Timestamp is out of range", actual <= after);
+
+ boolean launched = webAppPrefs.getBoolean(WebappDataStorage.KEY_LAUNCHED, false);
+ assertTrue(!launched);
gone 2016/04/07 19:10:45 can't just assertTrue(!webAppPref....) here?
dominickn 2016/04/08 01:10:46 Done.
}
@Test
@@ -323,13 +348,13 @@ public class WebappRegistryTest {
Intent shortcutIntent2 = createShortcutIntent(webapp2Url);
WebappRegistry.registerWebapp(Robolectric.application, "webapp1",
- new FetchStorageCallback(shortcutIntent1));
+ new FetchStorageCallback(shortcutIntent1, true));
BackgroundShadowAsyncTask.runBackgroundTasks();
Robolectric.runUiThreadTasks();
assertTrue(mCallbackCalled);
WebappRegistry.registerWebapp(Robolectric.application, "webapp2",
- new FetchStorageCallback(shortcutIntent2));
+ new FetchStorageCallback(shortcutIntent2, false));
BackgroundShadowAsyncTask.runBackgroundTasks();
Robolectric.runUiThreadTasks();
assertTrue(mCallbackCalled);
@@ -358,6 +383,12 @@ public class WebappRegistryTest {
WebappDataStorage.KEY_LAST_USED, WebappDataStorage.LAST_USED_UNSET);
assertEquals(WebappDataStorage.LAST_USED_UNSET, actualLastUsed);
+ // Verify that neither web app is marked as launched.
+ boolean actualLaunched = webapp1Prefs.getBoolean(WebappDataStorage.KEY_LAUNCHED, false);
+ assertTrue(!actualLaunched);
+ actualLaunched = webapp2Prefs.getBoolean(WebappDataStorage.KEY_LAUNCHED, false);
+ assertTrue(!actualLaunched);
+
// Verify that the URL and scope for both web apps is WebappDataStorage.URL_INVALID.
String actualScope = webapp1Prefs.getString(
WebappDataStorage.KEY_SCOPE, WebappDataStorage.URL_INVALID);
@@ -386,9 +417,9 @@ public class WebappRegistryTest {
Robolectric.runUiThreadTasks();
assertTrue(mCallbackCalled);
- // Open the webapp up to set the last used time.
+ // Open the webapp up to set the last used time and launched.
WebappRegistry.getWebappDataStorage(Robolectric.application, "webapp",
- new FetchStorageCallback(null));
+ new FetchStorageCallback(null, true));
BackgroundShadowAsyncTask.runBackgroundTasks();
Robolectric.runUiThreadTasks();
assertTrue(mCallbackCalled);
@@ -398,15 +429,20 @@ public class WebappRegistryTest {
WebappDataStorage.KEY_LAST_USED, WebappDataStorage.LAST_USED_INVALID);
assertTrue(WebappDataStorage.LAST_USED_INVALID != actualLastUsed);
assertTrue(WebappDataStorage.LAST_USED_UNSET != actualLastUsed);
+
+ // Verify that the app is marked as launched.
+ boolean actualLaunched = webappPrefs.getBoolean(WebappDataStorage.KEY_LAUNCHED, false);
+ assertTrue(actualLaunched);
}
@Test
@Feature({"Webapp"})
public void testUpdateAfterClearWebappHistory() throws Exception {
- final String webappUrl = "http://www.google.com";
+ final String webappUrl = "http://www.google.com";
+ final String webappScope = "http://www.google.com/";
final Intent shortcutIntent = createShortcutIntent(webappUrl);
WebappRegistry.registerWebapp(Robolectric.application, "webapp",
- new FetchStorageCallback(shortcutIntent));
+ new FetchStorageCallback(shortcutIntent, false));
BackgroundShadowAsyncTask.runBackgroundTasks();
Robolectric.runUiThreadTasks();
assertTrue(mCallbackCalled);
@@ -414,13 +450,17 @@ public class WebappRegistryTest {
SharedPreferences webappPrefs = Robolectric.application.getSharedPreferences(
WebappDataStorage.SHARED_PREFS_FILE_PREFIX + "webapp", Context.MODE_PRIVATE);
+ // Verify that the app is not marked as launched.
+ boolean actualLaunched = webappPrefs.getBoolean(WebappDataStorage.KEY_LAUNCHED, true);
+ assertTrue(actualLaunched);
+
// Verify that the URL and scope match the original in the intent.
- String actualURL = webappPrefs.getString(
+ String actualUrl = webappPrefs.getString(
WebappDataStorage.KEY_URL, WebappDataStorage.URL_INVALID);
- assertEquals(webappUrl, actualURL);
+ assertEquals(webappUrl, actualUrl);
String actualScope = webappPrefs.getString(
WebappDataStorage.KEY_SCOPE, WebappDataStorage.URL_INVALID);
- assertEquals(webappUrl, actualScope);
+ assertEquals(webappScope, actualScope);
WebappRegistry.clearWebappHistory(Robolectric.application, new CallbackRunner());
BackgroundShadowAsyncTask.runBackgroundTasks();
@@ -429,18 +469,107 @@ public class WebappRegistryTest {
// Update the webapp from the intent again.
WebappRegistry.getWebappDataStorage(Robolectric.application, "webapp",
- new FetchStorageCallback(shortcutIntent));
+ new FetchStorageCallback(shortcutIntent, true));
BackgroundShadowAsyncTask.runBackgroundTasks();
Robolectric.runUiThreadTasks();
assertTrue(mCallbackCalled);
+ // Verify that the app is marked as launched.
+ actualLaunched = webappPrefs.getBoolean(WebappDataStorage.KEY_LAUNCHED, true);
+ assertTrue(actualLaunched);
+
// Verify that the URL and scope match the original in the intent.
- actualURL = webappPrefs.getString(
+ actualUrl = webappPrefs.getString(
WebappDataStorage.KEY_URL, WebappDataStorage.URL_INVALID);
- assertEquals(webappUrl, actualURL);
+ assertEquals(webappUrl, actualUrl);
actualScope = webappPrefs.getString(
WebappDataStorage.KEY_SCOPE, WebappDataStorage.URL_INVALID);
- assertEquals(webappUrl, actualScope);
+ assertEquals(webappScope, actualScope);
+ }
+
+ @Test
+ @Feature({"Webapp"})
+ public void testGetWebappDataStorageForUrl() throws Exception {
gone 2016/04/07 19:10:45 Can you add comments here? I'm not sure what I'm
dominickn 2016/04/08 01:10:46 Done.
+ final String webapp1Url = "https://www.google.com/";
+ final String webapp2Url = "https://drive.google.com/";
+ final String webapp3Url = "https://www.google.com/drive/index.html";
+ final String webapp4Url = "https://www.google.com/drive/docs/index.html";
+
+ final String webapp3Scope = "https://www.google.com/drive/";
+ final String webapp4Scope = "https://www.google.com/drive/docs/";
+
+ final String test1Url = "https://www.google.com/index.html";
+ final String test2Url = "https://www.google.com/drive/recent.html";
+ final String test3Url = "https://www.google.com/drive/docs/recent.html";
+ final String test4Url = "https://www.google.com/drive/docs/recent/index.html";
+ final String test5Url = "https://maps.google.com/";
+
+ Intent shortcutIntent1 = createShortcutIntent(webapp1Url);
+ Intent shortcutIntent2 = createShortcutIntent(webapp2Url);
+ Intent shortcutIntent3 = createShortcutIntent(webapp3Url);
+ Intent shortcutIntent4 = createShortcutIntent(webapp4Url);
+
+ WebappRegistry.registerWebapp(Robolectric.application, "webapp1",
+ new FetchStorageCallback(shortcutIntent1, true));
+ BackgroundShadowAsyncTask.runBackgroundTasks();
+ Robolectric.runUiThreadTasks();
+ assertTrue(mCallbackCalled);
+
+ WebappRegistry.registerWebapp(Robolectric.application, "webapp2",
+ new FetchStorageCallback(shortcutIntent2, false));
+ BackgroundShadowAsyncTask.runBackgroundTasks();
+ Robolectric.runUiThreadTasks();
+ assertTrue(mCallbackCalled);
+
+ WebappRegistry.registerWebapp(Robolectric.application, "webapp3",
+ new FetchStorageCallback(shortcutIntent3, true));
+ BackgroundShadowAsyncTask.runBackgroundTasks();
+ Robolectric.runUiThreadTasks();
+ assertTrue(mCallbackCalled);
+
+ WebappRegistry.registerWebapp(Robolectric.application, "webapp4",
+ new FetchStorageCallback(shortcutIntent4, false));
+ BackgroundShadowAsyncTask.runBackgroundTasks();
+ Robolectric.runUiThreadTasks();
+ assertTrue(mCallbackCalled);
+
+ WebappRegistry.getWebappDataStorageForUrl(Robolectric.application, test1Url,
+ new FetchStorageByUrlCallback(webapp1Url, webapp1Url));
+ BackgroundShadowAsyncTask.runBackgroundTasks();
+ Robolectric.runUiThreadTasks();
+ assertTrue(mCallbackCalled);
+
+ WebappRegistry.getWebappDataStorageForUrl(Robolectric.application, test2Url,
+ new FetchStorageByUrlCallback(webapp3Url, webapp3Scope));
+ BackgroundShadowAsyncTask.runBackgroundTasks();
+ Robolectric.runUiThreadTasks();
+ assertTrue(mCallbackCalled);
+
+ WebappRegistry.getWebappDataStorageForUrl(Robolectric.application, test3Url,
+ new FetchStorageByUrlCallback(webapp4Url, webapp4Scope));
+ BackgroundShadowAsyncTask.runBackgroundTasks();
+ Robolectric.runUiThreadTasks();
+ assertTrue(mCallbackCalled);
+
+ WebappRegistry.getWebappDataStorageForUrl(Robolectric.application, test4Url,
+ new FetchStorageByUrlCallback(webapp4Url, webapp4Scope));
+ BackgroundShadowAsyncTask.runBackgroundTasks();
+ Robolectric.runUiThreadTasks();
+ assertTrue(mCallbackCalled);
+
+ mCallbackCalled = false;
+ WebappRegistry.getWebappDataStorageForUrl(Robolectric.application, test5Url,
+ new WebappRegistry.FetchWebappDataStorageCallback() {
+ @Override
+ public void onWebappDataStorageRetrieved(WebappDataStorage storage) {
+ assertEquals(null, storage);
+ mCallbackCalled = true;
+ }
+ }
+ );
+ BackgroundShadowAsyncTask.runBackgroundTasks();
+ Robolectric.runUiThreadTasks();
+ assertTrue(mCallbackCalled);
}
private Set<String> addWebappsToRegistry(String... webapps) {
@@ -457,7 +586,8 @@ public class WebappRegistryTest {
}
private Intent createShortcutIntent(String url) {
- return ShortcutHelper.createWebappShortcutIntent("id", "action", url, url, "name",
- "shortName", null, ShortcutHelper.WEBAPP_SHORTCUT_VERSION, 0, 0, 0, false);
+ return ShortcutHelper.createWebappShortcutIntent("id", "action", url,
+ ShortcutHelper.getScopeFromUrl(url), "name", "shortName", null,
+ ShortcutHelper.WEBAPP_SHORTCUT_VERSION, 0, 0, 0, false);
}
}

Powered by Google App Engine
This is Rietveld 408576698