Home | History | Annotate | Download | only in provider
      1 // Copyright (c) 2012 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_PROVIDER_CHROME_BROWSER_PROVIDER_H_
      6 #define CHROME_BROWSER_ANDROID_PROVIDER_CHROME_BROWSER_PROVIDER_H_
      7 
      8 #include "base/android/jni_weak_ref.h"
      9 #include "base/android/scoped_java_ref.h"
     10 #include "base/memory/scoped_ptr.h"
     11 #include "base/synchronization/waitable_event.h"
     12 #include "base/task/cancelable_task_tracker.h"
     13 #include "components/bookmarks/browser/base_bookmark_model_observer.h"
     14 #include "components/history/core/android/android_history_types.h"
     15 #include "content/public/browser/notification_observer.h"
     16 #include "content/public/browser/notification_registrar.h"
     17 
     18 class AndroidHistoryProviderService;
     19 class FaviconService;
     20 class Profile;
     21 
     22 namespace history {
     23 class TopSites;
     24 }
     25 
     26 namespace sql {
     27 class Statement;
     28 }
     29 
     30 // This class implements the native methods of ChromeBrowserProvider.java
     31 class ChromeBrowserProvider : public BaseBookmarkModelObserver,
     32                               public content::NotificationObserver {
     33  public:
     34   ChromeBrowserProvider(JNIEnv* env, jobject obj);
     35   void Destroy(JNIEnv*, jobject);
     36 
     37   // JNI registration.
     38   static bool RegisterChromeBrowserProvider(JNIEnv* env);
     39 
     40   // Adds either a new bookmark or bookmark folder based on |is_folder|.  The
     41   // bookmark is added to the beginning of the specified parent and if the
     42   // parent ID is not valid (i.e. < 0) then it will be added to the bookmark
     43   // bar.
     44   jlong AddBookmark(JNIEnv* env, jobject,
     45                     jstring jurl,
     46                     jstring jtitle,
     47                     jboolean is_folder,
     48                     jlong parent_id);
     49 
     50   // Removes a bookmark (or folder) with the specified ID.
     51   jint RemoveBookmark(JNIEnv*, jobject, jlong id);
     52 
     53   // Updates a bookmark (or folder) with the the new title and new URL.
     54   // The |url| field will be ignored if the bookmark node is a folder.
     55   // If a valid |parent_id| (>= 0) different from the currently specified
     56   // parent is given, the node will be moved to that folder as the first
     57   // child.
     58   jint UpdateBookmark(JNIEnv* env,
     59                       jobject,
     60                       jlong id,
     61                       jstring url,
     62                       jstring title,
     63                       jlong parent_id);
     64 
     65   // The below are methods to support Android public API.
     66   // Bookmark and history APIs. -----------------------------------------------
     67   jlong AddBookmarkFromAPI(JNIEnv* env,
     68                            jobject obj,
     69                            jstring url,
     70                            jobject created,
     71                            jobject isBookmark,
     72                            jobject date,
     73                            jbyteArray favicon,
     74                            jstring title,
     75                            jobject visits,
     76                            jlong parent_id);
     77 
     78   base::android::ScopedJavaLocalRef<jobject> QueryBookmarkFromAPI(
     79       JNIEnv* env,
     80       jobject obj,
     81       jobjectArray projection,
     82       jstring selections,
     83       jobjectArray selection_args,
     84       jstring sort_order);
     85 
     86   jint UpdateBookmarkFromAPI(JNIEnv* env,
     87                              jobject obj,
     88                              jstring url,
     89                              jobject created,
     90                              jobject isBookmark,
     91                              jobject date,
     92                              jbyteArray favicon,
     93                              jstring title,
     94                              jobject visits,
     95                              jlong parent_id,
     96                              jstring selections,
     97                              jobjectArray selection_args);
     98 
     99   jint RemoveBookmarkFromAPI(JNIEnv* env,
    100                              jobject obj,
    101                              jstring selections,
    102                              jobjectArray selection_args);
    103 
    104   jint RemoveHistoryFromAPI(JNIEnv* env,
    105                             jobject obj,
    106                             jstring selections,
    107                             jobjectArray selection_args);
    108 
    109   jlong AddSearchTermFromAPI(JNIEnv* env,
    110                              jobject obj,
    111                              jstring search_term,
    112                              jobject date);
    113 
    114   base::android::ScopedJavaLocalRef<jobject> QuerySearchTermFromAPI(
    115       JNIEnv* env,
    116       jobject obj,
    117       jobjectArray projection,
    118       jstring selections,
    119       jobjectArray selection_args,
    120       jstring sort_order);
    121 
    122   jint RemoveSearchTermFromAPI(JNIEnv* env,
    123                                jobject obj,
    124                                jstring selections,
    125                                jobjectArray selection_args);
    126 
    127   jint UpdateSearchTermFromAPI(JNIEnv* env,
    128                                jobject obj,
    129                                jstring search_term,
    130                                jobject date,
    131                                jstring selections,
    132                                jobjectArray selection_args);
    133 
    134   // Custom provider API methods. ---------------------------------------------
    135   jlong CreateBookmarksFolderOnce(JNIEnv* env,
    136                                   jobject obj,
    137                                   jstring title,
    138                                   jlong parent_id);
    139 
    140   void RemoveAllUserBookmarks(JNIEnv* env, jobject obj);
    141 
    142   base::android::ScopedJavaLocalRef<jobject> GetEditableBookmarkFolders(
    143       JNIEnv* env,
    144       jobject obj);
    145 
    146   base::android::ScopedJavaLocalRef<jobject> GetBookmarkNode(
    147       JNIEnv* env,
    148       jobject obj,
    149       jlong id,
    150       jboolean get_parent,
    151       jboolean get_children);
    152 
    153   base::android::ScopedJavaLocalRef<jobject> GetMobileBookmarksFolder(
    154       JNIEnv* env,
    155       jobject obj);
    156 
    157   jboolean IsBookmarkInMobileBookmarksBranch(JNIEnv* env,
    158                                              jobject obj,
    159                                              jlong id);
    160 
    161   jboolean BookmarkNodeExists(JNIEnv* env,
    162                               jobject obj,
    163                               jlong id);
    164 
    165   base::android::ScopedJavaLocalRef<jbyteArray> GetFaviconOrTouchIcon(
    166       JNIEnv* env,
    167       jobject obj,
    168       jstring url);
    169 
    170   base::android::ScopedJavaLocalRef<jbyteArray> GetThumbnail(JNIEnv* env,
    171                                                              jobject obj,
    172                                                              jstring url);
    173 
    174  private:
    175   virtual ~ChromeBrowserProvider();
    176 
    177   // Override BaseBookmarkModelObserver.
    178   virtual void BookmarkModelChanged() OVERRIDE;
    179   virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE;
    180   virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) OVERRIDE;
    181 
    182   // Override NotificationObserver.
    183   virtual void Observe(int type,
    184                        const content::NotificationSource& source,
    185                        const content::NotificationDetails& details) OVERRIDE;
    186 
    187   JavaObjectWeakGlobalRef weak_java_provider_;
    188 
    189   Profile* profile_;
    190   BookmarkModel* bookmark_model_;
    191   history::TopSites* top_sites_;
    192 
    193   scoped_ptr<AndroidHistoryProviderService> service_;
    194 
    195   base::CancelableTaskTracker cancelable_task_tracker_;
    196 
    197   // Used to register/unregister notification observer.
    198   content::NotificationRegistrar notification_registrar_;
    199 
    200   bool handling_extensive_changes_;
    201 
    202   DISALLOW_COPY_AND_ASSIGN(ChromeBrowserProvider);
    203 };
    204 
    205 #endif  // CHROME_BROWSER_ANDROID_PROVIDER_CHROME_BROWSER_PROVIDER_H_
    206