summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbburns <bburns@chromium.org>2016-03-07 14:07:10 -0800
committerCommit bot <commit-bot@chromium.org>2016-03-07 22:08:53 +0000
commit98e033bf0dcfba78c8a022ca07af688fefb7cf22 (patch)
tree23f99667bb857b1f09406cd96968aa352db3fea1
parent96f45a252155567f00a5c242e9db799424de51da (diff)
downloadchromium_src-98e033bf0dcfba78c8a022ca07af688fefb7cf22.zip
chromium_src-98e033bf0dcfba78c8a022ca07af688fefb7cf22.tar.gz
chromium_src-98e033bf0dcfba78c8a022ca07af688fefb7cf22.tar.bz2
Java side of purging BookmarkId from offline pages
BUG=NONE Review URL: https://codereview.chromium.org/1739163005 Cr-Commit-Position: refs/heads/master@{#379662}
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBookmarkRow.java4
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java32
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java6
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java23
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/offlinepages/ClientId.java51
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridge.java109
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageFreeUpSpaceDialog.java13
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageItem.java26
-rw-r--r--chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridgeTest.java30
-rw-r--r--chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtilsTest.java5
-rw-r--r--chrome/browser/android/offline_pages/offline_page_bridge.cc4
11 files changed, 192 insertions, 111 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBookmarkRow.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBookmarkRow.java
index 84d5d99..7a17f6f 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBookmarkRow.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkBookmarkRow.java
@@ -18,6 +18,7 @@ import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
+import org.chromium.chrome.browser.offlinepages.ClientId;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
import org.chromium.chrome.browser.offlinepages.OfflinePageItem;
import org.chromium.chrome.browser.widget.RoundedIconGenerator;
@@ -90,7 +91,8 @@ public class BookmarkBookmarkRow extends BookmarkRow implements LargeIconCallbac
OfflinePageItem offlinePage = null;
OfflinePageBridge bridge = mDelegate.getModel().getOfflinePageBridge();
if (mDelegate.getCurrentState() == BookmarkUIState.STATE_FILTER && bridge != null) {
- offlinePage = bridge.getPageByBookmarkId(bookmarkId);
+ offlinePage =
+ bridge.getPageByClientId(ClientId.createClientIdForBookmarkId(bookmarkId));
}
TextView textView = (TextView) findViewById(R.id.offline_page_size);
View bookmarkRowView = findViewById(R.id.bookmark_row);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java
index 3f40894..d341cbc 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkEditActivity.java
@@ -20,6 +20,7 @@ import org.chromium.base.metrics.RecordUserAction;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver;
+import org.chromium.chrome.browser.offlinepages.ClientId;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.DeletePageCallback;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageModelObserver;
@@ -119,7 +120,8 @@ public class BookmarkEditActivity extends BookmarkActivityBase {
mOfflinePageModelObserver = new OfflinePageModelObserver() {
@Override
- public void offlinePageDeleted(BookmarkId bookmarkId) {
+ public void offlinePageDeleted(long offlineId, ClientId clientId) {
+ BookmarkId bookmarkId = BookmarkModel.getBookmarkIdForOfflineClientId(clientId);
if (mBookmarkId.equals(bookmarkId)) {
updateOfflineSection();
}
@@ -199,9 +201,9 @@ public class BookmarkEditActivity extends BookmarkActivityBase {
&& mModel.getBookmarkById(mBookmarkId).isUrlEditable()) {
String fixedUrl = UrlUtilities.fixupUrl(url);
if (fixedUrl != null && !fixedUrl.equals(originalUrl)) {
+ ClientId clientId = ClientId.createClientIdForBookmarkId(mBookmarkId);
boolean hasOfflinePage = OfflinePageBridge.isEnabled()
- && mModel.getOfflinePageBridge()
- .getPageByBookmarkId(mBookmarkId) != null;
+ && mModel.getOfflinePageBridge().getPageByClientId(clientId) != null;
RecordHistogram.recordBooleanHistogram(
"OfflinePages.Edit.BookmarkUrlChangedForOfflinePage", hasOfflinePage);
mModel.setBookmarkUrl(mBookmarkId, fixedUrl);
@@ -243,7 +245,8 @@ public class BookmarkEditActivity extends BookmarkActivityBase {
Button saveRemoveVisitButton = (Button) findViewById(R.id.offline_page_save_remove_button);
TextView offlinePageInfoTextView = (TextView) findViewById(R.id.offline_page_info_text);
- OfflinePageItem offlinePage = offlinePageBridge.getPageByBookmarkId(mBookmarkId);
+ ClientId clientId = ClientId.createClientIdForBookmarkId(mBookmarkId);
+ OfflinePageItem offlinePage = offlinePageBridge.getPageByClientId(clientId);
if (offlinePage != null) {
// Offline page exists. Show information and button to remove.
offlinePageInfoTextView.setText(
@@ -280,15 +283,15 @@ public class BookmarkEditActivity extends BookmarkActivityBase {
@Override
public void onClick(View v) {
recordOfflineButtonAction(true);
- mModel.getOfflinePageBridge().deletePage(
- mBookmarkId, new DeletePageCallback() {
- @Override
- public void onDeletePageDone(int deletePageResult) {
- // TODO(fgorski): Add snackbar upon failure.
- // Always update UI, as buttons might be disabled.
- updateOfflineSection();
- }
- });
+ ClientId clientId = ClientId.createClientIdForBookmarkId(mBookmarkId);
+ mModel.getOfflinePageBridge().deletePage(clientId, new DeletePageCallback() {
+ @Override
+ public void onDeletePageDone(int deletePageResult) {
+ // TODO(fgorski): Add snackbar upon failure.
+ // Always update UI, as buttons might be disabled.
+ updateOfflineSection();
+ }
+ });
button.setClickable(false);
}
});
@@ -301,8 +304,9 @@ public class BookmarkEditActivity extends BookmarkActivityBase {
@Override
public void onClick(View v) {
recordOfflineButtonAction(true);
+ ClientId clientId = ClientId.createClientIdForBookmarkId(mBookmarkId);
mModel.getOfflinePageBridge().savePage(
- mWebContents, mBookmarkId, new SavePageCallback() {
+ mWebContents, clientId, new SavePageCallback() {
@Override
public void onSavePageDone(
int savePageResult, String url, long offlineId) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
index 9f89b12..313fff8 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkItemsAdapter.java
@@ -17,6 +17,7 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkItem;
import org.chromium.chrome.browser.bookmarks.BookmarkBridge.BookmarkModelObserver;
import org.chromium.chrome.browser.bookmarks.BookmarkPromoHeader.PromoHeaderShowingChangeListener;
+import org.chromium.chrome.browser.offlinepages.ClientId;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageModelObserver;
import org.chromium.chrome.browser.offlinepages.OfflinePageFreeUpSpaceCallback;
@@ -282,9 +283,10 @@ class BookmarkItemsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
}
@Override
- public void offlinePageDeleted(BookmarkId bookmarkId) {
+ public void offlinePageDeleted(long offlineId, ClientId clientId) {
if (mDelegate.getCurrentState() == BookmarkUIState.STATE_FILTER) {
- int deletedPosition = getPositionForBookmark(bookmarkId);
+ BookmarkId id = BookmarkModel.getBookmarkIdForOfflineClientId(clientId);
+ int deletedPosition = getPositionForBookmark(id);
if (deletedPosition >= 0) {
removeItem(deletedPosition);
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
index 43e7776..f231e75 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.bookmarks;
import org.chromium.base.ObserverList;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram;
+import org.chromium.chrome.browser.offlinepages.ClientId;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageModelObserver;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.SavePageCallback;
@@ -233,7 +234,8 @@ public class BookmarkModel extends BookmarkBridge {
if (mOfflinePageBridge != null) {
RecordHistogram.recordBooleanHistogram("OfflinePages.IncognitoSave",
webContents.isIncognito());
- mOfflinePageBridge.savePage(webContents, bookmarkId, new SavePageCallback() {
+ ClientId clientId = ClientId.createClientIdForBookmarkId(bookmarkId);
+ mOfflinePageBridge.savePage(webContents, clientId, new SavePageCallback() {
@Override
public void onSavePageDone(int savePageResult, String url, long offlineId) {
int saveResult;
@@ -268,8 +270,9 @@ public class BookmarkModel extends BookmarkBridge {
String url = getBookmarkById(bookmarkId).getUrl();
if (mOfflinePageBridge == null) return url;
+ ClientId clientId = ClientId.createClientIdForBookmarkId(bookmarkId);
return mOfflinePageBridge.getLaunchUrlAndMarkAccessed(
- mOfflinePageBridge.getPageByBookmarkId(bookmarkId), url);
+ mOfflinePageBridge.getPageByClientId(clientId), url);
}
/**
@@ -299,8 +302,9 @@ public class BookmarkModel extends BookmarkBridge {
List<BookmarkId> bookmarkIds = new ArrayList<BookmarkId>();
for (OfflinePageItem offlinePage : offlinePages) {
- if (existingBookmarks.contains(offlinePage.getBookmarkId())) {
- bookmarkIds.add(offlinePage.getBookmarkId());
+ BookmarkId bookmarkId = getBookmarkIdForOfflineClientId(offlinePage.getClientId());
+ if (existingBookmarks.contains(bookmarkId)) {
+ bookmarkIds.add(bookmarkId);
}
}
return bookmarkIds;
@@ -312,4 +316,15 @@ public class BookmarkModel extends BookmarkBridge {
public OfflinePageBridge getOfflinePageBridge() {
return mOfflinePageBridge;
}
+
+ /**
+ * @param id The client id to convert.
+ * @return The bookmark id contained in the specified client id.
+ */
+ public static BookmarkId getBookmarkIdForOfflineClientId(ClientId id) {
+ if (id.getNamespace() != OfflinePageBridge.BOOKMARK_NAMESPACE) {
+ return new BookmarkId(BookmarkType.NORMAL, -1);
+ }
+ return BookmarkId.getBookmarkIdFromString(id.getId());
+ }
}
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/ClientId.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/ClientId.java
new file mode 100644
index 0000000..dacfa49
--- /dev/null
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/ClientId.java
@@ -0,0 +1,51 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.offlinepages;
+
+import org.chromium.components.bookmarks.BookmarkId;
+
+/**
+ * Object to hold a client identifier for an offline page.
+ */
+public class ClientId {
+ private String mNamespace;
+ private String mId;
+
+ public ClientId(String namespace, String id) {
+ mNamespace = namespace;
+ mId = id;
+ }
+
+ public String getNamespace() {
+ return mNamespace;
+ }
+
+ public String getId() {
+ return mId;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o instanceof ClientId) {
+ ClientId otherId = (ClientId) o;
+ return otherId.getNamespace().equals(mNamespace) && otherId.getId().equals(mId);
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return (mNamespace + ":" + mId).hashCode();
+ }
+
+ /**
+ * Create a client id for a bookmark
+ * @param id The bookmark id to wrap.
+ * @return A {@link ClientId} that represents this BookmarkId.
+ */
+ public static ClientId createClientIdForBookmarkId(BookmarkId id) {
+ return new ClientId(OfflinePageBridge.BOOKMARK_NAMESPACE, id.toString());
+ }
+}
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 b0dc37c..25165dd 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
@@ -12,8 +12,6 @@ import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.browser.profiles.Profile;
-import org.chromium.components.bookmarks.BookmarkId;
-import org.chromium.components.bookmarks.BookmarkType;
import org.chromium.components.offlinepages.DeletePageResult;
import org.chromium.components.offlinepages.FeatureMode;
import org.chromium.components.offlinepages.SavePageResult;
@@ -88,11 +86,11 @@ public final class OfflinePageBridge {
/**
* Called when an offline page is deleted. This can be called as a result of
- * TODO(bburns): Switch to offline id/client id
* #checkOfflinePageMetadata().
- * @param bookmarkId A bookmark ID of the deleted offline page.
+ * @param offlineId The offline ID of the deleted offline page.
+ * @param clientId The client supplied ID of the deleted offline page.
*/
- public void offlinePageDeleted(BookmarkId id) {}
+ public void offlinePageDeleted(long offlineId, ClientId clientId) {}
}
private static long getTotalSize(List<OfflinePageItem> offlinePages) {
@@ -229,10 +227,10 @@ public final class OfflinePageBridge {
* @return A list of all offline ids that match a particular
* (namespace, client_id)
*/
- private Set<Long> getOfflineIdsForClientId(String clientIdNamespace, String clientId) {
+ private Set<Long> getOfflineIdsForClientId(ClientId clientId) {
assert mIsNativeOfflinePageModelLoaded;
long[] offlineIds = nativeGetOfflineIdsForClientId(
- mNativeOfflinePageBridge, clientIdNamespace, clientId);
+ mNativeOfflinePageBridge, clientId.getNamespace(), clientId.getId());
Set<Long> result = new HashSet<>(offlineIds.length);
for (long id : offlineIds) {
result.add(id);
@@ -243,18 +241,17 @@ public final class OfflinePageBridge {
/**
* Gets an offline page associated with a provided bookmark ID.
*
- * @param bookmarkId Id of the bookmark associated with an offline page.
- * @return An {@link OfflinePageItem} matching the bookmark Id or <code>null</code> if none
+ * @param clientId Client's ID associated with an offline page.
+ * @return A {@link OfflinePageItem} matching the bookmark Id or <code>null</code> if none
* exist.
*/
- public OfflinePageItem getPageByBookmarkId(BookmarkId bookmarkId) {
- Set<Long> ids =
- getOfflineIdsForClientId(BOOKMARK_NAMESPACE, Long.toString(bookmarkId.getId()));
+ public OfflinePageItem getPageByClientId(ClientId clientId) {
+ Set<Long> ids = getOfflineIdsForClientId(clientId);
if (ids.size() == 0) {
return null;
}
- Long offlineId = ids.iterator().next();
- // TODO(bburns): Handle multiple client ids better.
+ // TODO: a better job of choosing which page (e.g. timestamp?)
+ long offlineId = ids.iterator().next();
return nativeGetPageByOfflineId(mNativeOfflinePageBridge, offlineId);
}
@@ -272,7 +269,8 @@ public final class OfflinePageBridge {
* Gets an offline page associated with a provided offline URL.
*
* @param string URL pointing to the offline copy of the web page.
- * @return An {@link OfflinePageItem} matching the offline URL or <code>null</code> if not
+ * @return An {@link OfflinePageItem} matching the offline URL or <code>null
+ </code> if not
* found.
*/
public OfflinePageItem getPageByOfflineUrl(String offlineUrl) {
@@ -283,11 +281,11 @@ public final class OfflinePageBridge {
* Saves the web page loaded into web contents offline.
*
* @param webContents Contents of the page to save.
- * @param bookmarkId Id of the bookmark related to the offline page.
+ * @param ClientId of the bookmark related to the offline page.
* @param callback Interface that contains a callback.
* @see SavePageCallback
*/
- public void savePage(final WebContents webContents, final BookmarkId bookmarkId,
+ public void savePage(final WebContents webContents, final ClientId clientId,
final SavePageCallback callback) {
assert mIsNativeOfflinePageModelLoaded;
assert webContents != null;
@@ -313,70 +311,67 @@ public final class OfflinePageBridge {
};
recordFreeSpaceHistograms(
"OfflinePages.SavePage.FreeSpacePercentage", "OfflinePages.SavePage.FreeSpaceMB");
- String namespace = BOOKMARK_NAMESPACE;
- String clientId = Long.toString(bookmarkId.getId());
- nativeSavePage(mNativeOfflinePageBridge, callbackWrapper, webContents, namespace, clientId);
+ nativeSavePage(mNativeOfflinePageBridge, callbackWrapper, webContents,
+ clientId.getNamespace(), clientId.getId());
}
/**
* Marks that an offline page related to a specified bookmark has been accessed.
*
- * @param bookmarkId Bookmark ID for which the offline copy will be deleted.
+ * @param offlineId offline ID for which the offline copy will be deleted.
*/
- private void markPageAccessed(BookmarkId bookmarkId) {
+ private void markPageAccessed(long offlineId) {
assert mIsNativeOfflinePageModelLoaded;
- Set<Long> ids =
- getOfflineIdsForClientId(BOOKMARK_NAMESPACE, Long.toString(bookmarkId.getId()));
- if (ids.size() == 0) {
- return;
- }
- Long offlineId = ids.iterator().next();
nativeMarkPageAccessed(mNativeOfflinePageBridge, offlineId);
}
/**
* Deletes an offline page related to a specified bookmark.
*
- * @param bookmarkId Bookmark ID for which the offline copy will be deleted.
+ * @param clientId Client ID for which the offline copy will be deleted.
* @param callback Interface that contains a callback.
* @see DeletePageCallback
*/
- public void deletePage(final BookmarkId bookmarkId, DeletePageCallback callback) {
+ public void deletePage(final ClientId clientId, DeletePageCallback callback) {
assert mIsNativeOfflinePageModelLoaded;
recordFreeSpaceHistograms("OfflinePages.DeletePage.FreeSpacePercentage",
"OfflinePages.DeletePage.FreeSpaceMB");
DeletePageCallback callbackWrapper = wrapCallbackWithHistogramReporting(callback);
- Set<Long> ids =
- getOfflineIdsForClientId(BOOKMARK_NAMESPACE, Long.toString(bookmarkId.getId()));
+ Set<Long> ids = getOfflineIdsForClientId(clientId);
if (ids.size() == 0) {
callback.onDeletePageDone(DeletePageResult.NOT_FOUND);
return;
}
- Long offlineId = ids.iterator().next();
- nativeDeletePage(mNativeOfflinePageBridge, callbackWrapper, offlineId);
+ for (Long offlineId : ids) {
+ nativeDeletePage(mNativeOfflinePageBridge, callbackWrapper, offlineId);
+ }
}
/**
- * Deletes offline pages based on the list of provided bookamrk IDs. Calls the callback
+ * Deletes offline pages based on the list of provided client IDs. Calls the callback
* when operation is complete. Requires that the model is already loaded.
*
- * @param bookmarkIds A list of bookmark IDs for which the offline pages will be deleted.
+ * @param clientIds A list of Client IDs for which the offline pages will be deleted.
* @param callback A callback that will be called once operation is completed.
*/
- public void deletePages(List<BookmarkId> bookmarkIds, DeletePageCallback callback) {
+ public void deletePagesByClientId(List<ClientId> clientIds, DeletePageCallback callback) {
assert mIsNativeOfflinePageModelLoaded;
- List<Long> idList = new ArrayList<>(bookmarkIds.size());
- for (int i = 0; i < bookmarkIds.size(); i++) {
- idList.addAll(getOfflineIdsForClientId(
- BOOKMARK_NAMESPACE, Long.toString(bookmarkIds.get(i).getId())));
+ List<Long> idList = new ArrayList<>(clientIds.size());
+ for (ClientId clientId : clientIds) {
+ idList.addAll(getOfflineIdsForClientId(clientId));
}
- long[] ids = new long[idList.size()];
- for (int i = 0; i < idList.size(); i++) {
- ids[i] = idList.get(i);
+ deletePages(idList, callback);
+ }
+
+ protected void deletePages(List<Long> offlineIds, DeletePageCallback callback) {
+ long[] ids = new long[offlineIds.size()];
+ for (int i = 0; i < offlineIds.size(); i++) {
+ ids[i] = offlineIds.get(i);
}
+
recordFreeSpaceHistograms("OfflinePages.DeletePage.FreeSpacePercentage",
"OfflinePages.DeletePage.FreeSpaceMB");
@@ -440,7 +435,7 @@ public final class OfflinePageBridge {
// Mark that the offline page has been accessed, that will cause last access time and access
// count being updated.
- nativeMarkPageAccessed(mNativeOfflinePageBridge, page.getBookmarkId().getId());
+ markPageAccessed(page.getOfflineId());
// Returns the offline URL for offline access.
return page.getOfflineUrl();
@@ -473,6 +468,10 @@ public final class OfflinePageBridge {
};
}
+ private ClientId getClientIdForOfflineId(long offlineId) {
+ return nativeGetPageByOfflineId(mNativeOfflinePageBridge, offlineId).getClientId();
+ }
+
@CalledByNative
private void offlinePageModelLoaded() {
mIsNativeOfflinePageModelLoaded = true;
@@ -490,26 +489,26 @@ public final class OfflinePageBridge {
@CalledByNative
private void offlinePageDeleted(long offlineId) {
- BookmarkId id = new BookmarkId(offlineId, BookmarkType.NORMAL);
+ ClientId clientId = getClientIdForOfflineId(offlineId);
for (OfflinePageModelObserver observer : mObservers) {
- observer.offlinePageDeleted(id);
+ observer.offlinePageDeleted(offlineId, clientId);
}
}
@CalledByNative
private static void createOfflinePageAndAddToList(List<OfflinePageItem> offlinePagesList,
- String url, long offlineId, String offlineUrl, long fileSize, long creationTime,
- int accessCount, long lastAccessTimeMs) {
- offlinePagesList.add(createOfflinePageItem(
- url, offlineId, offlineUrl, fileSize, creationTime, accessCount, lastAccessTimeMs));
+ String url, long offlineId, String clientNamespace, String clientId, String offlineUrl,
+ long fileSize, long creationTime, int accessCount, long lastAccessTimeMs) {
+ offlinePagesList.add(createOfflinePageItem(url, offlineId, clientNamespace, clientId,
+ offlineUrl, fileSize, creationTime, accessCount, lastAccessTimeMs));
}
@CalledByNative
private static OfflinePageItem createOfflinePageItem(String url, long offlineId,
- String offlineUrl, long fileSize, long creationTime, int accessCount,
- long lastAccessTimeMs) {
- return new OfflinePageItem(
- url, offlineId, offlineUrl, fileSize, creationTime, accessCount, lastAccessTimeMs);
+ String clientNamespace, String clientId, String offlineUrl, long fileSize,
+ long creationTime, int accessCount, long lastAccessTimeMs) {
+ return new OfflinePageItem(url, offlineId, clientNamespace, clientId, offlineUrl, fileSize,
+ creationTime, accessCount, lastAccessTimeMs);
}
private static native int nativeGetFeatureMode();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageFreeUpSpaceDialog.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageFreeUpSpaceDialog.java
index 4e7aa86..a611a76 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageFreeUpSpaceDialog.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageFreeUpSpaceDialog.java
@@ -17,7 +17,6 @@ import org.chromium.chrome.R;
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.DeletePageCallback;
import org.chromium.chrome.browser.snackbar.Snackbar;
import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController;
-import org.chromium.components.bookmarks.BookmarkId;
import java.util.ArrayList;
import java.util.List;
@@ -89,7 +88,7 @@ public class OfflinePageFreeUpSpaceDialog
return;
}
- mOfflinePageBridge.deletePages(getBookmarkIdsToDelete(), new DeletePageCallback() {
+ mOfflinePageBridge.deletePages(getOfflineIdsToDelete(), new DeletePageCallback() {
@Override
public void onDeletePageDone(int deletePageResult) {
RecordUserAction.record("OfflinePages.FreeUpSpaceDialogButtonClicked");
@@ -98,13 +97,13 @@ public class OfflinePageFreeUpSpaceDialog
});
}
- /** Returns a list of Bookmark IDs for which the offline pages will be deleted. */
- private List<BookmarkId> getBookmarkIdsToDelete() {
- List<BookmarkId> bookmarkIds = new ArrayList<BookmarkId>();
+ /** Returns a list of IDs for which the offline pages will be deleted. */
+ private List<Long> getOfflineIdsToDelete() {
+ List<Long> offlineIds = new ArrayList<>();
for (OfflinePageItem offlinePage : mOfflinePagesToDelete) {
- bookmarkIds.add(offlinePage.getBookmarkId());
+ offlineIds.add(offlinePage.getOfflineId());
}
- return bookmarkIds;
+ return offlineIds;
}
/** Returns a total size of offline pages that will be deleted. */
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageItem.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageItem.java
index cbc4c31..75b4973 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageItem.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflinePageItem.java
@@ -5,25 +5,26 @@
package org.chromium.chrome.browser.offlinepages;
import org.chromium.base.VisibleForTesting;
-import org.chromium.components.bookmarks.BookmarkId;
-import org.chromium.components.bookmarks.BookmarkType;
/**
* Simple object representing an offline page.
*/
public class OfflinePageItem {
private final String mUrl;
- private final BookmarkId mBookmarId;
+ private final long mOfflineId;
+ private final ClientId mClientId;
private final String mOfflineUrl;
private final long mFileSize;
private final long mCreationTimeMs;
private final int mAccessCount;
private final long mLastAccessTimeMs;
- public OfflinePageItem(String url, long bookmarkId, String offlineUrl, long fileSize,
- long creationTimeMs, int accessCount, long lastAccessTimeMs) {
+ public OfflinePageItem(String url, long offlineId, String clientNamespace, String clientId,
+ String offlineUrl, long fileSize, long creationTimeMs, int accessCount,
+ long lastAccessTimeMs) {
mUrl = url;
- mBookmarId = new BookmarkId(bookmarkId, BookmarkType.NORMAL);
+ mOfflineId = offlineId;
+ mClientId = new ClientId(clientNamespace, clientId);
mOfflineUrl = offlineUrl;
mFileSize = fileSize;
mCreationTimeMs = creationTimeMs;
@@ -37,10 +38,16 @@ public class OfflinePageItem {
return mUrl;
}
- /** @return Bookmark Id related to the offline page. */
+ /** @return offline id for this offline page. */
@VisibleForTesting
- public BookmarkId getBookmarkId() {
- return mBookmarId;
+ public long getOfflineId() {
+ return mOfflineId;
+ }
+
+ /** @return Client Id related to the offline page. */
+ @VisibleForTesting
+ public ClientId getClientId() {
+ return mClientId;
}
/** @return Path to the offline copy of the page. */
@@ -50,7 +57,6 @@ public class OfflinePageItem {
}
/** @return Size of the offline copy of the page. */
- @VisibleForTesting
public long getFileSize() {
return mFileSize;
}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridgeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridgeTest.java
index 06185e0..cba15df 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridgeTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageBridgeTest.java
@@ -17,8 +17,6 @@ import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.OfflinePageMod
import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.SavePageCallback;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.test.ChromeActivityTestCaseBase;
-import org.chromium.components.bookmarks.BookmarkId;
-import org.chromium.components.bookmarks.BookmarkType;
import org.chromium.components.offlinepages.DeletePageResult;
import org.chromium.components.offlinepages.SavePageResult;
import org.chromium.content.browser.test.util.Criteria;
@@ -38,7 +36,8 @@ public class OfflinePageBridgeTest extends ChromeActivityTestCaseBase<ChromeActi
private static final String TEST_PAGE = "/chrome/test/data/android/about.html";
private static final int TIMEOUT_MS = 5000;
private static final long POLLING_INTERVAL = 100;
- private static final BookmarkId BOOKMARK_ID = new BookmarkId(1234, BookmarkType.NORMAL);
+ private static final ClientId BOOKMARK_ID =
+ new ClientId(OfflinePageBridge.BOOKMARK_NAMESPACE, "1234");
private OfflinePageBridge mOfflinePageBridge;
private EmbeddedTestServer mTestServer;
@@ -165,7 +164,7 @@ public class OfflinePageBridgeTest extends ChromeActivityTestCaseBase<ChromeActi
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
- OfflinePageItem offlinePage = mOfflinePageBridge.getPageByBookmarkId(BOOKMARK_ID);
+ OfflinePageItem offlinePage = mOfflinePageBridge.getPageByClientId(BOOKMARK_ID);
offlinePageRef.set(offlinePage);
assertEquals("", 0, offlinePage.getAccessCount());
long initialAccessTimeMs = offlinePage.getLastAccessTimeMs();
@@ -175,9 +174,9 @@ public class OfflinePageBridgeTest extends ChromeActivityTestCaseBase<ChromeActi
assertEquals("Get launch URL should not affect access time while online.",
initialAccessTimeMs,
- mOfflinePageBridge.getPageByBookmarkId(BOOKMARK_ID).getLastAccessTimeMs());
+ mOfflinePageBridge.getPageByClientId(BOOKMARK_ID).getLastAccessTimeMs());
assertEquals("Get launch URL should not affect access count while online.", 0,
- mOfflinePageBridge.getPageByBookmarkId(BOOKMARK_ID).getAccessCount());
+ mOfflinePageBridge.getPageByClientId(BOOKMARK_ID).getAccessCount());
// Switch to offline
NetworkChangeNotifier.forceConnectivityState(false);
@@ -196,7 +195,7 @@ public class OfflinePageBridgeTest extends ChromeActivityTestCaseBase<ChromeActi
@Override
public boolean isSatisfied() {
OfflinePageItem entry =
- mOfflinePageBridge.getPageByBookmarkId(BOOKMARK_ID);
+ mOfflinePageBridge.getPageByClientId(BOOKMARK_ID);
return entry.getAccessCount() != 0;
}
},
@@ -208,7 +207,7 @@ public class OfflinePageBridgeTest extends ChromeActivityTestCaseBase<ChromeActi
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
- OfflinePageItem entry = mOfflinePageBridge.getPageByBookmarkId(BOOKMARK_ID);
+ OfflinePageItem entry = mOfflinePageBridge.getPageByClientId(BOOKMARK_ID);
assertEquals(
"GetLaunchUrl should increment accessed count when used while offline.", 1,
entry.getAccessCount());
@@ -223,7 +222,7 @@ public class OfflinePageBridgeTest extends ChromeActivityTestCaseBase<ChromeActi
public void testGetPageByBookmarkId() throws Exception {
loadUrl(mTestPage);
savePage(SavePageResult.SUCCESS, mTestPage);
- OfflinePageItem offlinePage = mOfflinePageBridge.getPageByBookmarkId(BOOKMARK_ID);
+ OfflinePageItem offlinePage = mOfflinePageBridge.getPageByClientId(BOOKMARK_ID);
assertEquals("Offline page item url incorrect.", mTestPage, offlinePage.getUrl());
assertTrue("Offline page item offline file url doesn't start properly.",
offlinePage.getOfflineUrl().startsWith("file:///"));
@@ -233,7 +232,8 @@ public class OfflinePageBridgeTest extends ChromeActivityTestCaseBase<ChromeActi
offlinePage.getOfflineUrl().contains("About"));
assertNull("Offline page is not supposed to exist",
- mOfflinePageBridge.getPageByBookmarkId(new BookmarkId(-42, BookmarkType.NORMAL)));
+ mOfflinePageBridge.getPageByClientId(
+ new ClientId(OfflinePageBridge.BOOKMARK_NAMESPACE, "-42")));
}
@SmallTest
@@ -242,17 +242,17 @@ public class OfflinePageBridgeTest extends ChromeActivityTestCaseBase<ChromeActi
loadUrl(mTestPage);
savePage(SavePageResult.SUCCESS, mTestPage);
assertNotNull("Offline page should be available, but it is not.",
- mOfflinePageBridge.getPageByBookmarkId(BOOKMARK_ID));
+ mOfflinePageBridge.getPageByClientId(BOOKMARK_ID));
deletePage(BOOKMARK_ID, DeletePageResult.SUCCESS);
assertNull("Offline page should be gone, but it is available.",
- mOfflinePageBridge.getPageByBookmarkId(BOOKMARK_ID));
+ mOfflinePageBridge.getPageByClientId(BOOKMARK_ID));
}
@SmallTest
public void testGetOfflineUrlForOnlineUrl() throws Exception {
loadUrl(mTestPage);
savePage(SavePageResult.SUCCESS, mTestPage);
- OfflinePageItem offlinePage = mOfflinePageBridge.getPageByBookmarkId(BOOKMARK_ID);
+ OfflinePageItem offlinePage = mOfflinePageBridge.getPageByClientId(BOOKMARK_ID);
assertEquals("We should get the same offline URL, when querying using online URL",
offlinePage.getOfflineUrl(),
mOfflinePageBridge.getOfflineUrlForOnlineUrl(offlinePage.getUrl()));
@@ -287,13 +287,13 @@ public class OfflinePageBridgeTest extends ChromeActivityTestCaseBase<ChromeActi
assertTrue(semaphore.tryAcquire(TIMEOUT_MS, TimeUnit.MILLISECONDS));
}
- private void deletePage(BookmarkId bookmarkId, final int expectedResult)
+ private void deletePage(final ClientId bookmarkId, final int expectedResult)
throws InterruptedException {
final Semaphore semaphore = new Semaphore(0);
ThreadUtils.runOnUiThreadBlocking(new Runnable() {
@Override
public void run() {
- mOfflinePageBridge.deletePage(BOOKMARK_ID, new DeletePageCallback() {
+ mOfflinePageBridge.deletePage(bookmarkId, new DeletePageCallback() {
@Override
public void onDeletePageDone(int deletePageResult) {
assertEquals("Delete result incorrect.", expectedResult, deletePageResult);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtilsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtilsTest.java
index e1ece75..6bfd885 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtilsTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/OfflinePageUtilsTest.java
@@ -18,8 +18,6 @@ import org.chromium.chrome.browser.offlinepages.OfflinePageBridge.SavePageCallba
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.snackbar.SnackbarManager.SnackbarController;
import org.chromium.chrome.test.ChromeActivityTestCaseBase;
-import org.chromium.components.bookmarks.BookmarkId;
-import org.chromium.components.bookmarks.BookmarkType;
import org.chromium.components.offlinepages.SavePageResult;
import org.chromium.content.browser.test.util.Criteria;
import org.chromium.content.browser.test.util.CriteriaHelper;
@@ -38,7 +36,8 @@ public class OfflinePageUtilsTest extends ChromeActivityTestCaseBase<ChromeActiv
private static final String TAG = "OfflinePageUtilsTest";
private static final String TEST_PAGE = "/chrome/test/data/android/about.html";
private static final int TIMEOUT_MS = 5000;
- private static final BookmarkId BOOKMARK_ID = new BookmarkId(1234, BookmarkType.NORMAL);
+ private static final ClientId BOOKMARK_ID =
+ new ClientId(OfflinePageBridge.BOOKMARK_NAMESPACE, "1234");
private OfflinePageBridge mOfflinePageBridge;
private EmbeddedTestServer mTestServer;
diff --git a/chrome/browser/android/offline_pages/offline_page_bridge.cc b/chrome/browser/android/offline_pages/offline_page_bridge.cc
index 681b1a5..ed861c8 100644
--- a/chrome/browser/android/offline_pages/offline_page_bridge.cc
+++ b/chrome/browser/android/offline_pages/offline_page_bridge.cc
@@ -59,6 +59,8 @@ void ToJavaOfflinePageList(JNIEnv* env,
env, j_result_obj,
ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(),
offline_page.offline_id,
+ ConvertUTF8ToJavaString(env, offline_page.client_id.name_space).obj(),
+ ConvertUTF8ToJavaString(env, offline_page.client_id.id).obj(),
ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(),
offline_page.file_size, offline_page.creation_time.ToJavaTime(),
offline_page.access_count, offline_page.last_access_time.ToJavaTime());
@@ -287,6 +289,8 @@ ScopedJavaLocalRef<jobject> OfflinePageBridge::CreateOfflinePageItem(
return Java_OfflinePageBridge_createOfflinePageItem(
env, ConvertUTF8ToJavaString(env, offline_page.url.spec()).obj(),
offline_page.offline_id,
+ ConvertUTF8ToJavaString(env, offline_page.client_id.name_space).obj(),
+ ConvertUTF8ToJavaString(env, offline_page.client_id.id).obj(),
ConvertUTF8ToJavaString(env, offline_page.GetOfflineURL().spec()).obj(),
offline_page.file_size, offline_page.creation_time.ToJavaTime(),
offline_page.access_count, offline_page.last_access_time.ToJavaTime());