Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java |
| index b18caa136cff5e19d374757724b8521a1933c83a..265c517796b77c6081e1a8d2db059dd1d2233672 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java |
| @@ -55,7 +55,7 @@ public class OfflinePageBridge { |
| private static Integer sFeatureMode; |
| /** |
| - * Callback used to saving an offline page. |
| + * Callback used when saving an offline page. |
| */ |
| public interface SavePageCallback { |
| /** |
| @@ -71,7 +71,7 @@ public class OfflinePageBridge { |
| } |
| /** |
| - * Callback used to deleting an offline page. |
| + * Callback used when deleting an offline page. |
| */ |
| public interface DeletePageCallback { |
| /** |
| @@ -86,9 +86,21 @@ public class OfflinePageBridge { |
| } |
| /** |
| + * Callback that delivers information about multiple offline page entries. |
| + */ |
| + public interface MultipleOfflinePageItemCallback { |
| + public void onGetItems(List<OfflinePageItem> allOfflinePages); |
|
fgorski
2016/03/28 17:58:46
nit: do you need public keyword?
nit: add document
dewittj
2016/03/31 18:43:17
Done.
|
| + } |
| + |
| + /** |
| + * Callback used when determining whether we have any offline pages. |
| + */ |
| + public interface HasPagesCallback { void onHasPagesDone(boolean hasPages); } |
| + |
| + /** |
| * Base observer class listeners to be notified of changes to the offline page model. |
| */ |
| - public abstract static class OfflinePageModelObserver { |
| + public static class OfflinePageModelObserver { |
|
fgorski
2016/03/28 17:58:46
why are you removing abstract?
dewittj
2016/03/31 18:43:18
Done.
|
| /** |
| * Called when the native side of offline pages is loaded and now in usable state. |
| */ |
| @@ -109,7 +121,7 @@ public class OfflinePageBridge { |
| public void offlinePageDeleted(long offlineId, ClientId clientId) {} |
| } |
| - private static long getTotalSize(List<OfflinePageItem> offlinePages) { |
| + static long getTotalSize(List<OfflinePageItem> offlinePages) { |
|
fgorski
2016/03/28 17:58:46
I think you can remove this method, as it is no lo
dewittj
2016/03/31 18:43:17
Done.
|
| long totalSize = 0; |
| for (OfflinePageItem offlinePage : offlinePages) { |
| totalSize += offlinePage.getFileSize(); |
| @@ -225,9 +237,40 @@ public class OfflinePageBridge { |
| } |
| /** |
| - * @return Gets all available offline pages. Requires that the model is already loaded. |
| + * Gets all available offline pages, returning results via the provided callback. Requires that |
| + * the model is already loaded. |
|
fgorski
2016/03/28 17:58:46
add assert if that is required.
dewittj
2016/03/31 18:43:17
Done.
|
| + * |
| + * @param callback The callback to run when the operation completes. |
| */ |
| - public List<OfflinePageItem> getAllPages() { |
| + public void getAllPages(final MultipleOfflinePageItemCallback callback) { |
| + OfflinePageModelObserver observer = new OfflinePageModelObserver() { |
| + @Override |
| + public void offlinePageModelLoaded() { |
| + callback.onGetItems(getAllPagesInternal()); |
| + removeObserver(this); |
| + } |
| + }; |
| + |
| + if (mIsNativeOfflinePageModelLoaded) { |
| + observer.offlinePageModelLoaded(); |
| + return; |
| + } |
| + addObserver(observer); |
| + } |
| + |
| + public void hasPages(final HasPagesCallback callback) { |
| + getAllPages(new MultipleOfflinePageItemCallback() { |
| + @Override |
| + public void onGetItems(List<OfflinePageItem> allPages) { |
|
fgorski
2016/03/28 17:58:46
at least put a TODO that this has to be quickly fi
dewittj
2016/03/31 18:43:17
Done.
|
| + callback.onHasPagesDone(!allPages.isEmpty()); |
| + } |
| + }); |
| + } |
| + |
| + /** |
| + * @return All available offline pages. Requires that the model is already loaded. |
| + */ |
| + private List<OfflinePageItem> getAllPagesInternal() { |
| assert mIsNativeOfflinePageModelLoaded; |
| List<OfflinePageItem> result = new ArrayList<OfflinePageItem>(); |
| nativeGetAllPages(mNativeOfflinePageBridge, result); |
| @@ -344,19 +387,10 @@ public class OfflinePageBridge { |
| */ |
| public void deletePage(final ClientId clientId, DeletePageCallback callback) { |
| assert mIsNativeOfflinePageModelLoaded; |
| + ArrayList<ClientId> ids = new ArrayList<ClientId>(); |
| + ids.add(clientId); |
| - recordFreeSpaceHistograms("OfflinePages.DeletePage.FreeSpacePercentage", |
| - "OfflinePages.DeletePage.FreeSpaceMB"); |
| - |
| - DeletePageCallback callbackWrapper = wrapCallbackWithHistogramReporting(callback); |
| - Set<Long> ids = getOfflineIdsForClientId(clientId); |
| - if (ids.size() == 0) { |
| - callback.onDeletePageDone(DeletePageResult.NOT_FOUND); |
| - return; |
| - } |
| - for (Long offlineId : ids) { |
| - nativeDeletePage(mNativeOfflinePageBridge, callbackWrapper, offlineId); |
| - } |
| + deletePagesByClientId(ids, callback); |
| } |
| /** |
| @@ -375,8 +409,8 @@ public class OfflinePageBridge { |
| deletePages(idList, callback); |
| } |
| - protected void deletePages(List<Long> offlineIds, DeletePageCallback callback) { |
| - long[] ids = new long[offlineIds.size()]; |
| + protected void deletePages(List<Long> offlineIds, final DeletePageCallback callback) { |
|
fgorski
2016/03/28 17:58:46
do you need final here? and next line?
dewittj
2016/03/31 18:43:17
Done.
|
| + final long[] ids = new long[offlineIds.size()]; |
| for (int i = 0; i < offlineIds.size(); i++) { |
| ids[i] = offlineIds.get(i); |
| } |
| @@ -506,6 +540,8 @@ public class OfflinePageBridge { |
| mIsNativeOfflinePageModelLoaded = false; |
| mNativeOfflinePageBridge = 0; |
| + |
| + mObservers.clear(); |
|
fgorski
2016/03/28 17:58:46
we should probably add a TODO: create a model dest
dewittj
2016/03/31 18:43:17
Done.
|
| } |
| @CalledByNative |
| @@ -553,8 +589,6 @@ public class OfflinePageBridge { |
| private native void nativeSavePage(long nativeOfflinePageBridge, SavePageCallback callback, |
| WebContents webContents, String clientNamespace, String clientId); |
| private native void nativeMarkPageAccessed(long nativeOfflinePageBridge, long offlineId); |
| - private native void nativeDeletePage( |
| - long nativeOfflinePageBridge, DeletePageCallback callback, long offlineId); |
| private native void nativeDeletePages( |
| long nativeOfflinePageBridge, DeletePageCallback callback, long[] offlineIds); |
| private native void nativeGetPagesToCleanUp( |