| OLD | NEW |
| (Empty) |
| 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_BOOKMARKS_BOOKMARK_API_H_ | |
| 6 #define CHROME_BROWSER_EXTENSIONS_API_BOOKMARKS_BOOKMARK_API_H_ | |
| 7 | |
| 8 #include <list> | |
| 9 #include <string> | |
| 10 #include <vector> | |
| 11 | |
| 12 #include "base/compiler_specific.h" | |
| 13 #include "base/memory/ref_counted.h" | |
| 14 #include "chrome/browser/bookmarks/bookmark_model_observer.h" | |
| 15 #include "chrome/browser/extensions/event_router.h" | |
| 16 #include "chrome/browser/extensions/extension_function.h" | |
| 17 #include "chrome/browser/profiles/profile_keyed_service.h" | |
| 18 #include "content/public/browser/notification_observer.h" | |
| 19 #include "content/public/browser/notification_registrar.h" | |
| 20 #include "ui/base/dialogs/select_file_dialog.h" | |
| 21 | |
| 22 class FilePath; | |
| 23 | |
| 24 namespace base { | |
| 25 class ListValue; | |
| 26 } | |
| 27 | |
| 28 namespace extensions { | |
| 29 | |
| 30 // Observes BookmarkModel and then routes the notifications as events to | |
| 31 // the extension system. | |
| 32 class BookmarkEventRouter : public BookmarkModelObserver { | |
| 33 public: | |
| 34 explicit BookmarkEventRouter(BookmarkModel* model); | |
| 35 virtual ~BookmarkEventRouter(); | |
| 36 | |
| 37 // BookmarkModelObserver: | |
| 38 virtual void Loaded(BookmarkModel* model, bool ids_reassigned) OVERRIDE; | |
| 39 virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE; | |
| 40 virtual void BookmarkNodeMoved(BookmarkModel* model, | |
| 41 const BookmarkNode* old_parent, | |
| 42 int old_index, | |
| 43 const BookmarkNode* new_parent, | |
| 44 int new_index) OVERRIDE; | |
| 45 virtual void BookmarkNodeAdded(BookmarkModel* model, | |
| 46 const BookmarkNode* parent, | |
| 47 int index) OVERRIDE; | |
| 48 virtual void BookmarkNodeRemoved(BookmarkModel* model, | |
| 49 const BookmarkNode* parent, | |
| 50 int old_index, | |
| 51 const BookmarkNode* node) OVERRIDE; | |
| 52 virtual void BookmarkNodeChanged(BookmarkModel* model, | |
| 53 const BookmarkNode* node) OVERRIDE; | |
| 54 virtual void BookmarkNodeFaviconChanged(BookmarkModel* model, | |
| 55 const BookmarkNode* node) OVERRIDE; | |
| 56 virtual void BookmarkNodeChildrenReordered(BookmarkModel* model, | |
| 57 const BookmarkNode* node) OVERRIDE; | |
| 58 virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE; | |
| 59 virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) OVERRIDE; | |
| 60 | |
| 61 private: | |
| 62 // Helper to actually dispatch an event to extension listeners. | |
| 63 void DispatchEvent(Profile* profile, | |
| 64 const char* event_name, | |
| 65 scoped_ptr<base::ListValue> event_args); | |
| 66 | |
| 67 BookmarkModel* model_; | |
| 68 | |
| 69 DISALLOW_COPY_AND_ASSIGN(BookmarkEventRouter); | |
| 70 }; | |
| 71 | |
| 72 class BookmarkAPI : public ProfileKeyedService, | |
| 73 public EventRouter::Observer { | |
| 74 public: | |
| 75 explicit BookmarkAPI(Profile* profile); | |
| 76 virtual ~BookmarkAPI(); | |
| 77 | |
| 78 // ProfileKeyedService implementation. | |
| 79 virtual void Shutdown() OVERRIDE; | |
| 80 | |
| 81 // EventRouter::Observer implementation. | |
| 82 virtual void OnListenerAdded(const EventListenerInfo& details) | |
| 83 OVERRIDE; | |
| 84 | |
| 85 private: | |
| 86 Profile* profile_; | |
| 87 | |
| 88 // Created lazily upon OnListenerAdded. | |
| 89 scoped_ptr<BookmarkEventRouter> bookmark_event_router_; | |
| 90 }; | |
| 91 | |
| 92 class BookmarksFunction : public AsyncExtensionFunction, | |
| 93 public content::NotificationObserver { | |
| 94 public: | |
| 95 // AsyncExtensionFunction: | |
| 96 virtual void Run() OVERRIDE; | |
| 97 | |
| 98 protected: | |
| 99 virtual ~BookmarksFunction() {} | |
| 100 | |
| 101 // Helper to get the bookmark id as int64 from the given string id. | |
| 102 // Sets error_ to an error string if the given id string can't be parsed | |
| 103 // as an int64. In case of error, doesn't change id and returns false. | |
| 104 bool GetBookmarkIdAsInt64(const std::string& id_string, int64* id); | |
| 105 | |
| 106 // Helper that checks if bookmark editing is enabled. If it's not, this sets | |
| 107 // error_ to the appropriate error string. | |
| 108 bool EditBookmarksEnabled(); | |
| 109 | |
| 110 private: | |
| 111 // content::NotificationObserver: | |
| 112 virtual void Observe(int type, | |
| 113 const content::NotificationSource& source, | |
| 114 const content::NotificationDetails& details) OVERRIDE; | |
| 115 | |
| 116 content::NotificationRegistrar registrar_; | |
| 117 }; | |
| 118 | |
| 119 class GetBookmarksFunction : public BookmarksFunction { | |
| 120 public: | |
| 121 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.get") | |
| 122 | |
| 123 protected: | |
| 124 virtual ~GetBookmarksFunction() {} | |
| 125 | |
| 126 // ExtensionFunction: | |
| 127 virtual bool RunImpl() OVERRIDE; | |
| 128 }; | |
| 129 | |
| 130 class GetBookmarkChildrenFunction : public BookmarksFunction { | |
| 131 public: | |
| 132 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.getChildren") | |
| 133 | |
| 134 protected: | |
| 135 virtual ~GetBookmarkChildrenFunction() {} | |
| 136 | |
| 137 // ExtensionFunction: | |
| 138 virtual bool RunImpl() OVERRIDE; | |
| 139 }; | |
| 140 | |
| 141 class GetBookmarkRecentFunction : public BookmarksFunction { | |
| 142 public: | |
| 143 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.getRecent") | |
| 144 | |
| 145 protected: | |
| 146 virtual ~GetBookmarkRecentFunction() {} | |
| 147 | |
| 148 // ExtensionFunction: | |
| 149 virtual bool RunImpl() OVERRIDE; | |
| 150 }; | |
| 151 | |
| 152 class GetBookmarkTreeFunction : public BookmarksFunction { | |
| 153 public: | |
| 154 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.getTree") | |
| 155 | |
| 156 protected: | |
| 157 virtual ~GetBookmarkTreeFunction() {} | |
| 158 | |
| 159 // ExtensionFunction: | |
| 160 virtual bool RunImpl() OVERRIDE; | |
| 161 }; | |
| 162 | |
| 163 class GetBookmarkSubTreeFunction : public BookmarksFunction { | |
| 164 public: | |
| 165 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.getSubTree") | |
| 166 | |
| 167 protected: | |
| 168 virtual ~GetBookmarkSubTreeFunction() {} | |
| 169 | |
| 170 // ExtensionFunction: | |
| 171 virtual bool RunImpl() OVERRIDE; | |
| 172 }; | |
| 173 | |
| 174 class SearchBookmarksFunction : public BookmarksFunction { | |
| 175 public: | |
| 176 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.search") | |
| 177 | |
| 178 protected: | |
| 179 virtual ~SearchBookmarksFunction() {} | |
| 180 | |
| 181 // ExtensionFunction: | |
| 182 virtual bool RunImpl() OVERRIDE; | |
| 183 }; | |
| 184 | |
| 185 class RemoveBookmarkFunction : public BookmarksFunction { | |
| 186 public: | |
| 187 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.remove") | |
| 188 | |
| 189 // Returns true on successful parse and sets invalid_id to true if conversion | |
| 190 // from id string to int64 failed. | |
| 191 static bool ExtractIds(const base::ListValue* args, std::list<int64>* ids, | |
| 192 bool* invalid_id); | |
| 193 // ExtensionFunction: | |
| 194 virtual void GetQuotaLimitHeuristics( | |
| 195 QuotaLimitHeuristics* heuristics) const OVERRIDE; | |
| 196 | |
| 197 protected: | |
| 198 virtual ~RemoveBookmarkFunction() {} | |
| 199 | |
| 200 // ExtensionFunction: | |
| 201 virtual bool RunImpl() OVERRIDE; | |
| 202 }; | |
| 203 | |
| 204 class RemoveTreeBookmarkFunction : public RemoveBookmarkFunction { | |
| 205 public: | |
| 206 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.removeTree") | |
| 207 | |
| 208 protected: | |
| 209 virtual ~RemoveTreeBookmarkFunction() {} | |
| 210 }; | |
| 211 | |
| 212 class CreateBookmarkFunction : public BookmarksFunction { | |
| 213 public: | |
| 214 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.create") | |
| 215 | |
| 216 // ExtensionFunction: | |
| 217 virtual void GetQuotaLimitHeuristics( | |
| 218 QuotaLimitHeuristics* heuristics) const OVERRIDE; | |
| 219 | |
| 220 protected: | |
| 221 virtual ~CreateBookmarkFunction() {} | |
| 222 | |
| 223 // ExtensionFunction: | |
| 224 virtual bool RunImpl() OVERRIDE; | |
| 225 }; | |
| 226 | |
| 227 class MoveBookmarkFunction : public BookmarksFunction { | |
| 228 public: | |
| 229 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.move") | |
| 230 | |
| 231 static bool ExtractIds(const base::ListValue* args, std::list<int64>* ids, | |
| 232 bool* invalid_id); | |
| 233 | |
| 234 // ExtensionFunction: | |
| 235 virtual void GetQuotaLimitHeuristics( | |
| 236 QuotaLimitHeuristics* heuristics) const OVERRIDE; | |
| 237 | |
| 238 protected: | |
| 239 virtual ~MoveBookmarkFunction() {} | |
| 240 | |
| 241 // ExtensionFunction: | |
| 242 virtual bool RunImpl() OVERRIDE; | |
| 243 }; | |
| 244 | |
| 245 class UpdateBookmarkFunction : public BookmarksFunction { | |
| 246 public: | |
| 247 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.update") | |
| 248 | |
| 249 static bool ExtractIds(const base::ListValue* args, std::list<int64>* ids, | |
| 250 bool* invalid_id); | |
| 251 | |
| 252 // ExtensionFunction: | |
| 253 virtual void GetQuotaLimitHeuristics( | |
| 254 QuotaLimitHeuristics* heuristics) const OVERRIDE; | |
| 255 | |
| 256 protected: | |
| 257 virtual ~UpdateBookmarkFunction() {} | |
| 258 | |
| 259 // ExtensionFunction: | |
| 260 virtual bool RunImpl() OVERRIDE; | |
| 261 }; | |
| 262 | |
| 263 class BookmarksIOFunction : public BookmarksFunction, | |
| 264 public ui::SelectFileDialog::Listener { | |
| 265 public: | |
| 266 BookmarksIOFunction(); | |
| 267 | |
| 268 virtual void FileSelected(const FilePath& path, int index, void* params) = 0; | |
| 269 | |
| 270 // ui::SelectFileDialog::Listener: | |
| 271 virtual void MultiFilesSelected(const std::vector<FilePath>& files, | |
| 272 void* params) OVERRIDE; | |
| 273 virtual void FileSelectionCanceled(void* params) OVERRIDE; | |
| 274 | |
| 275 void SelectFile(ui::SelectFileDialog::Type type); | |
| 276 | |
| 277 protected: | |
| 278 virtual ~BookmarksIOFunction(); | |
| 279 | |
| 280 private: | |
| 281 void ShowSelectFileDialog( | |
| 282 ui::SelectFileDialog::Type type, | |
| 283 const FilePath& default_path); | |
| 284 | |
| 285 protected: | |
| 286 scoped_refptr<ui::SelectFileDialog> select_file_dialog_; | |
| 287 }; | |
| 288 | |
| 289 class ImportBookmarksFunction : public BookmarksIOFunction { | |
| 290 public: | |
| 291 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.import"); | |
| 292 | |
| 293 // BookmarkManagerIOFunction: | |
| 294 virtual void FileSelected(const FilePath& path, int index, void* params) | |
| 295 OVERRIDE; | |
| 296 | |
| 297 private: | |
| 298 virtual ~ImportBookmarksFunction() {} | |
| 299 | |
| 300 // ExtensionFunction: | |
| 301 virtual bool RunImpl() OVERRIDE; | |
| 302 }; | |
| 303 | |
| 304 class ExportBookmarksFunction : public BookmarksIOFunction { | |
| 305 public: | |
| 306 DECLARE_EXTENSION_FUNCTION_NAME("bookmarks.export"); | |
| 307 | |
| 308 // BookmarkManagerIOFunction: | |
| 309 virtual void FileSelected(const FilePath& path, int index, void* params) | |
| 310 OVERRIDE; | |
| 311 | |
| 312 private: | |
| 313 virtual ~ExportBookmarksFunction() {} | |
| 314 | |
| 315 // ExtensionFunction: | |
| 316 virtual bool RunImpl() OVERRIDE; | |
| 317 }; | |
| 318 | |
| 319 } // namespace extensions | |
| 320 | |
| 321 #endif // CHROME_BROWSER_EXTENSIONS_API_BOOKMARKS_BOOKMARK_API_H_ | |
| OLD | NEW |