Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / android / bookmarks / bookmarks_bridge.h
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_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"
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 ManagedBookmarksShim::Observer,
25                         public PartnerBookmarksShim::Observer {
26  public:
27   BookmarksBridge(JNIEnv* env, jobject obj, jobject j_profile);
28   void Destroy(JNIEnv*, jobject);
29
30   static bool RegisterBookmarksBridge(JNIEnv* env);
31
32   void GetBookmarksForFolder(JNIEnv* env,
33                              jobject obj,
34                              jobject j_folder_id_obj,
35                              jobject j_callback_obj,
36                              jobject j_result_obj);
37
38   void GetCurrentFolderHierarchy(JNIEnv* env,
39                                  jobject obj,
40                                  jobject j_folder_id_obj,
41                                  jobject j_callback_obj,
42                                  jobject j_result_obj);
43
44   void DeleteBookmark(JNIEnv* env,
45                       jobject obj,
46                       jobject j_bookmark_id_obj);
47
48  private:
49   virtual ~BookmarksBridge();
50
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();
67
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,
78                                  int old_index,
79                                  const BookmarkNode* new_parent,
80                                  int new_index) OVERRIDE;
81   virtual void BookmarkNodeAdded(BookmarkModel* model,
82                                  const BookmarkNode* parent,
83                                  int index) OVERRIDE;
84   virtual void BookmarkNodeRemoved(BookmarkModel* model,
85                                    const BookmarkNode* parent,
86                                    int old_index,
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;
94
95   // Override ManagedBookmarksShim::Observer
96   virtual void OnManagedBookmarksChanged() OVERRIDE;
97
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;
102
103   Profile* profile_;
104   JavaObjectWeakGlobalRef weak_java_ref_;
105   BookmarkModel* bookmark_model_;  // weak
106
107   scoped_ptr<ManagedBookmarksShim> managed_bookmarks_shim_;
108
109   // Information about the Partner bookmarks (must check for IsLoaded()).
110   // This is owned by profile.
111   PartnerBookmarksShim* partner_bookmarks_shim_;
112
113   DISALLOW_COPY_AND_ASSIGN(BookmarksBridge);
114 };
115
116 #endif  // CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_