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