| 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();
|
| + }
|
| +
|
| }
|
|
|