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/managed_bookmarks_shim.h"
15 #include "chrome/browser/android/bookmarks/partner_bookmarks_shim.h"
16 #include "components/bookmarks/browser/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
);
48 void MoveBookmark(JNIEnv
* env
,
50 jobject j_bookmark_id_obj
,
51 jobject j_parent_id_obj
,
55 virtual ~BookmarksBridge();
57 base::android::ScopedJavaLocalRef
<jobject
> CreateJavaBookmark(
58 const BookmarkNode
* node
);
59 void ExtractBookmarkNodeInformation(
60 const BookmarkNode
* node
,
61 jobject j_result_obj
);
62 const BookmarkNode
* GetNodeByID(long node_id
, int type
);
63 const BookmarkNode
* GetFolderWithFallback(long folder_id
, int type
);
64 // Returns true if |node| can be modified by the user.
65 bool IsEditable(const BookmarkNode
* node
) const;
66 const BookmarkNode
* GetParentNode(const BookmarkNode
* node
);
67 int GetBookmarkType(const BookmarkNode
* node
);
68 base::string16
GetTitle(const BookmarkNode
* node
) const;
69 bool IsReachable(const BookmarkNode
* node
) const;
70 bool IsLoaded() const;
71 bool IsFolderAvailable(const BookmarkNode
* folder
) const;
72 void NotifyIfDoneLoading();
74 // Override BaseBookmarkModelObserver.
75 // Called when there are changes to the bookmark model that don't trigger
76 // any of the other callback methods. For example, this is called when
77 // managed or partner bookmarks change.
78 virtual void BookmarkModelChanged() OVERRIDE
;
79 virtual void BookmarkModelLoaded(BookmarkModel
* model
,
80 bool ids_reassigned
) OVERRIDE
;
81 virtual void BookmarkModelBeingDeleted(BookmarkModel
* model
) OVERRIDE
;
82 virtual void BookmarkNodeMoved(BookmarkModel
* model
,
83 const BookmarkNode
* old_parent
,
85 const BookmarkNode
* new_parent
,
86 int new_index
) OVERRIDE
;
87 virtual void BookmarkNodeAdded(BookmarkModel
* model
,
88 const BookmarkNode
* parent
,
90 virtual void BookmarkNodeRemoved(BookmarkModel
* model
,
91 const BookmarkNode
* parent
,
93 const BookmarkNode
* node
,
94 const std::set
<GURL
>& removed_urls
) OVERRIDE
;
95 virtual void BookmarkNodeChanged(BookmarkModel
* model
,
96 const BookmarkNode
* node
) OVERRIDE
;
97 virtual void BookmarkNodeChildrenReordered(BookmarkModel
* model
,
98 const BookmarkNode
* node
) OVERRIDE
;
99 virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel
* model
) OVERRIDE
;
100 virtual void ExtensiveBookmarkChangesEnded(BookmarkModel
* model
) OVERRIDE
;
102 // Override ManagedBookmarksShim::Observer
103 virtual void OnManagedBookmarksChanged() OVERRIDE
;
105 // Override PartnerBookmarksShim::Observer
106 virtual void PartnerShimChanged(PartnerBookmarksShim
* shim
) OVERRIDE
;
107 virtual void PartnerShimLoaded(PartnerBookmarksShim
* shim
) OVERRIDE
;
108 virtual void ShimBeingDeleted(PartnerBookmarksShim
* shim
) OVERRIDE
;
111 JavaObjectWeakGlobalRef weak_java_ref_
;
112 BookmarkModel
* bookmark_model_
; // weak
114 scoped_ptr
<ManagedBookmarksShim
> managed_bookmarks_shim_
;
116 // Information about the Partner bookmarks (must check for IsLoaded()).
117 // This is owned by profile.
118 PartnerBookmarksShim
* partner_bookmarks_shim_
;
120 DISALLOW_COPY_AND_ASSIGN(BookmarksBridge
);
123 #endif // CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_