• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
service_name()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:
~ClipboardBookmarkManagerFunction()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:
~BookmarkManagerPrivateCopyFunction()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:
~BookmarkManagerPrivateCutFunction()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:
~BookmarkManagerPrivatePasteFunction()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:
~BookmarkManagerPrivateCanPasteFunction()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:
~BookmarkManagerPrivateSortChildrenFunction()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:
~BookmarkManagerPrivateGetStringsFunction()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:
~BookmarkManagerPrivateStartDragFunction()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:
~BookmarkManagerPrivateDropFunction()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:
~BookmarkManagerPrivateGetSubtreeFunction()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:
~BookmarkManagerPrivateCanEditFunction()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:
~BookmarkManagerPrivateRecordLaunchFunction()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:
~BookmarkManagerPrivateCreateWithMetaInfoFunction()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:
~BookmarkManagerPrivateGetMetaInfoFunction()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:
~BookmarkManagerPrivateSetMetaInfoFunction()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:
~BookmarkManagerPrivateUpdateMetaInfoFunction()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:
~BookmarkManagerPrivateCanOpenNewWindowsFunction()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:
~BookmarkManagerPrivateRemoveTreesFunction()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:
~BookmarkManagerPrivateUndoFunction()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:
~BookmarkManagerPrivateRedoFunction()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:
~BookmarkManagerPrivateGetUndoInfoFunction()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:
~BookmarkManagerPrivateGetRedoInfoFunction()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