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. 4 5 #ifndef CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_ 6 #define CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_ 7 8 #include <jni.h> 9 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" 18 19 namespace bookmarks { 20 class ScopedGroupBookmarkActions; 21 } 22 23 class Profile; 24 25 // The delegate to fetch bookmarks information for the Android native 26 // bookmark page. This fetches the bookmarks, title, urls, folder 27 // hierarchy. 28 class BookmarksBridge : public BaseBookmarkModelObserver, 29 public PartnerBookmarksShim::Observer { 30 public: 31 BookmarksBridge(JNIEnv* env, jobject obj, jobject j_profile); 32 void Destroy(JNIEnv*, jobject); 33 34 static bool RegisterBookmarksBridge(JNIEnv* env); 35 36 bool IsDoingExtensiveChanges(JNIEnv* env, jobject obj); 37 38 void LoadEmptyPartnerBookmarkShimForTesting(JNIEnv* env, jobject obj); 39 40 base::android::ScopedJavaLocalRef<jobject> GetBookmarkByID( 41 JNIEnv* env, 42 jobject obj, 43 jlong id, 44 jint type); 45 46 void GetPermanentNodeIDs(JNIEnv* env, 47 jobject obj, 48 jobject j_result_obj); 49 50 void GetTopLevelFolderParentIDs(JNIEnv* env, 51 jobject obj, 52 jobject j_result_obj); 53 54 void GetTopLevelFolderIDs(JNIEnv* env, 55 jobject obj, 56 jboolean get_special, 57 jboolean get_normal, 58 jobject j_result_obj); 59 60 void GetUncategorizedBookmarkIDs(JNIEnv* env, 61 jobject obj, 62 jobject j_result_obj); 63 void GetAllFoldersWithDepths(JNIEnv* env, 64 jobject obj, 65 jobject j_folders_obj, 66 jobject j_depths_obj); 67 68 base::android::ScopedJavaLocalRef<jobject> GetMobileFolderId(JNIEnv* env, 69 jobject obj); 70 71 base::android::ScopedJavaLocalRef<jobject> GetOtherFolderId(JNIEnv* env, 72 jobject obj); 73 74 base::android::ScopedJavaLocalRef<jobject> GetDesktopFolderId(JNIEnv* env, 75 jobject obj); 76 77 void GetChildIDs(JNIEnv* env, 78 jobject obj, 79 jlong id, 80 jint type, 81 jboolean get_folders, 82 jboolean get_bookmarks, 83 jobject j_result_obj); 84 85 void GetAllBookmarkIDsOrderedByCreationDate(JNIEnv* env, 86 jobject obj, 87 jobject j_result_obj); 88 89 void SetBookmarkTitle(JNIEnv* env, 90 jobject obj, 91 jlong id, 92 jint type, 93 jstring title); 94 95 void SetBookmarkUrl(JNIEnv* env, 96 jobject obj, 97 jlong id, 98 jint type, 99 jstring url); 100 101 bool DoesBookmarkExist(JNIEnv* env, jobject obj, jlong id, jint type); 102 103 void GetBookmarksForFolder(JNIEnv* env, 104 jobject obj, 105 jobject j_folder_id_obj, 106 jobject j_callback_obj, 107 jobject j_result_obj); 108 109 void GetCurrentFolderHierarchy(JNIEnv* env, 110 jobject obj, 111 jobject j_folder_id_obj, 112 jobject j_callback_obj, 113 jobject j_result_obj); 114 115 base::android::ScopedJavaLocalRef<jobject> AddFolder(JNIEnv* env, 116 jobject obj, 117 jobject j_parent_id_obj, 118 jint index, 119 jstring j_title); 120 121 void DeleteBookmark(JNIEnv* env, jobject obj, jobject j_bookmark_id_obj); 122 123 void MoveBookmark(JNIEnv* env, 124 jobject obj, 125 jobject j_bookmark_id_obj, 126 jobject j_parent_id_obj, 127 jint index); 128 129 base::android::ScopedJavaLocalRef<jobject> AddBookmark( 130 JNIEnv* env, 131 jobject obj, 132 jobject j_parent_id_obj, 133 jint index, 134 jstring j_title, 135 jstring j_url); 136 137 void Undo(JNIEnv* env, jobject obj); 138 139 void StartGroupingUndos(JNIEnv* env, jobject obj); 140 141 void EndGroupingUndos(JNIEnv* env, jobject obj); 142 143 private: 144 virtual ~BookmarksBridge(); 145 146 base::android::ScopedJavaLocalRef<jobject> CreateJavaBookmark( 147 const BookmarkNode* node); 148 void ExtractBookmarkNodeInformation( 149 const BookmarkNode* node, 150 jobject j_result_obj); 151 const BookmarkNode* GetNodeByID(long node_id, int type); 152 const BookmarkNode* GetFolderWithFallback(long folder_id, int type); 153 // Returns whether |node| can be modified by the user. 154 bool IsEditable(const BookmarkNode* node) const; 155 // Returns whether |node| is a managed bookmark. 156 bool IsManaged(const BookmarkNode* node) const; 157 const BookmarkNode* GetParentNode(const BookmarkNode* node); 158 int GetBookmarkType(const BookmarkNode* node); 159 base::string16 GetTitle(const BookmarkNode* node) const; 160 bool IsReachable(const BookmarkNode* node) const; 161 bool IsLoaded() const; 162 bool IsFolderAvailable(const BookmarkNode* folder) const; 163 void NotifyIfDoneLoading(); 164 165 // Override BaseBookmarkModelObserver. 166 // Called when there are changes to the bookmark model that don't trigger 167 // any of the other callback methods. For example, this is called when 168 // partner bookmarks change. 169 virtual void BookmarkModelChanged() OVERRIDE; 170 virtual void BookmarkModelLoaded(BookmarkModel* model, 171 bool ids_reassigned) OVERRIDE; 172 virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE; 173 virtual void BookmarkNodeMoved(BookmarkModel* model, 174 const BookmarkNode* old_parent, 175 int old_index, 176 const BookmarkNode* new_parent, 177 int new_index) OVERRIDE; 178 virtual void BookmarkNodeAdded(BookmarkModel* model, 179 const BookmarkNode* parent, 180 int index) OVERRIDE; 181 virtual void BookmarkNodeRemoved(BookmarkModel* model, 182 const BookmarkNode* parent, 183 int old_index, 184 const BookmarkNode* node, 185 const std::set<GURL>& removed_urls) OVERRIDE; 186 virtual void BookmarkNodeChanged(BookmarkModel* model, 187 const BookmarkNode* node) OVERRIDE; 188 virtual void BookmarkNodeChildrenReordered(BookmarkModel* model, 189 const BookmarkNode* node) OVERRIDE; 190 virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE; 191 virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) OVERRIDE; 192 193 // Override PartnerBookmarksShim::Observer 194 virtual void PartnerShimChanged(PartnerBookmarksShim* shim) OVERRIDE; 195 virtual void PartnerShimLoaded(PartnerBookmarksShim* shim) OVERRIDE; 196 virtual void ShimBeingDeleted(PartnerBookmarksShim* shim) OVERRIDE; 197 198 Profile* profile_; 199 JavaObjectWeakGlobalRef weak_java_ref_; 200 BookmarkModel* bookmark_model_; // weak 201 ChromeBookmarkClient* client_; // weak 202 scoped_ptr<bookmarks::ScopedGroupBookmarkActions> grouped_bookmark_actions_; 203 204 // Information about the Partner bookmarks (must check for IsLoaded()). 205 // This is owned by profile. 206 PartnerBookmarksShim* partner_bookmarks_shim_; 207 208 DISALLOW_COPY_AND_ASSIGN(BookmarksBridge); 209 }; 210 211 #endif // CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_ 212