| Index: chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkModel.java
 | 
| 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 973532320b771c715c11634c7a76b52310a3cfb7..06581d466a912fe3aeb9430dfb768daf9cee81a2 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
 | 
| @@ -4,6 +4,7 @@
 | 
|  
 | 
|  package org.chromium.chrome.browser.bookmarks;
 | 
|  
 | 
| +import org.chromium.base.Callback;
 | 
|  import org.chromium.base.ObserverList;
 | 
|  import org.chromium.base.VisibleForTesting;
 | 
|  import org.chromium.base.metrics.RecordHistogram;
 | 
| @@ -282,30 +283,41 @@ public class BookmarkModel extends BookmarkBridge {
 | 
|      }
 | 
|  
 | 
|      /**
 | 
| -     * Gets a list of bookmark IDs of bookmarks that match a specified filter.
 | 
| +     * Gets a list of bookmark IDs for all offline pages.
 | 
|       *
 | 
| -     * @param filter Filter to be applied to the bookmarks.
 | 
| -     * @return A list of bookmark IDs of bookmarks matching the filter.
 | 
| +     * @return A list of bookmark IDs of bookmarks matching the offline pages filter.
 | 
|       */
 | 
| -    public List<BookmarkId> getBookmarkIDsByFilter(BookmarkFilter filter) {
 | 
| +    public void getBookmarkIDsByFilter(
 | 
| +            BookmarkFilter filter, final Callback<List<BookmarkId>> callback) {
 | 
|          assert filter == BookmarkFilter.OFFLINE_PAGES;
 | 
|          assert mOfflinePageBridge != null;
 | 
|  
 | 
| -        List<OfflinePageItem> offlinePages = mOfflinePageBridge.getAllPages();
 | 
| +        mOfflinePageBridge.getAllPages(new OfflinePageBridge.MultipleOfflinePageItemCallback() {
 | 
| +            @Override
 | 
| +            public void onResult(List<OfflinePageItem> offlinePages) {
 | 
| +                callback.onResult(filterBookmarkIdsByOfflinePages(offlinePages));
 | 
| +            }
 | 
| +        });
 | 
| +    }
 | 
| +
 | 
| +    /**
 | 
| +     * Gets all bookmarks that correspond to the given list of offline pages, in MRU order.
 | 
| +     * @see http://crbug.com/537806
 | 
| +     */
 | 
| +    private List<BookmarkId> filterBookmarkIdsByOfflinePages(List<OfflinePageItem> offlinePages) {
 | 
|          Collections.sort(offlinePages, sOfflinePageComparator);
 | 
|  
 | 
| -        // We are going to filter out all of the offline pages without a matching bookmark.
 | 
| -        // http://crbug.com/537806
 | 
|          HashSet<BookmarkId> existingBookmarks =
 | 
| -                new HashSet<BookmarkId>(getAllBookmarkIDsOrderedByCreationDate());
 | 
| +                new HashSet<>(getAllBookmarkIDsOrderedByCreationDate());
 | 
|  
 | 
| -        List<BookmarkId> bookmarkIds = new ArrayList<BookmarkId>();
 | 
| +        List<BookmarkId> bookmarkIds = new ArrayList<>();
 | 
|          for (OfflinePageItem offlinePage : offlinePages) {
 | 
|              BookmarkId bookmarkId = getBookmarkIdForOfflineClientId(offlinePage.getClientId());
 | 
|              if (existingBookmarks.contains(bookmarkId)) {
 | 
|                  bookmarkIds.add(bookmarkId);
 | 
|              }
 | 
|          }
 | 
| +
 | 
|          return bookmarkIds;
 | 
|      }
 | 
|  
 | 
| 
 |