1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CHROME_BROWSER_ANDROID_PROVIDER_CHROME_BROWSER_PROVIDER_H_
6 #define CHROME_BROWSER_ANDROID_PROVIDER_CHROME_BROWSER_PROVIDER_H_
8 #include "base/android/jni_weak_ref.h"
9 #include "base/android/scoped_java_ref.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/synchronization/waitable_event.h"
12 #include "base/task/cancelable_task_tracker.h"
13 #include "components/bookmarks/browser/base_bookmark_model_observer.h"
14 #include "components/history/core/android/android_history_types.h"
15 #include "content/public/browser/notification_observer.h"
16 #include "content/public/browser/notification_registrar.h"
18 class AndroidHistoryProviderService;
30 // This class implements the native methods of ChromeBrowserProvider.java
31 class ChromeBrowserProvider : public BaseBookmarkModelObserver,
32 public content::NotificationObserver {
34 ChromeBrowserProvider(JNIEnv* env, jobject obj);
35 void Destroy(JNIEnv*, jobject);
38 static bool RegisterChromeBrowserProvider(JNIEnv* env);
40 // Adds either a new bookmark or bookmark folder based on |is_folder|. The
41 // bookmark is added to the beginning of the specified parent and if the
42 // parent ID is not valid (i.e. < 0) then it will be added to the bookmark
44 jlong AddBookmark(JNIEnv* env, jobject,
50 // Removes a bookmark (or folder) with the specified ID.
51 jint RemoveBookmark(JNIEnv*, jobject, jlong id);
53 // Updates a bookmark (or folder) with the the new title and new URL.
54 // The |url| field will be ignored if the bookmark node is a folder.
55 // If a valid |parent_id| (>= 0) different from the currently specified
56 // parent is given, the node will be moved to that folder as the first
58 jint UpdateBookmark(JNIEnv* env,
65 // The below are methods to support Android public API.
66 // Bookmark and history APIs. -----------------------------------------------
67 jlong AddBookmarkFromAPI(JNIEnv* env,
78 base::android::ScopedJavaLocalRef<jobject> QueryBookmarkFromAPI(
81 jobjectArray projection,
83 jobjectArray selection_args,
86 jint UpdateBookmarkFromAPI(JNIEnv* env,
97 jobjectArray selection_args);
99 jint RemoveBookmarkFromAPI(JNIEnv* env,
102 jobjectArray selection_args);
104 jint RemoveHistoryFromAPI(JNIEnv* env,
107 jobjectArray selection_args);
109 jlong AddSearchTermFromAPI(JNIEnv* env,
114 base::android::ScopedJavaLocalRef<jobject> QuerySearchTermFromAPI(
117 jobjectArray projection,
119 jobjectArray selection_args,
122 jint RemoveSearchTermFromAPI(JNIEnv* env,
125 jobjectArray selection_args);
127 jint UpdateSearchTermFromAPI(JNIEnv* env,
132 jobjectArray selection_args);
134 // Custom provider API methods. ---------------------------------------------
135 jlong CreateBookmarksFolderOnce(JNIEnv* env,
140 void RemoveAllUserBookmarks(JNIEnv* env, jobject obj);
142 base::android::ScopedJavaLocalRef<jobject> GetEditableBookmarkFolders(
146 base::android::ScopedJavaLocalRef<jobject> GetBookmarkNode(
151 jboolean get_children);
153 base::android::ScopedJavaLocalRef<jobject> GetMobileBookmarksFolder(
157 jboolean IsBookmarkInMobileBookmarksBranch(JNIEnv* env,
161 jboolean BookmarkNodeExists(JNIEnv* env,
165 base::android::ScopedJavaLocalRef<jbyteArray> GetFaviconOrTouchIcon(
170 base::android::ScopedJavaLocalRef<jbyteArray> GetThumbnail(JNIEnv* env,
175 virtual ~ChromeBrowserProvider();
177 // Override BaseBookmarkModelObserver.
178 virtual void BookmarkModelChanged() OVERRIDE;
179 virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE;
180 virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) OVERRIDE;
182 // Override NotificationObserver.
183 virtual void Observe(int type,
184 const content::NotificationSource& source,
185 const content::NotificationDetails& details) OVERRIDE;
187 JavaObjectWeakGlobalRef weak_java_provider_;
190 BookmarkModel* bookmark_model_;
191 history::TopSites* top_sites_;
193 scoped_ptr<AndroidHistoryProviderService> service_;
194 scoped_ptr<FaviconService> favicon_service_;
196 base::CancelableTaskTracker cancelable_task_tracker_;
198 // Used to register/unregister notification observer.
199 content::NotificationRegistrar notification_registrar_;
201 bool handling_extensive_changes_;
203 DISALLOW_COPY_AND_ASSIGN(ChromeBrowserProvider);
206 #endif // CHROME_BROWSER_ANDROID_PROVIDER_CHROME_BROWSER_PROVIDER_H_