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 fe5367ae1f78d68fa76a1656c2cc3ed0fbd82d62..d57dbae637fbe4e18cbc2222ad1b76d54fe6cbe1 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 |
@@ -8,9 +8,11 @@ import static org.junit.Assert.assertEquals; |
import static org.junit.Assert.assertTrue; |
import android.content.Context; |
+import android.content.Intent; |
import android.content.SharedPreferences; |
import org.chromium.base.test.util.Feature; |
+import org.chromium.chrome.browser.ShortcutHelper; |
import org.chromium.testing.local.BackgroundShadowAsyncTask; |
import org.chromium.testing.local.LocalRobolectricTestRunner; |
import org.junit.Before; |
@@ -57,6 +59,32 @@ public class WebappRegistryTest { |
} |
} |
+ private class FetchStorageCallback implements WebappRegistry.FetchWebappDataStorageCallback { |
+ Intent mShortcutIntent; |
+ |
+ FetchStorageCallback(Intent shortcutIntent) { |
+ mCallbackCalled = false; |
+ mShortcutIntent = shortcutIntent; |
+ } |
+ |
+ @Override |
+ public void onWebappDataStorageRetrieved(WebappDataStorage storage) { |
+ mCallbackCalled = true; |
+ storage.updateFromShortcutIntent(mShortcutIntent); |
+ } |
+ } |
+ |
+ private class CallbackRunner implements Runnable { |
+ public CallbackRunner() { |
+ mCallbackCalled = false; |
+ } |
+ |
+ @Override |
+ public void run() { |
+ mCallbackCalled = true; |
+ } |
+ } |
+ |
@Before |
public void setUp() throws Exception { |
mSharedPreferences = Robolectric.application |
@@ -77,7 +105,7 @@ public class WebappRegistryTest { |
@Test |
@Feature({"Webapp"}) |
public void testWebappRegistrationAddsToSharedPrefs() throws Exception { |
- WebappRegistry.registerWebapp(Robolectric.application, "test", "https://www.google.com"); |
+ WebappRegistry.registerWebapp(Robolectric.application, "test", null); |
BackgroundShadowAsyncTask.runBackgroundTasks(); |
Set<String> actual = mSharedPreferences.getStringSet( |
@@ -88,11 +116,10 @@ public class WebappRegistryTest { |
@Test |
@Feature({"Webapp"}) |
- public void testWebappRegistrationUpdatesLastUsedAndSCOPE() throws Exception { |
+ public void testWebappRegistrationUpdatesLastUsed() throws Exception { |
long before = System.currentTimeMillis(); |
- final String scope = "http://drive.google.com"; |
- WebappRegistry.registerWebapp(Robolectric.application, "test", scope); |
+ WebappRegistry.registerWebapp(Robolectric.application, "test", null); |
BackgroundShadowAsyncTask.runBackgroundTasks(); |
long after = System.currentTimeMillis(); |
@@ -100,10 +127,7 @@ public class WebappRegistryTest { |
WebappDataStorage.SHARED_PREFS_FILE_PREFIX + "test", Context.MODE_PRIVATE); |
long actual = webAppPrefs.getLong(WebappDataStorage.KEY_LAST_USED, |
WebappDataStorage.LAST_USED_INVALID); |
- String webAppScope = webAppPrefs.getString(WebappDataStorage.KEY_SCOPE, |
- WebappDataStorage.SCOPE_INVALID); |
assertTrue("Timestamp is out of range", before <= actual && actual <= after); |
- assertEquals(scope, webAppScope); |
} |
@Test |
@@ -130,7 +154,7 @@ public class WebappRegistryTest { |
assertTrue(mCallbackCalled); |
mCallbackCalled = false; |
- WebappRegistry.registerWebapp(Robolectric.application, "second", "https://www.google.com"); |
+ WebappRegistry.registerWebapp(Robolectric.application, "second", null); |
BackgroundShadowAsyncTask.runBackgroundTasks(); |
// A copy of the expected set needs to be made as the SharedPreferences is using the copy |
@@ -149,12 +173,7 @@ public class WebappRegistryTest { |
@Test |
@Feature({"Webapp"}) |
public void testUnregisterRunsCallback() throws Exception { |
- WebappRegistry.unregisterAllWebapps(Robolectric.application, new Runnable() { |
- @Override |
- public void run() { |
- mCallbackCalled = true; |
- } |
- }); |
+ WebappRegistry.unregisterAllWebapps(Robolectric.application, new CallbackRunner()); |
BackgroundShadowAsyncTask.runBackgroundTasks(); |
Robolectric.runUiThreadTasks(); |
@@ -166,12 +185,7 @@ public class WebappRegistryTest { |
public void testUnregisterClearsRegistry() throws Exception { |
addWebappsToRegistry("test"); |
- WebappRegistry.unregisterAllWebapps(Robolectric.application, new Runnable() { |
- @Override |
- public void run() { |
- mCallbackCalled = true; |
- } |
- }); |
+ WebappRegistry.unregisterAllWebapps(Robolectric.application, new CallbackRunner()); |
BackgroundShadowAsyncTask.runBackgroundTasks(); |
Robolectric.runUiThreadTasks(); |
@@ -293,12 +307,7 @@ public class WebappRegistryTest { |
@Test |
@Feature({"Webapp"}) |
public void testClearWebappHistoryRunsCallback() throws Exception { |
- WebappRegistry.clearWebappHistory(Robolectric.application, new Runnable() { |
- @Override |
- public void run() { |
- mCallbackCalled = true; |
- } |
- }); |
+ WebappRegistry.clearWebappHistory(Robolectric.application, new CallbackRunner()); |
BackgroundShadowAsyncTask.runBackgroundTasks(); |
Robolectric.runUiThreadTasks(); |
@@ -308,26 +317,31 @@ public class WebappRegistryTest { |
@Test |
@Feature({"Webapp"}) |
public void testClearWebappHistory() throws Exception { |
- final String webappScope1 = "https://www.google.com"; |
- final String webappScope2 = "https://drive.google.com"; |
- WebappRegistry.registerWebapp(Robolectric.application, "webapp1", webappScope1); |
- WebappRegistry.registerWebapp(Robolectric.application, "webapp2", webappScope2); |
+ final String webapp1Url = "https://www.google.com"; |
+ final String webapp2Url = "https://drive.google.com"; |
+ Intent shortcutIntent1 = createShortcutIntent(webapp1Url); |
+ Intent shortcutIntent2 = createShortcutIntent(webapp2Url); |
+ |
+ WebappRegistry.registerWebapp(Robolectric.application, "webapp1", |
+ new FetchStorageCallback(shortcutIntent1)); |
+ BackgroundShadowAsyncTask.runBackgroundTasks(); |
+ Robolectric.runUiThreadTasks(); |
+ assertTrue(mCallbackCalled); |
+ |
+ WebappRegistry.registerWebapp(Robolectric.application, "webapp2", |
+ new FetchStorageCallback(shortcutIntent2)); |
BackgroundShadowAsyncTask.runBackgroundTasks(); |
+ Robolectric.runUiThreadTasks(); |
+ assertTrue(mCallbackCalled); |
SharedPreferences webapp1Prefs = Robolectric.application.getSharedPreferences( |
WebappDataStorage.SHARED_PREFS_FILE_PREFIX + "webapp1", Context.MODE_PRIVATE); |
SharedPreferences webapp2Prefs = Robolectric.application.getSharedPreferences( |
WebappDataStorage.SHARED_PREFS_FILE_PREFIX + "webapp2", Context.MODE_PRIVATE); |
- WebappRegistry.clearWebappHistory(Robolectric.application, new Runnable() { |
- @Override |
- public void run() { |
- mCallbackCalled = true; |
- } |
- }); |
+ WebappRegistry.clearWebappHistory(Robolectric.application, new CallbackRunner()); |
BackgroundShadowAsyncTask.runBackgroundTasks(); |
Robolectric.runUiThreadTasks(); |
- |
assertTrue(mCallbackCalled); |
Set<String> actual = mSharedPreferences.getStringSet( |
@@ -344,50 +358,90 @@ public class WebappRegistryTest { |
WebappDataStorage.KEY_LAST_USED, WebappDataStorage.LAST_USED_UNSET); |
assertEquals(WebappDataStorage.LAST_USED_UNSET, actualLastUsed); |
- // Verify that the scope for both web apps is WebappDataStorage.SCOPE_INVALID. |
+ // Verify that the URL and scope for both web apps is WebappDataStorage.URL_INVALID. |
String actualScope = webapp1Prefs.getString( |
- WebappDataStorage.KEY_SCOPE, WebappDataStorage.SCOPE_INVALID); |
- assertEquals(WebappDataStorage.SCOPE_INVALID, actualScope); |
+ WebappDataStorage.KEY_SCOPE, WebappDataStorage.URL_INVALID); |
+ assertEquals(WebappDataStorage.URL_INVALID, actualScope); |
+ String actualUrl = webapp1Prefs.getString( |
+ WebappDataStorage.KEY_URL, WebappDataStorage.URL_INVALID); |
+ assertEquals(WebappDataStorage.URL_INVALID, actualUrl); |
actualScope = webapp2Prefs.getString( |
- WebappDataStorage.KEY_SCOPE, WebappDataStorage.SCOPE_INVALID); |
- assertEquals(WebappDataStorage.SCOPE_INVALID, actualScope); |
+ WebappDataStorage.KEY_SCOPE, WebappDataStorage.URL_INVALID); |
+ assertEquals(WebappDataStorage.URL_INVALID, actualScope); |
+ actualUrl = webapp2Prefs.getString( |
+ WebappDataStorage.KEY_URL, WebappDataStorage.URL_INVALID); |
+ assertEquals(WebappDataStorage.URL_INVALID, actualUrl); |
} |
@Test |
@Feature({"Webapp"}) |
- public void testOpenAfterClearWebappHistory() throws Exception { |
- final String webappScope = "https://www.google.com"; |
- WebappRegistry.registerWebapp(Robolectric.application, "webapp", webappScope); |
+ public void testGetAfterClearWebappHistory() throws Exception { |
+ WebappRegistry.registerWebapp(Robolectric.application, "webapp", null); |
BackgroundShadowAsyncTask.runBackgroundTasks(); |
SharedPreferences webappPrefs = Robolectric.application.getSharedPreferences( |
WebappDataStorage.SHARED_PREFS_FILE_PREFIX + "webapp", Context.MODE_PRIVATE); |
- |
- WebappRegistry.clearWebappHistory(Robolectric.application, new Runnable() { |
- @Override |
- public void run() { |
- mCallbackCalled = true; |
- } |
- }); |
+ WebappRegistry.clearWebappHistory(Robolectric.application, new CallbackRunner()); |
BackgroundShadowAsyncTask.runBackgroundTasks(); |
+ Robolectric.runUiThreadTasks(); |
+ assertTrue(mCallbackCalled); |
- // Open the webapp up and set the scope. |
- WebappDataStorage.open(Robolectric.application, "webapp"); |
- WebappDataStorage.setScope(Robolectric.application, "webapp", webappScope); |
+ // Open the webapp up to set the last used time. |
+ WebappRegistry.getWebappDataStorage(Robolectric.application, "webapp", |
+ new FetchStorageCallback(null)); |
BackgroundShadowAsyncTask.runBackgroundTasks(); |
Robolectric.runUiThreadTasks(); |
assertTrue(mCallbackCalled); |
- // Verify that the last used time is valid and the scope is updated. |
+ // Verify that the last used time is valid. |
long actualLastUsed = webappPrefs.getLong( |
WebappDataStorage.KEY_LAST_USED, WebappDataStorage.LAST_USED_INVALID); |
assertTrue(WebappDataStorage.LAST_USED_INVALID != actualLastUsed); |
assertTrue(WebappDataStorage.LAST_USED_UNSET != actualLastUsed); |
- String actualScope = webappPrefs.getString( |
- WebappDataStorage.KEY_SCOPE, WebappDataStorage.SCOPE_INVALID); |
- assertEquals(webappScope, actualScope); |
} |
+ @Test |
+ @Feature({"Webapp"}) |
+ public void testUpdateAfterClearWebappHistory() throws Exception { |
+ final String webappUrl = "http://www.google.com"; |
+ final Intent shortcutIntent = createShortcutIntent(webappUrl); |
+ WebappRegistry.registerWebapp(Robolectric.application, "webapp", |
+ new FetchStorageCallback(shortcutIntent)); |
+ BackgroundShadowAsyncTask.runBackgroundTasks(); |
+ Robolectric.runUiThreadTasks(); |
+ assertTrue(mCallbackCalled); |
+ |
+ SharedPreferences webappPrefs = Robolectric.application.getSharedPreferences( |
+ WebappDataStorage.SHARED_PREFS_FILE_PREFIX + "webapp", Context.MODE_PRIVATE); |
+ |
+ // Verify that the URL and scope match the original in the intent. |
+ String actualURL = webappPrefs.getString( |
+ WebappDataStorage.KEY_URL, WebappDataStorage.URL_INVALID); |
+ assertEquals(webappUrl, actualURL); |
+ String actualScope = webappPrefs.getString( |
+ WebappDataStorage.KEY_SCOPE, WebappDataStorage.URL_INVALID); |
+ assertEquals(webappUrl, actualScope); |
+ |
+ WebappRegistry.clearWebappHistory(Robolectric.application, new CallbackRunner()); |
+ BackgroundShadowAsyncTask.runBackgroundTasks(); |
+ Robolectric.runUiThreadTasks(); |
+ assertTrue(mCallbackCalled); |
+ |
+ // Update the webapp from the intent again. |
+ WebappRegistry.getWebappDataStorage(Robolectric.application, "webapp", |
+ new FetchStorageCallback(shortcutIntent)); |
+ BackgroundShadowAsyncTask.runBackgroundTasks(); |
+ Robolectric.runUiThreadTasks(); |
+ assertTrue(mCallbackCalled); |
+ |
+ // Verify that the URL and scope match the original in the intent. |
+ actualURL = webappPrefs.getString( |
+ WebappDataStorage.KEY_URL, WebappDataStorage.URL_INVALID); |
+ assertEquals(webappUrl, actualURL); |
+ actualScope = webappPrefs.getString( |
+ WebappDataStorage.KEY_SCOPE, WebappDataStorage.URL_INVALID); |
+ assertEquals(webappUrl, actualScope); |
+ } |
private Set<String> addWebappsToRegistry(String... webapps) { |
final Set<String> expected = new HashSet<String>(Arrays.asList(webapps)); |
@@ -401,4 +455,9 @@ public class WebappRegistryTest { |
return mSharedPreferences.getStringSet( |
WebappRegistry.KEY_WEBAPP_SET, Collections.<String>emptySet()); |
} |
+ |
+ private Intent createShortcutIntent(String url) { |
+ return ShortcutHelper.createWebappShortcutIntent("id", "action", url, url, "name", |
+ "shortName", null, ShortcutHelper.WEBAPP_SHORTCUT_VERSION, 0, 0, 0, false); |
+ } |
} |