Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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. | |
| 4 | |
| 5 #ifndef CHROME_BROWSER_ANDROID_CHROME_BROWSER_PROVIDER_H_ | |
| 6 #define CHROME_BROWSER_ANDROID_CHROME_BROWSER_PROVIDER_H_ | |
| 7 | |
| 8 #include "base/android/jni_helper.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 "chrome/browser/bookmarks/base_bookmark_model_observer.h" | |
| 13 #include "chrome/browser/cancelable_request.h" | |
| 14 #include "chrome/browser/history/android/android_history_types.h" | |
| 15 #include "content/public/browser/notification_observer.h" | |
| 16 #include "content/public/browser/notification_registrar.h" | |
| 17 | |
| 18 class AndroidHistoryProviderService; | |
| 19 class FaviconService; | |
| 20 class Profile; | |
| 21 | |
| 22 namespace history { | |
| 23 class TopSites; | |
| 24 } | |
| 25 | |
| 26 namespace sql { | |
| 27 class Statement; | |
| 28 } | |
| 29 | |
| 30 // This class implements the native methods of ChromeBrowserProvider.java | |
| 31 class ChromeBrowserProvider : public BaseBookmarkModelObserver, | |
| 32 public content::NotificationObserver { | |
| 33 public: | |
| 34 ChromeBrowserProvider(JNIEnv* env, jobject obj); | |
| 35 void Destroy(JNIEnv*, jobject); | |
| 36 | |
| 37 // Adds either a new bookmark or bookmark folder based on |is_folder|. The | |
| 38 // bookmark is added to the beginning of the specified parent and if the | |
| 39 // parent ID is not valid (i.e. < 0) then it will be added to the bookmark | |
| 40 // bar. | |
| 41 jlong AddBookmark(JNIEnv* env, jobject, | |
| 42 jstring jurl, | |
| 43 jstring jtitle, | |
| 44 jboolean is_folder, | |
| 45 jlong parent_id); | |
| 46 | |
| 47 // Removes a bookmark (or folder) with the specified ID. | |
| 48 jint RemoveBookmark(JNIEnv*, jobject, jlong id); | |
| 49 | |
| 50 // Updates a bookmark (or folder) with the the new title and new URL. | |
| 51 // The |url| field will be ignored if the bookmark node is a folder. | |
| 52 // If a valid |parent_id| (>= 0) different from the currently specified | |
| 53 // parent is given, the node will be moved to that folder as the first | |
| 54 // child. | |
| 55 jint UpdateBookmark(JNIEnv* env, | |
| 56 jobject, | |
| 57 jlong id, | |
| 58 jstring url, | |
| 59 jstring title, | |
| 60 jlong parent_id); | |
| 61 | |
| 62 // The below are methods to support Android public API. | |
| 63 // Bookmark and history APIs. ----------------------------------------------- | |
| 64 jlong AddBookmarkFromAPI(JNIEnv* env, | |
| 65 jobject obj, | |
| 66 jstring url, | |
| 67 jobject created, | |
| 68 jobject isBookmark, | |
| 69 jobject date, | |
| 70 jbyteArray favicon, | |
| 71 jstring title, | |
| 72 jobject visits, | |
| 73 jlong parent_id); | |
| 74 | |
| 75 base::android::ScopedJavaLocalRef<jobject> QueryBookmarkFromAPI( | |
| 76 JNIEnv* env, | |
| 77 jobject obj, | |
| 78 jobjectArray projection, | |
| 79 jstring selections, | |
| 80 jobjectArray selection_args, | |
| 81 jstring sort_order); | |
| 82 | |
| 83 jint UpdateBookmarkFromAPI(JNIEnv* env, | |
| 84 jobject obj, | |
| 85 jstring url, | |
| 86 jobject created, | |
| 87 jobject isBookmark, | |
| 88 jobject date, | |
| 89 jbyteArray favicon, | |
| 90 jstring title, | |
| 91 jobject visits, | |
| 92 jlong parent_id, | |
| 93 jstring selections, | |
| 94 jobjectArray selection_args); | |
| 95 | |
| 96 jint RemoveBookmarkFromAPI(JNIEnv* env, | |
| 97 jobject obj, | |
| 98 jstring selections, | |
| 99 jobjectArray selection_args); | |
| 100 | |
| 101 jint RemoveHistoryFromAPI(JNIEnv* env, | |
| 102 jobject obj, | |
| 103 jstring selections, | |
| 104 jobjectArray selection_args); | |
| 105 | |
| 106 jlong AddSearchTermFromAPI(JNIEnv* env, | |
| 107 jobject obj, | |
| 108 jstring search_term, | |
| 109 jobject date); | |
| 110 | |
| 111 base::android::ScopedJavaLocalRef<jobject> QuerySearchTermFromAPI( | |
| 112 JNIEnv* env, | |
| 113 jobject obj, | |
| 114 jobjectArray projection, | |
| 115 jstring selections, | |
| 116 jobjectArray selection_args, | |
| 117 jstring sort_order); | |
| 118 | |
| 119 jint RemoveSearchTermFromAPI(JNIEnv* env, | |
| 120 jobject obj, | |
| 121 jstring selections, | |
| 122 jobjectArray selection_args); | |
| 123 | |
| 124 jint UpdateSearchTermFromAPI(JNIEnv* env, | |
| 125 jobject obj, | |
| 126 jstring search_term, | |
| 127 jobject date, | |
| 128 jstring selections, | |
| 129 jobjectArray selection_args); | |
| 130 | |
| 131 // Custom provider API methods. --------------------------------------------- | |
| 132 jlong CreateBookmarksFolderOnce(JNIEnv* env, | |
| 133 jobject obj, | |
| 134 jstring title, | |
| 135 jlong parent_id); | |
| 136 | |
| 137 base::android::ScopedJavaLocalRef<jobject> GetAllBookmarkFolders(JNIEnv* env, | |
| 138 jobject obj); | |
| 139 | |
| 140 base::android::ScopedJavaLocalRef<jobject> GetBookmarkNode( | |
| 141 JNIEnv* env, | |
| 142 jobject obj, | |
| 143 jlong id, | |
| 144 jboolean get_parent, | |
| 145 jboolean get_children); | |
| 146 | |
| 147 base::android::ScopedJavaLocalRef<jobject> GetMobileBookmarksFolder( | |
| 148 JNIEnv* env, | |
| 149 jobject obj); | |
| 150 | |
| 151 jboolean IsBookmarkInMobileBookmarksBranch(JNIEnv* env, | |
| 152 jobject obj, | |
| 153 jlong id); | |
| 154 | |
| 155 jboolean BookmarkNodeExists(JNIEnv* env, | |
| 156 jobject obj, | |
| 157 jlong id); | |
| 158 | |
| 159 base::android::ScopedJavaLocalRef<jbyteArray> GetFaviconOrTouchIcon( | |
| 160 JNIEnv* env, | |
| 161 jobject obj, | |
| 162 jstring url); | |
| 163 | |
| 164 base::android::ScopedJavaLocalRef<jbyteArray> GetThumbnail(JNIEnv* env, | |
| 165 jobject obj, | |
| 166 jstring url); | |
| 167 | |
| 168 private: | |
| 169 virtual ~ChromeBrowserProvider(); | |
| 170 | |
| 171 // Override BaseBookmarkModelObserver. | |
| 172 virtual void BookmarkModelChanged() OVERRIDE; | |
| 173 | |
| 174 // Override NotificationObserver. | |
| 175 virtual void Observe(int type, | |
| 176 const content::NotificationSource& source, | |
| 177 const content::NotificationDetails& details) OVERRIDE; | |
| 178 | |
| 179 // Wrapper around the Java provider object that manages notifying it | |
| 180 // when the native provider detects changes in bookmarks or search terms. | |
| 181 class JavaBrowserProviderWeakGlobalRef : public JavaObjectWeakGlobalRef { | |
| 182 public: | |
| 183 JavaBrowserProviderWeakGlobalRef(JNIEnv* env, jobject obj); | |
| 184 | |
| 185 void OnBookmarkChanged() const; | |
| 186 void OnSearchTermChanged() const; | |
| 187 | |
| 188 private: | |
| 189 jmethodID on_bookmark_changed_; | |
| 190 jmethodID on_search_term_changed_; | |
| 191 }; | |
| 192 | |
| 193 JavaBrowserProviderWeakGlobalRef java_browser_provider_; | |
| 194 | |
| 195 Profile* profile_; | |
| 196 BookmarkModel* bookmark_model_; | |
| 197 history::TopSites* top_sites_; | |
| 198 | |
| 199 scoped_ptr<AndroidHistoryProviderService> service_; | |
| 200 scoped_ptr<FaviconService> favicon_service_; | |
| 201 | |
| 202 // Different cancelable request consumers must be used for each service. | |
| 203 // This because a synchronization issue that could lead to flaky assertion | |
| 204 // failures otherwise. | |
| 205 // TODO(leandrogracia): use a single consumer once http://crbug.com/85970 | |
| 206 // is fixed. | |
| 207 CancelableRequestConsumer android_history_consumer_; | |
| 208 CancelableRequestConsumer favicon_consumer_; | |
| 209 | |
| 210 // Used to register/unregister notification observer. | |
| 211 content::NotificationRegistrar notification_registrar_; | |
| 212 | |
| 213 // Signaled if TemplateURLModel has been loaded. | |
| 214 base::WaitableEvent template_loaded_event_; | |
| 215 | |
| 216 DISALLOW_COPY_AND_ASSIGN(ChromeBrowserProvider); | |
| 217 }; | |
| 218 | |
| 219 // register the Tab's native methods through jni | |
| 220 bool RegisterChromeBrowserProvider(JNIEnv* env); | |
|
Yaron
2012/09/10 19:30:04
Nit: make this a static member of above class
Leandro Gracia Gil
2012/09/10 22:21:48
Done.
| |
| 221 | |
| 222 #endif // CHROME_BROWSER_ANDROID_CHROME_BROWSER_PROVIDER_H_ | |
| OLD | NEW |