bookmark_manager_private_api.h revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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/bookmarks/base_bookmark_model_observer.h"
11#include "chrome/browser/bookmarks/bookmark_node_data.h"
12#include "chrome/browser/extensions/api/bookmarks/bookmarks_api.h"
13#include "chrome/browser/extensions/chrome_extension_function.h"
14#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
15#include "chrome/browser/undo/bookmark_undo_service.h"
16#include "chrome/browser/undo/bookmark_undo_service_factory.h"
17#include "extensions/browser/browser_context_keyed_api_factory.h"
18#include "extensions/browser/event_router.h"
19
20struct BookmarkNodeData;
21class Profile;
22
23namespace content {
24class BrowserContext;
25class WebContents;
26}
27
28namespace extensions {
29
30class 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
56class 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.
87class 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
119class ClipboardBookmarkManagerFunction : public extensions::BookmarksFunction {
120 protected:
121  virtual ~ClipboardBookmarkManagerFunction() {}
122
123  bool CopyOrCut(bool cut, const std::vector<std::string>& id_list);
124};
125
126class 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 RunImpl() OVERRIDE;
137};
138
139class 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 RunImpl() OVERRIDE;
150};
151
152class 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 RunImpl() OVERRIDE;
163};
164
165class 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 RunImpl() OVERRIDE;
176};
177
178class 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 RunImpl() OVERRIDE;
189};
190
191class 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 RunImpl() OVERRIDE;
201};
202
203class 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 RunImpl() OVERRIDE;
214};
215
216class 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 RunImpl() OVERRIDE;
227};
228
229class 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 RunImpl() OVERRIDE;
240};
241
242class 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 RunImpl() OVERRIDE;
253};
254
255class 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 RunImpl() OVERRIDE;
266};
267
268class 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 RunImpl() OVERRIDE;
279};
280
281class 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 RunImpl() OVERRIDE;
292};
293
294class 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 RunImpl() OVERRIDE;
305};
306
307class 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 RunImpl() OVERRIDE;
318};
319
320class 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 RunImpl() OVERRIDE;
331};
332
333class 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 RunImpl() OVERRIDE;
344};
345
346class 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 RunImpl() OVERRIDE;
357};
358
359class 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 RunImpl() OVERRIDE;
370};
371
372class 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 RunImpl() OVERRIDE;
383};
384
385class 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 RunImpl() OVERRIDE;
396};
397
398}  // namespace extensions
399
400#endif  // CHROME_BROWSER_EXTENSIONS_API_BOOKMARK_MANAGER_PRIVATE_BOOKMARK_MANAGER_PRIVATE_API_H_
401