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 #include "components/bookmarks/common/android/bookmark_id.h"
     18 
     19 namespace bookmarks {
     20 class ScopedGroupBookmarkActions;
     21 }
     22 
     23 class Profile;
     24 
     25 // The delegate to fetch bookmarks information for the Android native
     26 // bookmark page. This fetches the bookmarks, title, urls, folder
     27 // hierarchy.
     28 class BookmarksBridge : public BaseBookmarkModelObserver,
     29                         public PartnerBookmarksShim::Observer {
     30  public:
     31   BookmarksBridge(JNIEnv* env, jobject obj, jobject j_profile);
     32   void Destroy(JNIEnv*, jobject);
     33 
     34   static bool RegisterBookmarksBridge(JNIEnv* env);
     35 
     36   bool IsDoingExtensiveChanges(JNIEnv* env, jobject obj);
     37 
     38   void LoadEmptyPartnerBookmarkShimForTesting(JNIEnv* env, jobject obj);
     39 
     40   base::android::ScopedJavaLocalRef<jobject> GetBookmarkByID(
     41       JNIEnv* env,
     42       jobject obj,
     43       jlong id,
     44       jint type);
     45 
     46   void GetPermanentNodeIDs(JNIEnv* env,
     47                            jobject obj,
     48                            jobject j_result_obj);
     49 
     50   void GetTopLevelFolderParentIDs(JNIEnv* env,
     51                                   jobject obj,
     52                                   jobject j_result_obj);
     53 
     54   void GetTopLevelFolderIDs(JNIEnv* env,
     55                             jobject obj,
     56                             jboolean get_special,
     57                             jboolean get_normal,
     58                             jobject j_result_obj);
     59 
     60   void GetUncategorizedBookmarkIDs(JNIEnv* env,
     61                                    jobject obj,
     62                                    jobject j_result_obj);
     63   void GetAllFoldersWithDepths(JNIEnv* env,
     64                                jobject obj,
     65                                jobject j_folders_obj,
     66                                jobject j_depths_obj);
     67 
     68   base::android::ScopedJavaLocalRef<jobject> GetMobileFolderId(JNIEnv* env,
     69                                                                jobject obj);
     70 
     71   base::android::ScopedJavaLocalRef<jobject> GetOtherFolderId(JNIEnv* env,
     72                                                               jobject obj);
     73 
     74   base::android::ScopedJavaLocalRef<jobject> GetDesktopFolderId(JNIEnv* env,
     75                                                                 jobject obj);
     76 
     77   void GetChildIDs(JNIEnv* env,
     78                    jobject obj,
     79                    jlong id,
     80                    jint type,
     81                    jboolean get_folders,
     82                    jboolean get_bookmarks,
     83                    jobject j_result_obj);
     84 
     85   void GetAllBookmarkIDsOrderedByCreationDate(JNIEnv* env,
     86                                               jobject obj,
     87                                               jobject j_result_obj);
     88 
     89   void SetBookmarkTitle(JNIEnv* env,
     90                         jobject obj,
     91                         jlong id,
     92                         jint type,
     93                         jstring title);
     94 
     95   void SetBookmarkUrl(JNIEnv* env,
     96                       jobject obj,
     97                       jlong id,
     98                       jint type,
     99                       jstring url);
    100 
    101   bool DoesBookmarkExist(JNIEnv* env, jobject obj, jlong id, jint type);
    102 
    103   void GetBookmarksForFolder(JNIEnv* env,
    104                              jobject obj,
    105                              jobject j_folder_id_obj,
    106                              jobject j_callback_obj,
    107                              jobject j_result_obj);
    108 
    109   void GetCurrentFolderHierarchy(JNIEnv* env,
    110                                  jobject obj,
    111                                  jobject j_folder_id_obj,
    112                                  jobject j_callback_obj,
    113                                  jobject j_result_obj);
    114 
    115   base::android::ScopedJavaLocalRef<jobject> AddFolder(JNIEnv* env,
    116                                                        jobject obj,
    117                                                        jobject j_parent_id_obj,
    118                                                        jint index,
    119                                                        jstring j_title);
    120 
    121   void DeleteBookmark(JNIEnv* env, jobject obj, jobject j_bookmark_id_obj);
    122 
    123   void MoveBookmark(JNIEnv* env,
    124                     jobject obj,
    125                     jobject j_bookmark_id_obj,
    126                     jobject j_parent_id_obj,
    127                     jint index);
    128 
    129   base::android::ScopedJavaLocalRef<jobject> AddBookmark(
    130       JNIEnv* env,
    131       jobject obj,
    132       jobject j_parent_id_obj,
    133       jint index,
    134       jstring j_title,
    135       jstring j_url);
    136 
    137   void Undo(JNIEnv* env, jobject obj);
    138 
    139   void StartGroupingUndos(JNIEnv* env, jobject obj);
    140 
    141   void EndGroupingUndos(JNIEnv* env, jobject obj);
    142 
    143  private:
    144   virtual ~BookmarksBridge();
    145 
    146   base::android::ScopedJavaLocalRef<jobject> CreateJavaBookmark(
    147       const BookmarkNode* node);
    148   void ExtractBookmarkNodeInformation(
    149       const BookmarkNode* node,
    150       jobject j_result_obj);
    151   const BookmarkNode* GetNodeByID(long node_id, int type);
    152   const BookmarkNode* GetFolderWithFallback(long folder_id, int type);
    153   // Returns whether |node| can be modified by the user.
    154   bool IsEditable(const BookmarkNode* node) const;
    155   // Returns whether |node| is a managed bookmark.
    156   bool IsManaged(const BookmarkNode* node) const;
    157   const BookmarkNode* GetParentNode(const BookmarkNode* node);
    158   int GetBookmarkType(const BookmarkNode* node);
    159   base::string16 GetTitle(const BookmarkNode* node) const;
    160   bool IsReachable(const BookmarkNode* node) const;
    161   bool IsLoaded() const;
    162   bool IsFolderAvailable(const BookmarkNode* folder) const;
    163   void NotifyIfDoneLoading();
    164 
    165   // Override BaseBookmarkModelObserver.
    166   // Called when there are changes to the bookmark model that don't trigger
    167   // any of the other callback methods. For example, this is called when
    168   // partner bookmarks change.
    169   virtual void BookmarkModelChanged() OVERRIDE;
    170   virtual void BookmarkModelLoaded(BookmarkModel* model,
    171                                    bool ids_reassigned) OVERRIDE;
    172   virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE;
    173   virtual void BookmarkNodeMoved(BookmarkModel* model,
    174                                  const BookmarkNode* old_parent,
    175                                  int old_index,
    176                                  const BookmarkNode* new_parent,
    177                                  int new_index) OVERRIDE;
    178   virtual void BookmarkNodeAdded(BookmarkModel* model,
    179                                  const BookmarkNode* parent,
    180                                  int index) OVERRIDE;
    181   virtual void BookmarkNodeRemoved(BookmarkModel* model,
    182                                    const BookmarkNode* parent,
    183                                    int old_index,
    184                                    const BookmarkNode* node,
    185                                    const std::set<GURL>& removed_urls) OVERRIDE;
    186   virtual void BookmarkNodeChanged(BookmarkModel* model,
    187                                    const BookmarkNode* node) OVERRIDE;
    188   virtual void BookmarkNodeChildrenReordered(BookmarkModel* model,
    189                                              const BookmarkNode* node) OVERRIDE;
    190   virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE;
    191   virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) OVERRIDE;
    192 
    193   // Override PartnerBookmarksShim::Observer
    194   virtual void PartnerShimChanged(PartnerBookmarksShim* shim) OVERRIDE;
    195   virtual void PartnerShimLoaded(PartnerBookmarksShim* shim) OVERRIDE;
    196   virtual void ShimBeingDeleted(PartnerBookmarksShim* shim) OVERRIDE;
    197 
    198   Profile* profile_;
    199   JavaObjectWeakGlobalRef weak_java_ref_;
    200   BookmarkModel* bookmark_model_;  // weak
    201   ChromeBookmarkClient* client_;   // weak
    202   scoped_ptr<bookmarks::ScopedGroupBookmarkActions> grouped_bookmark_actions_;
    203 
    204   // Information about the Partner bookmarks (must check for IsLoaded()).
    205   // This is owned by profile.
    206   PartnerBookmarksShim* partner_bookmarks_shim_;
    207 
    208   DISALLOW_COPY_AND_ASSIGN(BookmarksBridge);
    209 };
    210 
    211 #endif  // CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_
    212