- add sources.
[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/bookmarks/base_bookmark_model_observer.h"
16
17 class Profile;
18
19 // The delegate to fetch bookmarks information for the Android native
20 // bookmark page. This fetches the bookmarks, title, urls, folder
21 // hierarchy.
22 class BookmarksBridge : public BaseBookmarkModelObserver,
23                         public ManagedBookmarksShim::Observer {
24  public:
25   BookmarksBridge(JNIEnv* env, jobject obj, jobject j_profile);
26   void Destroy(JNIEnv*, jobject);
27
28   static bool RegisterBookmarksBridge(JNIEnv* env);
29
30   void GetBookmarksForFolder(JNIEnv* env,
31                              jobject obj,
32                              jobject j_folder_id_obj,
33                              jobject j_callback_obj,
34                              jobject j_result_obj);
35
36   void GetCurrentFolderHierarchy(JNIEnv* env,
37                                  jobject obj,
38                                  jobject j_folder_id_obj,
39                                  jobject j_callback_obj,
40                                  jobject j_result_obj);
41
42   void DeleteBookmark(JNIEnv* env,
43                       jobject obj,
44                       jobject j_bookmark_id_obj);
45
46  private:
47   virtual ~BookmarksBridge();
48
49   base::android::ScopedJavaLocalRef<jobject> CreateJavaBookmark(
50       const BookmarkNode* node);
51   void ExtractBookmarkNodeInformation(
52       const BookmarkNode* node,
53       jobject j_result_obj);
54   const BookmarkNode* GetNodeByID(long node_id, int type);
55   const BookmarkNode* GetFolderWithFallback(long folder_id, int type);
56   // Returns true if |node| can be modified by the user.
57   bool IsEditable(const BookmarkNode* node) const;
58   const BookmarkNode* GetParentNode(const BookmarkNode* node);
59   int GetBookmarkType(const BookmarkNode* node);
60
61   // Override BaseBookmarkModelObserver.
62   // Called when there are changes to the bookmark model that don't trigger
63   // any of the other callback methods. For example, this is called when
64   // managed or partner bookmarks change.
65   virtual void BookmarkModelChanged() OVERRIDE;
66   virtual void Loaded(BookmarkModel* model, bool ids_reassigned) OVERRIDE;
67   virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE;
68   virtual void BookmarkNodeMoved(BookmarkModel* model,
69                                  const BookmarkNode* old_parent,
70                                  int old_index,
71                                  const BookmarkNode* new_parent,
72                                  int new_index) OVERRIDE;
73   virtual void BookmarkNodeAdded(BookmarkModel* model,
74                                  const BookmarkNode* parent,
75                                  int index) OVERRIDE;
76   virtual void BookmarkNodeRemoved(BookmarkModel* model,
77                                    const BookmarkNode* parent,
78                                    int old_index,
79                                    const BookmarkNode* node) OVERRIDE;
80   virtual void BookmarkNodeChanged(BookmarkModel* model,
81                                    const BookmarkNode* node) OVERRIDE;
82   virtual void BookmarkNodeChildrenReordered(BookmarkModel* model,
83                                              const BookmarkNode* node) OVERRIDE;
84   virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE;
85   virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) OVERRIDE;
86
87   // Override ManagedBookmarksShim::Observer
88   virtual void OnManagedBookmarksChanged() OVERRIDE;
89
90   JavaObjectWeakGlobalRef weak_java_ref_;
91   BookmarkModel* bookmark_model_;  // weak
92
93   scoped_ptr<ManagedBookmarksShim> managed_bookmarks_shim_;
94
95   DISALLOW_COPY_AND_ASSIGN(BookmarksBridge);
96 };
97
98 #endif  // CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_