| Index: chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarksModel.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarksModel.java b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarksModel.java
|
| index 2104f22d185239323870bd0e374ef3a22722e5ca..337568e73e1d40d9a6472d1cf91105d62eaf2faa 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarksModel.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarksModel.java
|
| @@ -8,11 +8,15 @@ import org.chromium.base.ObserverList;
|
| import org.chromium.base.VisibleForTesting;
|
| import org.chromium.chrome.browser.BookmarksBridge;
|
| import org.chromium.chrome.browser.offline_pages.OfflinePageBridge;
|
| +import org.chromium.chrome.browser.offline_pages.OfflinePageBridge.OfflinePageModelObserver;
|
| +import org.chromium.chrome.browser.offline_pages.OfflinePageBridge.SavePageCallback;
|
| import org.chromium.chrome.browser.offline_pages.OfflinePageItem;
|
| import org.chromium.chrome.browser.profiles.Profile;
|
| import org.chromium.components.bookmarks.BookmarkId;
|
| import org.chromium.components.bookmarks.BookmarkType;
|
| import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
|
| +import org.chromium.components.offline_pages.SavePageResult;
|
| +import org.chromium.content_public.browser.WebContents;
|
|
|
| import java.util.ArrayList;
|
| import java.util.List;
|
| @@ -26,6 +30,17 @@ public class EnhancedBookmarksModel extends BookmarksBridge {
|
| private static final int FAVICON_MAX_CACHE_SIZE = 10 * 1024 * 1024; // 10MB
|
|
|
| /**
|
| + * Callback for use with addBookmark.
|
| + */
|
| + public interface AddBookmarkCallback {
|
| + /**
|
| + * Called when the bookmark has been added.
|
| + * @param bookmarkId ID of the bookmark that has been added.
|
| + */
|
| + void onBookmarkAdded(BookmarkId bookmarkId);
|
| + }
|
| +
|
| + /**
|
| * Observer that listens to delete event. This interface is used by undo controllers to know
|
| * which bookmarks were deleted. Note this observer only listens to events that go through
|
| * enhanced bookmark model.
|
| @@ -42,6 +57,8 @@ public class EnhancedBookmarksModel extends BookmarksBridge {
|
|
|
| private ObserverList<EnhancedBookmarkDeleteObserver> mDeleteObservers = new ObserverList<>();
|
| private OfflinePageBridge mOfflinePageBridge;
|
| + private boolean mIsOfflinePageModelLoaded;
|
| + private OfflinePageModelObserver mOfflinePageModelObserver;
|
|
|
| /**
|
| * Initialize enhanced bookmark model for last used non-incognito profile.
|
| @@ -55,9 +72,41 @@ public class EnhancedBookmarksModel extends BookmarksBridge {
|
| super(profile);
|
|
|
| if (OfflinePageBridge.isEnabled()) {
|
| - // TODO(jianli): Make sure to wait until the bridge is loaded.
|
| mOfflinePageBridge = new OfflinePageBridge(profile);
|
| + if (mOfflinePageBridge.isOfflinePageModelLoaded()) {
|
| + mIsOfflinePageModelLoaded = true;
|
| + } else {
|
| + mOfflinePageModelObserver = new OfflinePageModelObserver() {
|
| + @Override
|
| + public void offlinePageModelLoaded() {
|
| + mIsOfflinePageModelLoaded = true;
|
| + if (isBookmarkModelLoaded()) {
|
| + notifyBookmarkModelLoaded();
|
| + }
|
| + }
|
| + };
|
| + mOfflinePageBridge.addObserver(mOfflinePageModelObserver);
|
| + }
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * Clean up all the bridges. This must be called after done using this class.
|
| + */
|
| + @Override
|
| + public void destroy() {
|
| + if (mOfflinePageBridge != null) {
|
| + mOfflinePageBridge.destroy();
|
| + mOfflinePageBridge = null;
|
| }
|
| +
|
| + super.destroy();
|
| + }
|
| +
|
| + @Override
|
| + public boolean isBookmarkModelLoaded() {
|
| + return super.isBookmarkModelLoaded()
|
| + && (mOfflinePageBridge == null || mIsOfflinePageModelLoaded);
|
| }
|
|
|
| /**
|
| @@ -119,10 +168,37 @@ public class EnhancedBookmarksModel extends BookmarksBridge {
|
| }
|
| }
|
|
|
| - @Override
|
| - public BookmarkId addBookmark(BookmarkId parent, int index, String title, String url) {
|
| + /**
|
| + * Add a new bookmark asynchronously.
|
| + *
|
| + * @param parent Folder where to add.
|
| + * @param index The position where the bookmark will be placed in parent folder
|
| + * @param title Title of the new bookmark.
|
| + * @param url Url of the new bookmark
|
| + * @param webContents A {@link WebContents} object.
|
| + * @param callback The callback to be invoked when the bookmark is added.
|
| + */
|
| + public void addBookmarkAsync(BookmarkId parent, int index, String title, String url,
|
| + WebContents webContents, final AddBookmarkCallback callback) {
|
| url = DomDistillerUrlUtils.getOriginalUrlFromDistillerUrl(url);
|
| - return super.addBookmark(parent, index, title, url);
|
| + final BookmarkId enhancedId = addBookmark(parent, index, title, url);
|
| +
|
| + // If there is no need to save offline page, return now.
|
| + if (mOfflinePageBridge == null) {
|
| + callback.onBookmarkAdded(enhancedId);
|
| + return;
|
| + }
|
| +
|
| + mOfflinePageBridge.savePage(webContents, enhancedId,
|
| + new SavePageCallback() {
|
| + @Override
|
| + public void onSavePageDone(int savePageResult, String url) {
|
| + // TODO(jianli): Error handling.
|
| + if (savePageResult == SavePageResult.SUCCESS) {
|
| + callback.onBookmarkAdded(enhancedId);
|
| + }
|
| + }
|
| + });
|
| }
|
|
|
| /**
|
| @@ -133,6 +209,23 @@ public class EnhancedBookmarksModel extends BookmarksBridge {
|
| }
|
|
|
| /**
|
| + * Returns the url used to launch a bookmark.
|
| + *
|
| + * @param bookmarkId ID of the bookmark to launch.
|
| + */
|
| + public String getBookmarkLaunchUrl(BookmarkId bookmarkId) {
|
| + String url = getBookmarkById(bookmarkId).getUrl();
|
| + if (mOfflinePageBridge == null) {
|
| + return url;
|
| + }
|
| +
|
| + // Return the offline url for the offline page.
|
| + OfflinePageItem page = mOfflinePageBridge.getPageByBookmarkId(bookmarkId);
|
| + return page == null ? url : page.getOfflineUrl();
|
| + }
|
| +
|
| +
|
| + /**
|
| * @return The id of the default folder to add bookmarks/folders to.
|
| */
|
| public BookmarkId getDefaultFolder() {
|
| @@ -155,4 +248,11 @@ public class EnhancedBookmarksModel extends BookmarksBridge {
|
| }
|
| return bookmarkIds;
|
| }
|
| +
|
| + /**
|
| + * @return Offline page bridge.
|
| + */
|
| + public OfflinePageBridge getOfflinePageBridge() {
|
| + return mOfflinePageBridge;
|
| + }
|
| }
|
|
|