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_helper.h"
12 #include "base/basictypes.h"
13 #include "base/compiler_specific.h"
14 #include "chrome/browser/android/bookmarks/managed_bookmarks_shim.h"
15 #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h"
16 #include "chrome/browser/bookmarks/base_bookmark_model_observer.h"
20 // The delegate to fetch bookmarks information for the Android native
21 // bookmark page. This fetches the bookmarks, title, urls, folder
23 class BookmarksBridge : public BaseBookmarkModelObserver,
24 public ManagedBookmarksShim::Observer,
25 public PartnerBookmarksShim::Observer {
27 BookmarksBridge(JNIEnv* env, jobject obj, jobject j_profile);
28 void Destroy(JNIEnv*, jobject);
30 static bool RegisterBookmarksBridge(JNIEnv* env);
32 void GetBookmarksForFolder(JNIEnv* env,
34 jobject j_folder_id_obj,
35 jobject j_callback_obj,
36 jobject j_result_obj);
38 void GetCurrentFolderHierarchy(JNIEnv* env,
40 jobject j_folder_id_obj,
41 jobject j_callback_obj,
42 jobject j_result_obj);
44 void DeleteBookmark(JNIEnv* env,
46 jobject j_bookmark_id_obj);
49 virtual ~BookmarksBridge();
51 base::android::ScopedJavaLocalRef<jobject> CreateJavaBookmark(
52 const BookmarkNode* node);
53 void ExtractBookmarkNodeInformation(
54 const BookmarkNode* node,
55 jobject j_result_obj);
56 const BookmarkNode* GetNodeByID(long node_id, int type);
57 const BookmarkNode* GetFolderWithFallback(long folder_id, int type);
58 // Returns true if |node| can be modified by the user.
59 bool IsEditable(const BookmarkNode* node) const;
60 const BookmarkNode* GetParentNode(const BookmarkNode* node);
61 int GetBookmarkType(const BookmarkNode* node);
62 base::string16 GetTitle(const BookmarkNode* node) const;
63 bool IsReachable(const BookmarkNode* node) const;
64 bool IsLoaded() const;
65 bool IsFolderAvailable(const BookmarkNode* folder) const;
66 void NotifyIfDoneLoading();
68 // Override BaseBookmarkModelObserver.
69 // Called when there are changes to the bookmark model that don't trigger
70 // any of the other callback methods. For example, this is called when
71 // managed or partner bookmarks change.
72 virtual void BookmarkModelChanged() OVERRIDE;
73 virtual void BookmarkModelLoaded(BookmarkModel* model,
74 bool ids_reassigned) OVERRIDE;
75 virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE;
76 virtual void BookmarkNodeMoved(BookmarkModel* model,
77 const BookmarkNode* old_parent,
79 const BookmarkNode* new_parent,
80 int new_index) OVERRIDE;
81 virtual void BookmarkNodeAdded(BookmarkModel* model,
82 const BookmarkNode* parent,
84 virtual void BookmarkNodeRemoved(BookmarkModel* model,
85 const BookmarkNode* parent,
87 const BookmarkNode* node) OVERRIDE;
88 virtual void BookmarkNodeChanged(BookmarkModel* model,
89 const BookmarkNode* node) OVERRIDE;
90 virtual void BookmarkNodeChildrenReordered(BookmarkModel* model,
91 const BookmarkNode* node) OVERRIDE;
92 virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE;
93 virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) OVERRIDE;
95 // Override ManagedBookmarksShim::Observer
96 virtual void OnManagedBookmarksChanged() OVERRIDE;
98 // Override PartnerBookmarksShim::Observer
99 virtual void PartnerShimChanged(PartnerBookmarksShim* shim) OVERRIDE;
100 virtual void PartnerShimLoaded(PartnerBookmarksShim* shim) OVERRIDE;
101 virtual void ShimBeingDeleted(PartnerBookmarksShim* shim) OVERRIDE;
104 JavaObjectWeakGlobalRef weak_java_ref_;
105 BookmarkModel* bookmark_model_; // weak
107 scoped_ptr<ManagedBookmarksShim> managed_bookmarks_shim_;
109 // Information about the Partner bookmarks (must check for IsLoaded()).
110 // This is owned by profile.
111 PartnerBookmarksShim* partner_bookmarks_shim_;
113 DISALLOW_COPY_AND_ASSIGN(BookmarksBridge);
116 #endif // CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_