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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java

Issue 1739503002: Makes the OfflinePageBridge.getAllPages method asynchronous. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Wait for model load in new async method. Created 4 years, 9 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/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(

Powered by Google App Engine
This is Rietveld 408576698