Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(416)

Side by Side Diff: chrome/browser/android/chrome_browser_provider.h

Issue 10912172: [Android] Upstream ChromeBrowserProvider, the Android port ContentProvider implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698