Home | History | Annotate | Download | only in bookmark_manager_private
      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_EXTENSIONS_API_BOOKMARK_MANAGER_PRIVATE_BOOKMARK_MANAGER_PRIVATE_API_H_
      6 #define CHROME_BROWSER_EXTENSIONS_API_BOOKMARK_MANAGER_PRIVATE_BOOKMARK_MANAGER_PRIVATE_API_H_
      7 
      8 #include "base/memory/scoped_ptr.h"
      9 #include "base/values.h"
     10 #include "chrome/browser/extensions/api/bookmarks/bookmarks_api.h"
     11 #include "chrome/browser/extensions/chrome_extension_function.h"
     12 #include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
     13 #include "chrome/browser/undo/bookmark_undo_service.h"
     14 #include "chrome/browser/undo/bookmark_undo_service_factory.h"
     15 #include "components/bookmarks/browser/base_bookmark_model_observer.h"
     16 #include "components/bookmarks/browser/bookmark_node_data.h"
     17 #include "extensions/browser/browser_context_keyed_api_factory.h"
     18 #include "extensions/browser/event_router.h"
     19 
     20 struct BookmarkNodeData;
     21 class Profile;
     22 
     23 namespace content {
     24 class BrowserContext;
     25 class WebContents;
     26 }
     27 
     28 namespace extensions {
     29 
     30 class BookmarkManagerPrivateEventRouter : public BaseBookmarkModelObserver {
     31  public:
     32   BookmarkManagerPrivateEventRouter(content::BrowserContext* browser_context,
     33                                     BookmarkModel* bookmark_model);
     34   virtual ~BookmarkManagerPrivateEventRouter();
     35 
     36   // BaseBookmarkModelObserver:
     37   virtual void BookmarkModelChanged() OVERRIDE;
     38   virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE;
     39   virtual void OnWillChangeBookmarkMetaInfo(BookmarkModel* model,
     40                                             const BookmarkNode* node) OVERRIDE;
     41   virtual void BookmarkMetaInfoChanged(BookmarkModel* model,
     42                                        const BookmarkNode* node) OVERRIDE;
     43 
     44  private:
     45   // Helper to actually dispatch an event to extension listeners.
     46   void DispatchEvent(const std::string& event_name,
     47                      scoped_ptr<base::ListValue> event_args);
     48 
     49   // Remembers the previous meta info of a node before it was changed.
     50   BookmarkNode::MetaInfoMap prev_meta_info_;
     51 
     52   content::BrowserContext* browser_context_;
     53   BookmarkModel* bookmark_model_;
     54 };
     55 
     56 class BookmarkManagerPrivateAPI : public BrowserContextKeyedAPI,
     57                                   public EventRouter::Observer {
     58  public:
     59   explicit BookmarkManagerPrivateAPI(content::BrowserContext* browser_context);
     60   virtual ~BookmarkManagerPrivateAPI();
     61 
     62   // BrowserContextKeyedService implementation.
     63   virtual void Shutdown() OVERRIDE;
     64 
     65   // BrowserContextKeyedAPI implementation.
     66   static BrowserContextKeyedAPIFactory<BookmarkManagerPrivateAPI>*
     67       GetFactoryInstance();
     68 
     69   // EventRouter::Observer implementation.
     70   virtual void OnListenerAdded(const EventListenerInfo& details) OVERRIDE;
     71 
     72  private:
     73   friend class BrowserContextKeyedAPIFactory<BookmarkManagerPrivateAPI>;
     74 
     75   // BrowserContextKeyedAPI implementation.
     76   static const char* service_name() { return "BookmarkManagerPrivateAPI"; }
     77   static const bool kServiceIsNULLWhileTesting = true;
     78 
     79   content::BrowserContext* browser_context_;
     80 
     81   // Created lazily upon OnListenerAdded.
     82   scoped_ptr<BookmarkManagerPrivateEventRouter> event_router_;
     83 };
     84 
     85 // Class that handles the drag and drop related chrome.bookmarkManagerPrivate
     86 // events. This class has one instance per bookmark manager tab.
     87 class BookmarkManagerPrivateDragEventRouter
     88     : public BookmarkTabHelper::BookmarkDrag {
     89  public:
     90   BookmarkManagerPrivateDragEventRouter(Profile* profile,
     91                                         content::WebContents* web_contents);
     92   virtual ~BookmarkManagerPrivateDragEventRouter();
     93 
     94   // BookmarkTabHelper::BookmarkDrag interface
     95   virtual void OnDragEnter(const BookmarkNodeData& data) OVERRIDE;
     96   virtual void OnDragOver(const BookmarkNodeData& data) OVERRIDE;
     97   virtual void OnDragLeave(const BookmarkNodeData& data) OVERRIDE;
     98   virtual void OnDrop(const BookmarkNodeData& data) OVERRIDE;
     99 
    100   // The bookmark drag and drop data. This gets set after a drop was done on
    101   // the page. This returns NULL if no data is available.
    102   const BookmarkNodeData* GetBookmarkNodeData();
    103 
    104   // Clears the drag and drop data.
    105   void ClearBookmarkNodeData();
    106 
    107  private:
    108   // Helper to actually dispatch an event to extension listeners.
    109   void DispatchEvent(const std::string& event_name,
    110                      scoped_ptr<base::ListValue> args);
    111 
    112   Profile* profile_;
    113   content::WebContents* web_contents_;
    114   BookmarkNodeData bookmark_drag_data_;
    115 
    116   DISALLOW_COPY_AND_ASSIGN(BookmarkManagerPrivateDragEventRouter);
    117 };
    118 
    119 class ClipboardBookmarkManagerFunction : public extensions::BookmarksFunction {
    120  protected:
    121   virtual ~ClipboardBookmarkManagerFunction() {}
    122 
    123   bool CopyOrCut(bool cut, const std::vector<std::string>& id_list);
    124 };
    125 
    126 class BookmarkManagerPrivateCopyFunction
    127     : public ClipboardBookmarkManagerFunction {
    128  public:
    129   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.copy",
    130                              BOOKMARKMANAGERPRIVATE_COPY)
    131 
    132  protected:
    133   virtual ~BookmarkManagerPrivateCopyFunction() {}
    134 
    135   // ExtensionFunction:
    136   virtual bool RunOnReady() OVERRIDE;
    137 };
    138 
    139 class BookmarkManagerPrivateCutFunction
    140     : public ClipboardBookmarkManagerFunction {
    141  public:
    142   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.cut",
    143                              BOOKMARKMANAGERPRIVATE_CUT)
    144 
    145  protected:
    146   virtual ~BookmarkManagerPrivateCutFunction() {}
    147 
    148   // ExtensionFunction:
    149   virtual bool RunOnReady() OVERRIDE;
    150 };
    151 
    152 class BookmarkManagerPrivatePasteFunction
    153     : public extensions::BookmarksFunction {
    154  public:
    155   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.paste",
    156                              BOOKMARKMANAGERPRIVATE_PASTE)
    157 
    158  protected:
    159   virtual ~BookmarkManagerPrivatePasteFunction() {}
    160 
    161   // ExtensionFunction:
    162   virtual bool RunOnReady() OVERRIDE;
    163 };
    164 
    165 class BookmarkManagerPrivateCanPasteFunction
    166     : public extensions::BookmarksFunction {
    167  public:
    168   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.canPaste",
    169                              BOOKMARKMANAGERPRIVATE_CANPASTE)
    170 
    171  protected:
    172   virtual ~BookmarkManagerPrivateCanPasteFunction() {}
    173 
    174   // ExtensionFunction:
    175   virtual bool RunOnReady() OVERRIDE;
    176 };
    177 
    178 class BookmarkManagerPrivateSortChildrenFunction
    179     : public extensions::BookmarksFunction {
    180  public:
    181   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.sortChildren",
    182                              BOOKMARKMANAGERPRIVATE_SORTCHILDREN)
    183 
    184  protected:
    185   virtual ~BookmarkManagerPrivateSortChildrenFunction() {}
    186 
    187   // ExtensionFunction:
    188   virtual bool RunOnReady() OVERRIDE;
    189 };
    190 
    191 class BookmarkManagerPrivateGetStringsFunction : public AsyncExtensionFunction {
    192  public:
    193   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.getStrings",
    194                              BOOKMARKMANAGERPRIVATE_GETSTRINGS)
    195 
    196  protected:
    197   virtual ~BookmarkManagerPrivateGetStringsFunction() {}
    198 
    199   // ExtensionFunction:
    200   virtual bool RunAsync() OVERRIDE;
    201 };
    202 
    203 class BookmarkManagerPrivateStartDragFunction
    204     : public extensions::BookmarksFunction {
    205  public:
    206   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.startDrag",
    207                              BOOKMARKMANAGERPRIVATE_STARTDRAG)
    208 
    209  protected:
    210   virtual ~BookmarkManagerPrivateStartDragFunction() {}
    211 
    212   // ExtensionFunction:
    213   virtual bool RunOnReady() OVERRIDE;
    214 };
    215 
    216 class BookmarkManagerPrivateDropFunction
    217     : public extensions::BookmarksFunction {
    218  public:
    219   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.drop",
    220                              BOOKMARKMANAGERPRIVATE_DROP)
    221 
    222  protected:
    223   virtual ~BookmarkManagerPrivateDropFunction() {}
    224 
    225   // ExtensionFunction:
    226   virtual bool RunOnReady() OVERRIDE;
    227 };
    228 
    229 class BookmarkManagerPrivateGetSubtreeFunction
    230     : public extensions::BookmarksFunction {
    231  public:
    232   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.getSubtree",
    233                              BOOKMARKMANAGERPRIVATE_GETSUBTREE)
    234 
    235  protected:
    236   virtual ~BookmarkManagerPrivateGetSubtreeFunction() {}
    237 
    238   // ExtensionFunction:
    239   virtual bool RunOnReady() OVERRIDE;
    240 };
    241 
    242 class BookmarkManagerPrivateCanEditFunction
    243     : public extensions::BookmarksFunction {
    244  public:
    245   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.canEdit",
    246                              BOOKMARKMANAGERPRIVATE_CANEDIT)
    247 
    248  protected:
    249   virtual ~BookmarkManagerPrivateCanEditFunction() {}
    250 
    251   // ExtensionFunction:
    252   virtual bool RunOnReady() OVERRIDE;
    253 };
    254 
    255 class BookmarkManagerPrivateRecordLaunchFunction
    256     : public extensions::BookmarksFunction {
    257  public:
    258   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.recordLaunch",
    259                              BOOKMARKMANAGERPRIVATE_RECORDLAUNCH)
    260 
    261  protected:
    262   virtual ~BookmarkManagerPrivateRecordLaunchFunction() {}
    263 
    264   // ExtensionFunction:
    265   virtual bool RunOnReady() OVERRIDE;
    266 };
    267 
    268 class BookmarkManagerPrivateCreateWithMetaInfoFunction
    269     : public extensions::BookmarksFunction {
    270  public:
    271   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.createWithMetaInfo",
    272                              BOOKMARKMANAGERPRIVATE_CREATEWITHMETAINFO)
    273 
    274  protected:
    275   virtual ~BookmarkManagerPrivateCreateWithMetaInfoFunction() {}
    276 
    277   // ExtensionFunction:
    278   virtual bool RunOnReady() OVERRIDE;
    279 };
    280 
    281 class BookmarkManagerPrivateGetMetaInfoFunction
    282     : public extensions::BookmarksFunction {
    283  public:
    284   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.getMetaInfo",
    285                              BOOKMARKMANAGERPRIVATE_GETMETAINFO)
    286 
    287  protected:
    288   virtual ~BookmarkManagerPrivateGetMetaInfoFunction() {}
    289 
    290   // ExtensionFunction:
    291   virtual bool RunOnReady() OVERRIDE;
    292 };
    293 
    294 class BookmarkManagerPrivateSetMetaInfoFunction
    295     : public extensions::BookmarksFunction {
    296  public:
    297   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.setMetaInfo",
    298                              BOOKMARKMANAGERPRIVATE_SETMETAINFO)
    299 
    300  protected:
    301   virtual ~BookmarkManagerPrivateSetMetaInfoFunction() {}
    302 
    303   // ExtensionFunction:
    304   virtual bool RunOnReady() OVERRIDE;
    305 };
    306 
    307 class BookmarkManagerPrivateUpdateMetaInfoFunction
    308     : public extensions::BookmarksFunction {
    309  public:
    310   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.updateMetaInfo",
    311                              BOOKMARKMANAGERPRIVATE_UPDATEMETAINFO)
    312 
    313  protected:
    314   virtual ~BookmarkManagerPrivateUpdateMetaInfoFunction() {}
    315 
    316   // ExtensionFunction:
    317   virtual bool RunOnReady() OVERRIDE;
    318 };
    319 
    320 class BookmarkManagerPrivateCanOpenNewWindowsFunction
    321     : public extensions::BookmarksFunction {
    322  public:
    323   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.canOpenNewWindows",
    324                              BOOKMARKMANAGERPRIVATE_CANOPENNEWWINDOWS)
    325 
    326  protected:
    327   virtual ~BookmarkManagerPrivateCanOpenNewWindowsFunction() {}
    328 
    329   // ExtensionFunction:
    330   virtual bool RunOnReady() OVERRIDE;
    331 };
    332 
    333 class BookmarkManagerPrivateRemoveTreesFunction
    334     : public extensions::BookmarksFunction {
    335  public:
    336   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.removeTrees",
    337                              BOOKMARKMANAGERPRIVATE_REMOVETREES)
    338 
    339  protected:
    340   virtual ~BookmarkManagerPrivateRemoveTreesFunction() {}
    341 
    342   // ExtensionFunction:
    343   virtual bool RunOnReady() OVERRIDE;
    344 };
    345 
    346 class BookmarkManagerPrivateUndoFunction
    347     : public extensions::BookmarksFunction {
    348  public:
    349   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.undo",
    350                              BOOKMARKMANAGERPRIVATE_UNDO)
    351 
    352  protected:
    353   virtual ~BookmarkManagerPrivateUndoFunction() {}
    354 
    355   // ExtensionFunction:
    356   virtual bool RunOnReady() OVERRIDE;
    357 };
    358 
    359 class BookmarkManagerPrivateRedoFunction
    360     : public extensions::BookmarksFunction {
    361  public:
    362   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.redo",
    363                              BOOKMARKMANAGERPRIVATE_REDO)
    364 
    365  protected:
    366   virtual ~BookmarkManagerPrivateRedoFunction() {}
    367 
    368   // ExtensionFunction:
    369   virtual bool RunOnReady() OVERRIDE;
    370 };
    371 
    372 class BookmarkManagerPrivateGetUndoInfoFunction
    373     : public extensions::BookmarksFunction {
    374  public:
    375   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.getUndoInfo",
    376                              BOOKMARKMANAGERPRIVATE_UNDOINFO)
    377 
    378  protected:
    379   virtual ~BookmarkManagerPrivateGetUndoInfoFunction() {}
    380 
    381   // ExtensionFunction:
    382   virtual bool RunOnReady() OVERRIDE;
    383 };
    384 
    385 class BookmarkManagerPrivateGetRedoInfoFunction
    386     : public extensions::BookmarksFunction {
    387  public:
    388   DECLARE_EXTENSION_FUNCTION("bookmarkManagerPrivate.getRedoInfo",
    389                              BOOKMARKMANAGERPRIVATE_REDOINFO)
    390 
    391  protected:
    392   virtual ~BookmarkManagerPrivateGetRedoInfoFunction() {}
    393 
    394   // ExtensionFunction:
    395   virtual bool RunOnReady() OVERRIDE;
    396 };
    397 
    398 }  // namespace extensions
    399 
    400 #endif  // CHROME_BROWSER_EXTENSIONS_API_BOOKMARK_MANAGER_PRIVATE_BOOKMARK_MANAGER_PRIVATE_API_H_
    401