14ee2ad04344446e610172a0e73949212923014dfSebastian Redl// Copyright 2013 The Chromium Authors. All rights reserved.
22cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// Use of this source code is governed by a BSD-style license that can be
32cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// found in the LICENSE file.
42cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
52cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#ifndef CHROME_BROWSER_UNDO_BOOKMARK_UNDO_SERVICE_H_
62cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#define CHROME_BROWSER_UNDO_BOOKMARK_UNDO_SERVICE_H_
72cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
82cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include <map>
92cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
10a4232eb646d89e7d52424bb42eb87d9061f39e63Sebastian Redl#include "chrome/browser/undo/bookmark_renumber_observer.h"
112cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "chrome/browser/undo/undo_manager.h"
122cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "components/bookmarks/browser/base_bookmark_model_observer.h"
132cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor#include "components/bookmarks/browser/bookmark_node_data.h"
147faa2ec03a7ef120ac165bb45b6c70a8b20c9f1cSebastian Redl#include "components/keyed_service/core/keyed_service.h"
1589d9980bbc2e4a4ac86673e6ec16fb9f5babb63bDouglas Gregor
160eca89e9890db4d8336ce762a5b359a1d58ca02bArgyrios Kyrtzidisclass Profile;
17e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregornamespace {
18e737f5041a36d0befb39ffeed8d50ba15916d3daDouglas Gregorclass BookmarkUndoOperation;
192cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor}  // namespace
202cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
212cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor// BookmarkUndoService --------------------------------------------------------
222a7fb27913999d132cf9e10e03dc5271faa2e9d3John McCall
2389eaf3af92c72c0c1aae807644e39cabc461d685Argyrios Kyrtzidis// BookmarkUndoService is owned by the profile, and is responsible for observing
240b7489194f9f89fac39d57211c1e7953ae50251fDouglas Gregor// BookmarkModel changes in order to provide an undo for those changes.
257a1fad38256eb4c5129359be85ba1ea1678eb5c9John McCallclass BookmarkUndoService : public BaseBookmarkModelObserver,
262cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor                            public KeyedService,
27a1ee0c548b8aa4aaf93d1917e304e3da13171a08John McCall                            public BookmarkRenumberObserver {
286ab7cd853e9c15cf986a8a7c3db1f8d20e275409Sebastian Redl public:
297c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner  explicit BookmarkUndoService(Profile* profile);
306a5a23f8e7fb65e028c8092bc1d1a1d9dfe2e9bcDouglas Gregor  virtual ~BookmarkUndoService();
317c5d24efcd2e505b5739f7def08dfe25ce59a1b2Chris Lattner
3283d63c78810556d26b62ac4cbae2eda6cdd2570cSteve Naroff  UndoManager* undo_manager() { return &undo_manager_; }
3314f79002e58556798e86168c63e48d533287eda5Douglas Gregor
3410e286aa8d39fb51a21412850265d9dae74613eeChris Lattner private:
353251ceb90b3fec68e86d6dcfa58836e20a7205c3Douglas Gregor  // BaseBookmarkModelObserver:
3614f79002e58556798e86168c63e48d533287eda5Douglas Gregor  virtual void BookmarkModelChanged() OVERRIDE {}
37bd94500d3aa60092fb0f1e90f53fb0d03fa502a8Douglas Gregor  virtual void BookmarkModelLoaded(BookmarkModel* model,
382bec0410d268779f601bd509e0302a500af7ac6aDouglas Gregor                                   bool ids_reassigned) OVERRIDE;
39ab41e63821dc60ad144d0684df8d79a9eef86b75Douglas Gregor  virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE;
400a0d2b179085a52c10402feebeb6db8b4d96a140Douglas Gregor  virtual void BookmarkNodeMoved(BookmarkModel* model,
4117fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor                                 const BookmarkNode* old_parent,
4217fc223395d51be582fc666bb6ea21bd1dff26dcDouglas Gregor                                 int old_index,
432596e429a61602312bdd149786045b8a90cd2d10Daniel Dunbar                                 const BookmarkNode* new_parent,
442cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor                                 int new_index) OVERRIDE;
45fbfd180495e7800975c6d9bdc6d24e706ef70e34Michael J. Spencer  virtual void BookmarkNodeAdded(BookmarkModel* model,
4614f79002e58556798e86168c63e48d533287eda5Douglas Gregor                                 const BookmarkNode* parent,
4703013fa9a0bf1ef4b907f5fec006c8f4000fdd21Michael J. Spencer                                 int index) OVERRIDE;
483c304bd9ec2b4611572d4cbae9e1727bbecb5dc9Chris Lattner  virtual void OnWillRemoveBookmarks(BookmarkModel* model,
49cfbf1c7536e016dc275139dd842d4a5f059a749fDouglas Gregor                                     const BookmarkNode* parent,
502cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor                                     int old_index,
518538e8d43a3a9bd439c987c0de37bcbf035dd391Sebastian Redl                                     const BookmarkNode* node) OVERRIDE;
522cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor  virtual void OnWillRemoveAllUserBookmarks(BookmarkModel* model) OVERRIDE;
53ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl  virtual void OnWillChangeBookmarkNode(BookmarkModel* model,
546e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer                                        const BookmarkNode* node) OVERRIDE;
556e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer  virtual void OnWillReorderBookmarkNode(BookmarkModel* model,
566e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer                                         const BookmarkNode* node) OVERRIDE;
576e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer  virtual void GroupedBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE;
58ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl  virtual void GroupedBookmarkChangesEnded(BookmarkModel* model) OVERRIDE;
596e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer
606e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer  // BookmarkRenumberObserver:
616e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer  virtual void OnBookmarkRenumbered(int64 old_id, int64 new_id) OVERRIDE;
626e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer
636e089c687cc2b914c46859ab7e46fe4c3c6b0afbBenjamin Kramer  Profile* profile_;
64ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl  UndoManager undo_manager_;
65ade5000c8763f4bec41f452d7efa3a9b2a6d4712Sebastian Redl
662cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor  DISALLOW_COPY_AND_ASSIGN(BookmarkUndoService);
672cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor};
682cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor
6912b1c7615d4f9a2edc544be499f895f16ac100edChris Lattner#endif  // CHROME_BROWSER_UNDO_BOOKMARK_UNDO_SERVICE_H_
702cf2634ffdb4f7c8d46cef3f8e60a55993f1c57aDouglas Gregor