Index: chrome/browser/android/bookmarks/bookmarks_bridge.cc |
diff --git a/chrome/browser/android/bookmarks/bookmarks_bridge.cc b/chrome/browser/android/bookmarks/bookmarks_bridge.cc |
index a9ba6bb98b0932cff05f0dbf924d7dd908d30e51..3cf09338777c207aa63ecc2633e58156319e1859 100644 |
--- a/chrome/browser/android/bookmarks/bookmarks_bridge.cc |
+++ b/chrome/browser/android/bookmarks/bookmarks_bridge.cc |
@@ -657,6 +657,45 @@ void BookmarksBridge::MoveBookmark(JNIEnv* env, |
bookmark_model_->Move(node, new_parent_node, index); |
} |
+void BookmarksBridge::SearchBookmarks(JNIEnv* env, |
+ jobject obj, |
+ jobject j_list, |
+ jstring j_query, |
+ jint max_results) { |
+ DCHECK(bookmark_model_->loaded()); |
+ |
+ std::vector<bookmarks::BookmarkMatch> results; |
+ bookmark_model_->GetBookmarksMatching( |
+ base::android::ConvertJavaStringToUTF16(env, j_query), |
+ max_results, |
+ query_parser::MatchingAlgorithm::ALWAYS_PREFIX_SEARCH, |
+ &results); |
+ for (const bookmarks::BookmarkMatch& match : results) { |
+ const BookmarkNode* node = match.node; |
+ |
+ std::vector<int> title_match_start_positions; |
+ std::vector<int> title_match_end_positions; |
+ for (auto position : match.title_match_positions) { |
+ title_match_start_positions.push_back(position.first); |
+ title_match_end_positions.push_back(position.second); |
+ } |
+ |
+ std::vector<int> url_match_start_positions; |
+ std::vector<int> url_match_end_positions; |
+ for (auto position : match.url_match_positions) { |
+ url_match_start_positions.push_back(position.first); |
+ url_match_end_positions.push_back(position.second); |
+ } |
+ |
+ Java_BookmarksBridge_addToBookmarkMatchList( |
+ env, j_list, node->id(), node->type(), |
+ ToJavaIntArray(env, title_match_start_positions).obj(), |
+ ToJavaIntArray(env, title_match_end_positions).obj(), |
+ ToJavaIntArray(env, url_match_start_positions).obj(), |
+ ToJavaIntArray(env, url_match_end_positions).obj()); |
+ } |
+} |
+ |
ScopedJavaLocalRef<jobject> BookmarksBridge::AddBookmark( |
JNIEnv* env, |
jobject obj, |