diff options
author | bburns <bburns@chromium.org> | 2016-03-07 14:07:10 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-07 22:08:53 +0000 |
commit | 98e033bf0dcfba78c8a022ca07af688fefb7cf22 (patch) | |
tree | 23f99667bb857b1f09406cd96968aa352db3fea1 | |
parent | 96f45a252155567f00a5c242e9db799424de51da (diff) | |
download | chromium_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}
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()); |