Index: chrome/android/javatests/src/org/chromium/chrome/browser/download/ui/StubbedProvider.java |
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/ui/StubbedProvider.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/ui/StubbedProvider.java |
index 95779dc8f630ac5d789740007fb0c97e3a8a7445..9ce1ba74a98351c5837022d6f792397d5031cc1f 100644 |
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/ui/StubbedProvider.java |
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/ui/StubbedProvider.java |
@@ -8,26 +8,33 @@ import static junit.framework.Assert.assertEquals; |
import static junit.framework.Assert.assertNull; |
import android.content.ComponentName; |
+import android.os.Handler; |
+import android.os.Looper; |
+import android.text.TextUtils; |
import org.chromium.base.ThreadUtils; |
+import org.chromium.chrome.browser.download.DownloadInfo; |
import org.chromium.chrome.browser.download.DownloadItem; |
-import org.chromium.chrome.browser.download.ui.BackendProvider.DownloadDelegate; |
-import org.chromium.chrome.browser.download.ui.BackendProvider.OfflinePageDelegate; |
import org.chromium.chrome.browser.offlinepages.downloads.OfflinePageDownloadBridge; |
import org.chromium.chrome.browser.offlinepages.downloads.OfflinePageDownloadItem; |
import org.chromium.chrome.browser.widget.selection.SelectionDelegate; |
import org.chromium.content.browser.test.util.CallbackHelper; |
+import java.text.SimpleDateFormat; |
import java.util.ArrayList; |
import java.util.List; |
+import java.util.Locale; |
/** Stubs out backends used by the Download Home UI. */ |
public class StubbedProvider implements BackendProvider { |
/** Stubs out the DownloadManagerService. */ |
- public static class StubbedDownloadDelegate implements DownloadDelegate { |
+ public class StubbedDownloadDelegate implements DownloadDelegate { |
public final CallbackHelper addCallback = new CallbackHelper(); |
public final CallbackHelper removeCallback = new CallbackHelper(); |
+ public final CallbackHelper checkExternalCallback = new CallbackHelper(); |
+ public final CallbackHelper removeDownloadCallback = new CallbackHelper(); |
+ |
public final List<DownloadItem> regularItems = new ArrayList<>(); |
public final List<DownloadItem> offTheRecordItems = new ArrayList<>(); |
private DownloadHistoryAdapter mAdapter; |
@@ -47,7 +54,7 @@ public class StubbedProvider implements BackendProvider { |
@Override |
public void getAllDownloads(final boolean isOffTheRecord) { |
- ThreadUtils.runOnUiThread(new Runnable() { |
+ mHandler.post(new Runnable() { |
@Override |
public void run() { |
mAdapter.onAllDownloadsRetrieved( |
@@ -55,12 +62,29 @@ public class StubbedProvider implements BackendProvider { |
} |
}); |
} |
+ |
+ @Override |
+ public void checkForExternallyRemovedDownloads(boolean isOffTheRecord) { |
+ checkExternalCallback.notifyCalled(); |
+ } |
+ |
+ @Override |
+ public void removeDownload(final String guid, final boolean isOffTheRecord) { |
+ mHandler.post(new Runnable() { |
+ @Override |
+ public void run() { |
+ mAdapter.onDownloadItemRemoved(guid, isOffTheRecord); |
+ removeDownloadCallback.notifyCalled(); |
+ } |
+ }); |
+ } |
} |
/** Stubs out the OfflinePageDownloadBridge. */ |
- public static class StubbedOfflinePageDelegate implements OfflinePageDelegate { |
+ public class StubbedOfflinePageDelegate implements OfflinePageDelegate { |
public final CallbackHelper addCallback = new CallbackHelper(); |
public final CallbackHelper removeCallback = new CallbackHelper(); |
+ public final CallbackHelper deleteItemCallback = new CallbackHelper(); |
public final List<OfflinePageDownloadItem> items = new ArrayList<>(); |
public OfflinePageDownloadBridge.Observer observer; |
@@ -90,16 +114,37 @@ public class StubbedProvider implements BackendProvider { |
return items; |
} |
+ @Override |
+ public void deleteItem(final String guid) { |
+ for (OfflinePageDownloadItem item : items) { |
+ if (TextUtils.equals(item.getGuid(), guid)) { |
+ items.remove(item); |
+ break; |
+ } |
+ } |
+ |
+ mHandler.post(new Runnable() { |
+ @Override |
+ public void run() { |
+ observer.onItemDeleted(guid); |
+ deleteItemCallback.notifyCalled(); |
+ } |
+ }); |
+ } |
+ |
@Override public void openItem(String guid, ComponentName componentName) { } |
- @Override public void deleteItem(String guid) { } |
@Override public void destroy() { } |
} |
- private StubbedDownloadDelegate mDownloadDelegate; |
- private StubbedOfflinePageDelegate mOfflineDelegate; |
- private SelectionDelegate<DownloadHistoryItemWrapper> mSelectionDelegate; |
+ private static final long ONE_GIGABYTE = 1024L * 1024L * 1024L; |
+ |
+ private final Handler mHandler; |
+ private final StubbedDownloadDelegate mDownloadDelegate; |
+ private final StubbedOfflinePageDelegate mOfflineDelegate; |
+ private final SelectionDelegate<DownloadHistoryItemWrapper> mSelectionDelegate; |
public StubbedProvider() { |
+ mHandler = new Handler(Looper.getMainLooper()); |
mDownloadDelegate = new StubbedDownloadDelegate(); |
mOfflineDelegate = new StubbedOfflinePageDelegate(); |
mSelectionDelegate = new SelectionDelegate<>(); |
@@ -119,4 +164,114 @@ public class StubbedProvider implements BackendProvider { |
public SelectionDelegate<DownloadHistoryItemWrapper> getSelectionDelegate() { |
return mSelectionDelegate; |
} |
+ |
+ /** Creates a new DownloadItem with pre-defined values. */ |
+ public static DownloadItem createDownloadItem(int which, String date) throws Exception { |
+ DownloadItem item = null; |
+ if (which == 0) { |
+ item = new DownloadItem(false, new DownloadInfo.Builder() |
+ .setUrl("https://google.com") |
+ .setContentLength(1) |
+ .setFileName("first_file.jpg") |
+ .setFilePath("/storage/fake_path/Downloads/first_file.jpg") |
+ .setDownloadGuid("first_guid") |
+ .setMimeType("image/jpeg") |
+ .build()); |
+ } else if (which == 1) { |
+ item = new DownloadItem(false, new DownloadInfo.Builder() |
+ .setUrl("https://one.com") |
+ .setContentLength(10) |
+ .setFileName("second_file.gif") |
+ .setFilePath("/storage/fake_path/Downloads/second_file.gif") |
+ .setDownloadGuid("second_guid") |
+ .setMimeType("image/gif") |
+ .build()); |
+ } else if (which == 2) { |
+ item = new DownloadItem(false, new DownloadInfo.Builder() |
+ .setUrl("https://is.com") |
+ .setContentLength(100) |
+ .setFileName("third_file") |
+ .setFilePath("/storage/fake_path/Downloads/third_file") |
+ .setDownloadGuid("third_guid") |
+ .setMimeType("text/plain") |
+ .build()); |
+ } else if (which == 3) { |
+ item = new DownloadItem(false, new DownloadInfo.Builder() |
+ .setUrl("https://the.com") |
+ .setContentLength(5) |
+ .setFileName("four.webm") |
+ .setFilePath("/storage/fake_path/Downloads/four.webm") |
+ .setDownloadGuid("fourth_guid") |
+ .setMimeType("video/webm") |
+ .build()); |
+ } else if (which == 4) { |
+ item = new DownloadItem(false, new DownloadInfo.Builder() |
+ .setUrl("https://loneliest.com") |
+ .setContentLength(50) |
+ .setFileName("five.mp3") |
+ .setFilePath("/storage/fake_path/Downloads/five.mp3") |
+ .setDownloadGuid("fifth_guid") |
+ .setMimeType("audio/mp3") |
+ .build()); |
+ } else if (which == 5) { |
+ item = new DownloadItem(false, new DownloadInfo.Builder() |
+ .setUrl("https://number.com") |
+ .setContentLength(500) |
+ .setFileName("six.mp3") |
+ .setFilePath("/storage/fake_path/Downloads/six.mp3") |
+ .setDownloadGuid("sixth_guid") |
+ .setMimeType("audio/mp3") |
+ .build()); |
+ } else if (which == 6) { |
+ item = new DownloadItem(false, new DownloadInfo.Builder() |
+ .setUrl("https://sigh.com") |
+ .setContentLength(ONE_GIGABYTE) |
+ .setFileName("huge_image.png") |
+ .setFilePath("/storage/fake_path/Downloads/huge_image.png") |
+ .setDownloadGuid("seventh_guid") |
+ .setMimeType("image/png") |
+ .build()); |
+ } else if (which == 7) { |
+ item = new DownloadItem(false, new DownloadInfo.Builder() |
+ .setUrl("https://sleepy.com") |
+ .setContentLength(ONE_GIGABYTE / 2) |
+ .setFileName("sleep.pdf") |
+ .setFilePath("/storage/fake_path/Downloads/sleep.pdf") |
+ .setDownloadGuid("eighth_guid") |
+ .setMimeType("application/pdf") |
+ .build()); |
+ } else { |
+ return null; |
+ } |
+ |
+ item.setStartTime(dateToEpoch(date)); |
+ return item; |
+ } |
+ |
+ /** Creates a new OfflinePageDownloadItem with pre-defined values. */ |
+ public static OfflinePageDownloadItem createOfflineItem(int which, String date) |
+ throws Exception { |
+ long startTime = dateToEpoch(date); |
+ if (which == 0) { |
+ return new OfflinePageDownloadItem("offline_guid_1", "https://url.com", |
+ "page 1", "/data/fake_path/Downloads/first_file", startTime, 1000); |
+ } else if (which == 1) { |
+ return new OfflinePageDownloadItem("offline_guid_2", "http://stuff_and_things.com", |
+ "page 2", "/data/fake_path/Downloads/file_two", startTime, 10000); |
+ } else if (which == 2) { |
+ return new OfflinePageDownloadItem("offline_guid_3", "https://url.com", |
+ "page 3", "/data/fake_path/Downloads/3_file", startTime, 100000); |
+ } else if (which == 3) { |
+ return new OfflinePageDownloadItem("offline_guid_4", "https://thangs.com", |
+ "page 4", "/data/fake_path/Downloads/4", startTime, ONE_GIGABYTE * 5L); |
+ } else { |
+ return null; |
+ } |
+ } |
+ |
+ /** Converts a date string to a timestamp. */ |
+ private static long dateToEpoch(String dateStr) throws Exception { |
+ return new SimpleDateFormat("yyyyMMdd HH:mm", Locale.getDefault()).parse(dateStr).getTime(); |
+ } |
+ |
} |