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 9e17f3c2be99f313a8d15ca548294977de83d4d4..b3912fc66c46162eb4bb6691f54fea3376809637 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 |
@@ -175,18 +175,6 @@ public class OfflinePageBridge { |
nativeGetAllPages(mNativeOfflinePageBridge, result, callback); |
} |
- /** @return A list of all offline ids that match a particular (namespace, client_id) pair. */ |
- Set<Long> getOfflineIdsForClientId(ClientId clientId) { |
- assert mIsNativeOfflinePageModelLoaded; |
- long[] offlineIds = nativeGetOfflineIdsForClientId( |
- mNativeOfflinePageBridge, clientId.getNamespace(), clientId.getId()); |
- Set<Long> result = new HashSet<>(offlineIds.length); |
- for (long id : offlineIds) { |
- result.add(id); |
- } |
- return result; |
- } |
- |
/** |
* Gets the offline pages associated with the provided client IDs. |
* |
@@ -197,16 +185,16 @@ public class OfflinePageBridge { |
@VisibleForTesting |
public void getPagesByClientIds( |
final List<ClientId> clientIds, final Callback<List<OfflinePageItem>> callback) { |
- runWhenLoaded(new Runnable() { |
- @Override |
- public void run() { |
- List<OfflinePageItem> result = new ArrayList<>(); |
- for (ClientId clientId : clientIds) { |
- result.addAll(getPagesByClientIdInternal(clientId)); |
- } |
- callback.onResult(result); |
- } |
- }); |
+ String[] namespaces = new String[clientIds.size()]; |
+ String[] ids = new String[clientIds.size()]; |
+ |
+ for (int i = 0; i < clientIds.size(); i++) { |
+ namespaces[i] = clientIds.get(i).getNamespace(); |
+ ids[i] = clientIds.get(i).getId(); |
+ } |
+ |
+ List<OfflinePageItem> result = new ArrayList<>(); |
+ nativeGetPagesByClientId(mNativeOfflinePageBridge, result, namespaces, ids, callback); |
} |
/** |
@@ -282,20 +270,7 @@ public class OfflinePageBridge { |
mNativeOfflinePageBridge, requestIds, new RequestsRemovedCallback(callback)); |
} |
- private List<OfflinePageItem> getPagesByClientIdInternal(ClientId clientId) { |
- Set<Long> ids = getOfflineIdsForClientId(clientId); |
- List<OfflinePageItem> result = new ArrayList<>(); |
- for (long offlineId : ids) { |
- // TODO(dewittj): Restructure the native API to avoid this loop with a native call. |
- OfflinePageItem item = nativeGetPageByOfflineId(mNativeOfflinePageBridge, offlineId); |
- if (item != null) { |
- result.add(item); |
- } |
- } |
- return result; |
- } |
- |
- /** |
+ /** |
* Get the offline page associated with the provided offline URL. |
* |
* @param onlineUrl URL of the page. |
@@ -316,14 +291,7 @@ public class OfflinePageBridge { |
* matching {@link OfflinePageItem} if found. Will pass back <code>null</code> if not. |
*/ |
public void getPageByOfflineId(final long offlineId, final Callback<OfflinePageItem> callback) { |
- runWhenLoaded(new Runnable() { |
- @Override |
- public void run() { |
- OfflinePageItem item = |
- nativeGetPageByOfflineId(mNativeOfflinePageBridge, offlineId); |
- callback.onResult(item); |
- } |
- }); |
+ nativeGetPageByOfflineId(mNativeOfflinePageBridge, offlineId, callback); |
} |
/** |
@@ -408,21 +376,15 @@ public class OfflinePageBridge { |
* @param callback A callback that will be called once operation is completed. |
*/ |
public void deletePagesByClientId(List<ClientId> clientIds, Callback<Integer> callback) { |
- assert mIsNativeOfflinePageModelLoaded; |
- List<Long> idList = new ArrayList<>(clientIds.size()); |
- for (ClientId clientId : clientIds) { |
- idList.addAll(getOfflineIdsForClientId(clientId)); |
- } |
- deletePages(idList, callback); |
- } |
+ String[] namespaces = new String[clientIds.size()]; |
+ String[] ids = new String[clientIds.size()]; |
- void deletePages(List<Long> offlineIds, Callback<Integer> callback) { |
- long[] ids = new long[offlineIds.size()]; |
- for (int i = 0; i < offlineIds.size(); i++) { |
- ids[i] = offlineIds.get(i); |
+ for (int i = 0; i < clientIds.size(); i++) { |
+ namespaces[i] = clientIds.get(i).getNamespace(); |
+ ids[i] = clientIds.get(i).getId(); |
} |
- nativeDeletePages(mNativeOfflinePageBridge, callback, ids); |
+ nativeDeletePagesByClientId(mNativeOfflinePageBridge, namespaces, ids, callback); |
} |
/** |
@@ -470,30 +432,6 @@ public class OfflinePageBridge { |
} |
@VisibleForTesting |
- ClientId getClientIdForOfflineId(long offlineId) { |
- OfflinePageItem item = nativeGetPageByOfflineId(mNativeOfflinePageBridge, offlineId); |
- if (item != null) { |
- return item.getClientId(); |
- } |
- return null; |
- } |
- |
- private void runWhenLoaded(final Runnable runnable) { |
- if (isOfflinePageModelLoaded()) { |
- ThreadUtils.postOnUiThread(runnable); |
- return; |
- } |
- |
- addObserver(new OfflinePageModelObserver() { |
- @Override |
- public void offlinePageModelLoaded() { |
- removeObserver(this); |
- runnable.run(); |
- } |
- }); |
- } |
- |
- @VisibleForTesting |
static void setOfflineBookmarksEnabledForTesting(boolean enabled) { |
sOfflineBookmarksEnabled = enabled; |
} |
@@ -567,21 +505,21 @@ public class OfflinePageBridge { |
final Callback<List<OfflinePageItem>> callback); |
private native void nativeCheckPagesExistOffline(long nativeOfflinePageBridge, Object[] urls, |
CheckPagesExistOfflineCallbackInternal callback); |
- |
- @VisibleForTesting |
- native long[] nativeGetOfflineIdsForClientId( |
- long nativeOfflinePageBridge, String clientNamespace, String clientId); |
- |
@VisibleForTesting |
native void nativeGetRequestsInQueue( |
long nativeOfflinePageBridge, Callback<SavePageRequest[]> callback); |
- |
@VisibleForTesting |
native void nativeRemoveRequestsFromQueue( |
long nativeOfflinePageBridge, long[] requestIds, RequestsRemovedCallback callback); |
- |
@VisibleForTesting |
- native OfflinePageItem nativeGetPageByOfflineId(long nativeOfflinePageBridge, long offlineId); |
+ native void nativeGetPageByOfflineId( |
+ long nativeOfflinePageBridge, long offlineId, Callback<OfflinePageItem> callback); |
+ @VisibleForTesting |
+ native void nativeGetPagesByClientId(long nativeOfflinePageBridge, List<OfflinePageItem> result, |
+ String[] namespaces, String[] ids, Callback<List<OfflinePageItem>> callback); |
+ @VisibleForTesting |
+ native void nativeDeletePagesByClientId(long nativeOfflinePageBridge, String[] namespaces, |
+ String[] ids, Callback<Integer> callback); |
private native void nativeSelectPageForOnlineUrl( |
long nativeOfflinePageBridge, String onlineUrl, int tabId, |
Callback<OfflinePageItem> callback); |
@@ -589,8 +527,6 @@ public class OfflinePageBridge { |
WebContents webContents, String clientNamespace, String clientId); |
private native void nativeSavePageLater(long nativeOfflinePageBridge, String url, |
String clientNamespace, String clientId, boolean userRequested); |
- private native void nativeDeletePages( |
- long nativeOfflinePageBridge, Callback<Integer> callback, long[] offlineIds); |
private native String nativeGetOfflinePageHeaderForReload( |
long nativeOfflinePageBridge, WebContents webContents); |
} |