1 // Copyright 2013 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_BOOKMARKS_BOOKMARKS_BRIDGE_H_
6 #define CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_
10 #include "base/android/jni_android.h"
11 #include "base/android/jni_weak_ref.h"
12 #include "base/basictypes.h"
13 #include "base/compiler_specific.h"
14 #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h"
15 #include "chrome/browser/bookmarks/chrome_bookmark_client.h"
16 #include "components/bookmarks/browser/base_bookmark_model_observer.h"
17 #include "components/bookmarks/common/android/bookmark_id.h"
20 class ScopedGroupBookmarkActions
;
25 // The delegate to fetch bookmarks information for the Android native
26 // bookmark page. This fetches the bookmarks, title, urls, folder
28 class BookmarksBridge
: public BaseBookmarkModelObserver
,
29 public PartnerBookmarksShim::Observer
{
31 BookmarksBridge(JNIEnv
* env
, jobject obj
, jobject j_profile
);
32 void Destroy(JNIEnv
*, jobject
);
34 static bool RegisterBookmarksBridge(JNIEnv
* env
);
36 bool IsDoingExtensiveChanges(JNIEnv
* env
, jobject obj
);
38 void LoadEmptyPartnerBookmarkShimForTesting(JNIEnv
* env
, jobject obj
);
40 base::android::ScopedJavaLocalRef
<jobject
> GetBookmarkByID(
46 void GetPermanentNodeIDs(JNIEnv
* env
,
48 jobject j_result_obj
);
50 void GetTopLevelFolderParentIDs(JNIEnv
* env
,
52 jobject j_result_obj
);
54 void GetTopLevelFolderIDs(JNIEnv
* env
,
58 jobject j_result_obj
);
60 void GetUncategorizedBookmarkIDs(JNIEnv
* env
,
62 jobject j_result_obj
);
63 void GetAllFoldersWithDepths(JNIEnv
* env
,
65 jobject j_folders_obj
,
66 jobject j_depths_obj
);
68 base::android::ScopedJavaLocalRef
<jobject
> GetMobileFolderId(JNIEnv
* env
,
71 base::android::ScopedJavaLocalRef
<jobject
> GetOtherFolderId(JNIEnv
* env
,
74 base::android::ScopedJavaLocalRef
<jobject
> GetDesktopFolderId(JNIEnv
* env
,
77 void GetChildIDs(JNIEnv
* env
,
82 jboolean get_bookmarks
,
83 jobject j_result_obj
);
85 base::android::ScopedJavaLocalRef
<jobject
> GetChildAt(JNIEnv
* env
,
91 void GetAllBookmarkIDsOrderedByCreationDate(JNIEnv
* env
,
93 jobject j_result_obj
);
95 void SetBookmarkTitle(JNIEnv
* env
,
101 void SetBookmarkUrl(JNIEnv
* env
,
107 bool DoesBookmarkExist(JNIEnv
* env
, jobject obj
, jlong id
, jint type
);
109 void GetBookmarksForFolder(JNIEnv
* env
,
111 jobject j_folder_id_obj
,
112 jobject j_callback_obj
,
113 jobject j_result_obj
);
115 void GetCurrentFolderHierarchy(JNIEnv
* env
,
117 jobject j_folder_id_obj
,
118 jobject j_callback_obj
,
119 jobject j_result_obj
);
121 base::android::ScopedJavaLocalRef
<jobject
> AddFolder(JNIEnv
* env
,
123 jobject j_parent_id_obj
,
127 void DeleteBookmark(JNIEnv
* env
, jobject obj
, jobject j_bookmark_id_obj
);
129 void MoveBookmark(JNIEnv
* env
,
131 jobject j_bookmark_id_obj
,
132 jobject j_parent_id_obj
,
135 base::android::ScopedJavaLocalRef
<jobject
> AddBookmark(
138 jobject j_parent_id_obj
,
143 void Undo(JNIEnv
* env
, jobject obj
);
145 void StartGroupingUndos(JNIEnv
* env
, jobject obj
);
147 void EndGroupingUndos(JNIEnv
* env
, jobject obj
);
150 virtual ~BookmarksBridge();
152 base::android::ScopedJavaLocalRef
<jobject
> CreateJavaBookmark(
153 const BookmarkNode
* node
);
154 void ExtractBookmarkNodeInformation(
155 const BookmarkNode
* node
,
156 jobject j_result_obj
);
157 const BookmarkNode
* GetNodeByID(long node_id
, int type
);
158 const BookmarkNode
* GetFolderWithFallback(long folder_id
, int type
);
159 // Returns whether |node| can be modified by the user.
160 bool IsEditable(const BookmarkNode
* node
) const;
161 // Returns whether |node| is a managed bookmark.
162 bool IsManaged(const BookmarkNode
* node
) const;
163 const BookmarkNode
* GetParentNode(const BookmarkNode
* node
);
164 int GetBookmarkType(const BookmarkNode
* node
);
165 base::string16
GetTitle(const BookmarkNode
* node
) const;
166 bool IsReachable(const BookmarkNode
* node
) const;
167 bool IsLoaded() const;
168 bool IsFolderAvailable(const BookmarkNode
* folder
) const;
169 void NotifyIfDoneLoading();
171 // Override BaseBookmarkModelObserver.
172 // Called when there are changes to the bookmark model that don't trigger
173 // any of the other callback methods. For example, this is called when
174 // partner bookmarks change.
175 virtual void BookmarkModelChanged() override
;
176 virtual void BookmarkModelLoaded(BookmarkModel
* model
,
177 bool ids_reassigned
) override
;
178 virtual void BookmarkModelBeingDeleted(BookmarkModel
* model
) override
;
179 virtual void BookmarkNodeMoved(BookmarkModel
* model
,
180 const BookmarkNode
* old_parent
,
182 const BookmarkNode
* new_parent
,
183 int new_index
) override
;
184 virtual void BookmarkNodeAdded(BookmarkModel
* model
,
185 const BookmarkNode
* parent
,
187 virtual void BookmarkNodeRemoved(BookmarkModel
* model
,
188 const BookmarkNode
* parent
,
190 const BookmarkNode
* node
,
191 const std::set
<GURL
>& removed_urls
) override
;
192 virtual void BookmarkNodeChanged(BookmarkModel
* model
,
193 const BookmarkNode
* node
) override
;
194 virtual void BookmarkNodeChildrenReordered(BookmarkModel
* model
,
195 const BookmarkNode
* node
) override
;
196 virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel
* model
) override
;
197 virtual void ExtensiveBookmarkChangesEnded(BookmarkModel
* model
) override
;
199 // Override PartnerBookmarksShim::Observer
200 virtual void PartnerShimChanged(PartnerBookmarksShim
* shim
) override
;
201 virtual void PartnerShimLoaded(PartnerBookmarksShim
* shim
) override
;
202 virtual void ShimBeingDeleted(PartnerBookmarksShim
* shim
) override
;
205 JavaObjectWeakGlobalRef weak_java_ref_
;
206 BookmarkModel
* bookmark_model_
; // weak
207 ChromeBookmarkClient
* client_
; // weak
208 scoped_ptr
<bookmarks::ScopedGroupBookmarkActions
> grouped_bookmark_actions_
;
210 // Information about the Partner bookmarks (must check for IsLoaded()).
211 // This is owned by profile.
212 PartnerBookmarksShim
* partner_bookmarks_shim_
;
214 DISALLOW_COPY_AND_ASSIGN(BookmarksBridge
);
217 #endif // CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_