| Index: chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java | 
| index 9c31845e4c4622e3e04292d751efa2064727106e..de63c8576e09ada06a297e5f15e3c0eb107138c1 100644 | 
| --- a/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java | 
| @@ -4,9 +4,12 @@ | 
|  | 
| package org.chromium.chrome.browser; | 
|  | 
| +import android.util.Pair; | 
| + | 
| import org.chromium.base.ObserverList; | 
| import org.chromium.base.VisibleForTesting; | 
| import org.chromium.base.annotations.CalledByNative; | 
| +import org.chromium.chrome.browser.enhancedbookmarks.BookmarkMatch; | 
| import org.chromium.chrome.browser.profiles.Profile; | 
| import org.chromium.components.bookmarks.BookmarkId; | 
| import org.chromium.components.bookmarks.BookmarkType; | 
| @@ -378,6 +381,20 @@ public class BookmarksBridge { | 
| } | 
|  | 
| /** | 
| +     * Synchronously gets a list of bookmarks that match the specified search query. | 
| +     * @param query Keyword used for searching bookmarks. | 
| +     * @param maxNumberOfResult Maximum number of result to fetch. | 
| +     * @return List of bookmarks that are related to the given query. | 
| +     */ | 
| +    public List<BookmarkMatch> searchBookmarks(String query, int maxNumberOfResult) { | 
| +        List<BookmarkMatch> bookmarkMatches = new ArrayList<BookmarkMatch>(); | 
| +        nativeSearchBookmarks(mNativeBookmarksBridge, bookmarkMatches, query, | 
| +                maxNumberOfResult); | 
| +        return bookmarkMatches; | 
| +    } | 
| + | 
| + | 
| +    /** | 
| * Set title of the given bookmark. | 
| */ | 
| public void setBookmarkTitle(BookmarkId id, String title) { | 
| @@ -666,6 +683,25 @@ public class BookmarksBridge { | 
| depthList.add(depth); | 
| } | 
|  | 
| +    @CalledByNative | 
| +    private static void addToBookmarkMatchList(List<BookmarkMatch> bookmarkMatchList, | 
| +            long id, int type, int[] titleMatchStartPositions, | 
| +            int[] titleMatchEndPositions, int[] urlMatchStartPositions, | 
| +            int[] urlMatchEndPositions) { | 
| +        bookmarkMatchList.add(new BookmarkMatch(new BookmarkId(id, type), | 
| +                createPairsList(titleMatchStartPositions, titleMatchEndPositions), | 
| +                createPairsList(urlMatchStartPositions, urlMatchEndPositions))); | 
| +    } | 
| + | 
| +    private static List<Pair<Integer, Integer>> createPairsList(int[] left, int[] right) { | 
| +        List<Pair<Integer, Integer>> pairList = new ArrayList<Pair<Integer, Integer>>(); | 
| +        for (int i = 0; i < left.length; i++) { | 
| +            pairList.add(new Pair<Integer, Integer>(left[i], right[i])); | 
| +        } | 
| +        return pairList; | 
| +    } | 
| + | 
| + | 
| private native BookmarkItem nativeGetBookmarkByID(long nativeBookmarksBridge, long id, | 
| int type); | 
| private native void nativeGetPermanentNodeIDs(long nativeBookmarksBridge, | 
| @@ -710,7 +746,8 @@ public class BookmarksBridge { | 
| private native void nativeEndGroupingUndos(long nativeBookmarksBridge); | 
| private static native boolean nativeIsEnhancedBookmarksFeatureEnabled(Profile profile); | 
| private native void nativeLoadEmptyPartnerBookmarkShimForTesting(long nativeBookmarksBridge); | 
| - | 
| +    private native void nativeSearchBookmarks(long nativeBookmarksBridge, | 
| +            List<BookmarkMatch> bookmarkMatches, String query, int maxNumber); | 
| private native long nativeInit(Profile profile); | 
| private native boolean nativeIsDoingExtensiveChanges(long nativeBookmarksBridge); | 
| private native void nativeDestroy(long nativeBookmarksBridge); | 
|  |