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 18 class Profile; 19 20 // The delegate to fetch bookmarks information for the Android native 21 // bookmark page. This fetches the bookmarks, title, urls, folder 22 // hierarchy. 23 class BookmarksBridge : public BaseBookmarkModelObserver, 24 public PartnerBookmarksShim::Observer { 25 public: 26 BookmarksBridge(JNIEnv* env, jobject obj, jobject j_profile); 27 void Destroy(JNIEnv*, jobject); 28 29 static bool RegisterBookmarksBridge(JNIEnv* env); 30 31 void GetBookmarksForFolder(JNIEnv* env, 32 jobject obj, 33 jobject j_folder_id_obj, 34 jobject j_callback_obj, 35 jobject j_result_obj); 36 37 void GetCurrentFolderHierarchy(JNIEnv* env, 38 jobject obj, 39 jobject j_folder_id_obj, 40 jobject j_callback_obj, 41 jobject j_result_obj); 42 43 void DeleteBookmark(JNIEnv* env, 44 jobject obj, 45 jobject j_bookmark_id_obj); 46 47 void MoveBookmark(JNIEnv* env, 48 jobject obj, 49 jobject j_bookmark_id_obj, 50 jobject j_parent_id_obj, 51 jint index); 52 53 private: 54 virtual ~BookmarksBridge(); 55 56 base::android::ScopedJavaLocalRef<jobject> CreateJavaBookmark( 57 const BookmarkNode* node); 58 void ExtractBookmarkNodeInformation( 59 const BookmarkNode* node, 60 jobject j_result_obj); 61 const BookmarkNode* GetNodeByID(long node_id, int type); 62 const BookmarkNode* GetFolderWithFallback(long folder_id, int type); 63 // Returns whether |node| can be modified by the user. 64 bool IsEditable(const BookmarkNode* node) const; 65 // Returns whether |node| is a managed bookmark. 66 bool IsManaged(const BookmarkNode* node) const; 67 const BookmarkNode* GetParentNode(const BookmarkNode* node); 68 int GetBookmarkType(const BookmarkNode* node); 69 base::string16 GetTitle(const BookmarkNode* node) const; 70 bool IsReachable(const BookmarkNode* node) const; 71 bool IsLoaded() const; 72 bool IsFolderAvailable(const BookmarkNode* folder) const; 73 void NotifyIfDoneLoading(); 74 75 // Override BaseBookmarkModelObserver. 76 // Called when there are changes to the bookmark model that don't trigger 77 // any of the other callback methods. For example, this is called when 78 // partner bookmarks change. 79 virtual void BookmarkModelChanged() OVERRIDE; 80 virtual void BookmarkModelLoaded(BookmarkModel* model, 81 bool ids_reassigned) OVERRIDE; 82 virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE; 83 virtual void BookmarkNodeMoved(BookmarkModel* model, 84 const BookmarkNode* old_parent, 85 int old_index, 86 const BookmarkNode* new_parent, 87 int new_index) OVERRIDE; 88 virtual void BookmarkNodeAdded(BookmarkModel* model, 89 const BookmarkNode* parent, 90 int index) OVERRIDE; 91 virtual void BookmarkNodeRemoved(BookmarkModel* model, 92 const BookmarkNode* parent, 93 int old_index, 94 const BookmarkNode* node, 95 const std::set<GURL>& removed_urls) OVERRIDE; 96 virtual void BookmarkNodeChanged(BookmarkModel* model, 97 const BookmarkNode* node) OVERRIDE; 98 virtual void BookmarkNodeChildrenReordered(BookmarkModel* model, 99 const BookmarkNode* node) OVERRIDE; 100 virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE; 101 virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) OVERRIDE; 102 103 // Override PartnerBookmarksShim::Observer 104 virtual void PartnerShimChanged(PartnerBookmarksShim* shim) OVERRIDE; 105 virtual void PartnerShimLoaded(PartnerBookmarksShim* shim) OVERRIDE; 106 virtual void ShimBeingDeleted(PartnerBookmarksShim* shim) OVERRIDE; 107 108 Profile* profile_; 109 JavaObjectWeakGlobalRef weak_java_ref_; 110 BookmarkModel* bookmark_model_; // weak 111 ChromeBookmarkClient* client_; // weak 112 113 // Information about the Partner bookmarks (must check for IsLoaded()). 114 // This is owned by profile. 115 PartnerBookmarksShim* partner_bookmarks_shim_; 116 117 DISALLOW_COPY_AND_ASSIGN(BookmarksBridge); 118 }; 119 120 #endif // CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_ 121