Home | History | Annotate | Download | only in bookmarks
      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