| Index: chrome/browser/undo/bookmark_undo_service.cc
|
| diff --git a/chrome/browser/undo/bookmark_undo_service.cc b/chrome/browser/undo/bookmark_undo_service.cc
|
| deleted file mode 100644
|
| index a78e5a59d19a7677acf8381b69eef94c295cbd0c..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/undo/bookmark_undo_service.cc
|
| +++ /dev/null
|
| @@ -1,495 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/undo/bookmark_undo_service.h"
|
| -
|
| -#include "chrome/browser/undo/bookmark_renumber_observer.h"
|
| -#include "chrome/browser/undo/undo_operation.h"
|
| -#include "components/bookmarks/browser/bookmark_model.h"
|
| -#include "components/bookmarks/browser/bookmark_node_data.h"
|
| -#include "components/bookmarks/browser/bookmark_utils.h"
|
| -#include "components/bookmarks/browser/scoped_group_bookmark_actions.h"
|
| -#include "grit/components_strings.h"
|
| -
|
| -using bookmarks::BookmarkModel;
|
| -using bookmarks::BookmarkNode;
|
| -using bookmarks::BookmarkNodeData;
|
| -
|
| -namespace {
|
| -
|
| -// BookmarkUndoOperation ------------------------------------------------------
|
| -
|
| -// Base class for all bookmark related UndoOperations that facilitates access to
|
| -// the BookmarkUndoService.
|
| -class BookmarkUndoOperation : public UndoOperation,
|
| - public BookmarkRenumberObserver {
|
| - public:
|
| - BookmarkUndoOperation(BookmarkModel* bookmark_model,
|
| - BookmarkRenumberObserver* undo_renumber_observer)
|
| - : bookmark_model_(bookmark_model),
|
| - undo_renumber_observer_(undo_renumber_observer) {}
|
| - ~BookmarkUndoOperation() override {}
|
| -
|
| - BookmarkModel* bookmark_model() { return bookmark_model_; }
|
| -
|
| - BookmarkRenumberObserver* undo_renumber_observer() {
|
| - return undo_renumber_observer_;
|
| - }
|
| -
|
| - private:
|
| - BookmarkModel* bookmark_model_;
|
| - BookmarkRenumberObserver* undo_renumber_observer_;
|
| -};
|
| -
|
| -// BookmarkAddOperation -------------------------------------------------------
|
| -
|
| -// Handles the undo of the insertion of a bookmark or folder.
|
| -class BookmarkAddOperation : public BookmarkUndoOperation {
|
| - public:
|
| - BookmarkAddOperation(BookmarkModel* bookmark_model,
|
| - BookmarkRenumberObserver* undo_renumber_observer,
|
| - const BookmarkNode* parent,
|
| - int index);
|
| - ~BookmarkAddOperation() override {}
|
| -
|
| - // UndoOperation:
|
| - void Undo() override;
|
| - int GetUndoLabelId() const override;
|
| - int GetRedoLabelId() const override;
|
| -
|
| - // BookmarkRenumberObserver:
|
| - void OnBookmarkRenumbered(int64 old_id, int64 new_id) override;
|
| -
|
| - private:
|
| - int64 parent_id_;
|
| - const int index_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BookmarkAddOperation);
|
| -};
|
| -
|
| -BookmarkAddOperation::BookmarkAddOperation(
|
| - BookmarkModel* bookmark_model,
|
| - BookmarkRenumberObserver* undo_renumber_observer,
|
| - const BookmarkNode* parent,
|
| - int index)
|
| - : BookmarkUndoOperation(bookmark_model, undo_renumber_observer),
|
| - parent_id_(parent->id()),
|
| - index_(index) {
|
| -}
|
| -
|
| -void BookmarkAddOperation::Undo() {
|
| - BookmarkModel* model = bookmark_model();
|
| - const BookmarkNode* parent =
|
| - bookmarks::GetBookmarkNodeByID(model, parent_id_);
|
| - DCHECK(parent);
|
| -
|
| - model->Remove(parent, index_);
|
| -}
|
| -
|
| -int BookmarkAddOperation::GetUndoLabelId() const {
|
| - return IDS_BOOKMARK_BAR_UNDO_ADD;
|
| -}
|
| -
|
| -int BookmarkAddOperation::GetRedoLabelId() const {
|
| - return IDS_BOOKMARK_BAR_REDO_DELETE;
|
| -}
|
| -
|
| -void BookmarkAddOperation::OnBookmarkRenumbered(int64 old_id, int64 new_id) {
|
| - if (parent_id_ == old_id)
|
| - parent_id_ = new_id;
|
| -}
|
| -
|
| -// BookmarkRemoveOperation ----------------------------------------------------
|
| -
|
| -// Handles the undo of the deletion of a bookmark node. For a bookmark folder,
|
| -// the information for all descendant bookmark nodes is maintained.
|
| -//
|
| -// The BookmarkModel allows only single bookmark node to be removed.
|
| -class BookmarkRemoveOperation : public BookmarkUndoOperation {
|
| - public:
|
| - BookmarkRemoveOperation(BookmarkModel* bookmark_model,
|
| - BookmarkRenumberObserver* undo_renumber_observer,
|
| - const BookmarkNode* parent,
|
| - int old_index,
|
| - const BookmarkNode* node);
|
| - ~BookmarkRemoveOperation() override {}
|
| -
|
| - // UndoOperation:
|
| - void Undo() override;
|
| - int GetUndoLabelId() const override;
|
| - int GetRedoLabelId() const override;
|
| -
|
| - // BookmarkRenumberObserver:
|
| - void OnBookmarkRenumbered(int64 old_id, int64 new_id) override;
|
| -
|
| - private:
|
| - void UpdateBookmarkIds(const BookmarkNodeData::Element& element,
|
| - const BookmarkNode* parent,
|
| - int index_added_at);
|
| -
|
| - int64 parent_id_;
|
| - const int old_index_;
|
| - BookmarkNodeData removed_node_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BookmarkRemoveOperation);
|
| -};
|
| -
|
| -BookmarkRemoveOperation::BookmarkRemoveOperation(
|
| - BookmarkModel* bookmark_model,
|
| - BookmarkRenumberObserver* undo_renumber_observer,
|
| - const BookmarkNode* parent,
|
| - int old_index,
|
| - const BookmarkNode* node)
|
| - : BookmarkUndoOperation(bookmark_model, undo_renumber_observer),
|
| - parent_id_(parent->id()),
|
| - old_index_(old_index),
|
| - removed_node_(node) {
|
| -}
|
| -
|
| -void BookmarkRemoveOperation::Undo() {
|
| - DCHECK(removed_node_.is_valid());
|
| - BookmarkModel* model = bookmark_model();
|
| - const BookmarkNode* parent =
|
| - bookmarks::GetBookmarkNodeByID(model, parent_id_);
|
| - DCHECK(parent);
|
| -
|
| - bookmarks::CloneBookmarkNode(
|
| - model, removed_node_.elements, parent, old_index_, false);
|
| - UpdateBookmarkIds(removed_node_.elements[0], parent, old_index_);
|
| -}
|
| -
|
| -int BookmarkRemoveOperation::GetUndoLabelId() const {
|
| - return IDS_BOOKMARK_BAR_UNDO_DELETE;
|
| -}
|
| -
|
| -int BookmarkRemoveOperation::GetRedoLabelId() const {
|
| - return IDS_BOOKMARK_BAR_REDO_ADD;
|
| -}
|
| -
|
| -void BookmarkRemoveOperation::UpdateBookmarkIds(
|
| - const BookmarkNodeData::Element& element,
|
| - const BookmarkNode* parent,
|
| - int index_added_at) {
|
| - const BookmarkNode* node = parent->GetChild(index_added_at);
|
| - if (element.id() != node->id())
|
| - undo_renumber_observer()->OnBookmarkRenumbered(element.id(), node->id());
|
| - if (!element.is_url) {
|
| - for (int i = 0; i < static_cast<int>(element.children.size()); ++i)
|
| - UpdateBookmarkIds(element.children[i], node, 0);
|
| - }
|
| -}
|
| -
|
| -void BookmarkRemoveOperation::OnBookmarkRenumbered(int64 old_id, int64 new_id) {
|
| - if (parent_id_ == old_id)
|
| - parent_id_ = new_id;
|
| -}
|
| -
|
| -// BookmarkEditOperation ------------------------------------------------------
|
| -
|
| -// Handles the undo of the modification of a bookmark node.
|
| -class BookmarkEditOperation : public BookmarkUndoOperation {
|
| - public:
|
| - BookmarkEditOperation(BookmarkModel* bookmark_model,
|
| - BookmarkRenumberObserver* undo_renumber_observer,
|
| - const BookmarkNode* node);
|
| - ~BookmarkEditOperation() override {}
|
| -
|
| - // UndoOperation:
|
| - void Undo() override;
|
| - int GetUndoLabelId() const override;
|
| - int GetRedoLabelId() const override;
|
| -
|
| - // BookmarkRenumberObserver:
|
| - void OnBookmarkRenumbered(int64 old_id, int64 new_id) override;
|
| -
|
| - private:
|
| - int64 node_id_;
|
| - BookmarkNodeData original_bookmark_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BookmarkEditOperation);
|
| -};
|
| -
|
| -BookmarkEditOperation::BookmarkEditOperation(
|
| - BookmarkModel* bookmark_model,
|
| - BookmarkRenumberObserver* undo_renumber_observer,
|
| - const BookmarkNode* node)
|
| - : BookmarkUndoOperation(bookmark_model, undo_renumber_observer),
|
| - node_id_(node->id()),
|
| - original_bookmark_(node) {
|
| -}
|
| -
|
| -void BookmarkEditOperation::Undo() {
|
| - DCHECK(original_bookmark_.is_valid());
|
| - BookmarkModel* model = bookmark_model();
|
| - const BookmarkNode* node = bookmarks::GetBookmarkNodeByID(model, node_id_);
|
| - DCHECK(node);
|
| -
|
| - model->SetTitle(node, original_bookmark_.elements[0].title);
|
| - if (original_bookmark_.elements[0].is_url)
|
| - model->SetURL(node, original_bookmark_.elements[0].url);
|
| -}
|
| -
|
| -int BookmarkEditOperation::GetUndoLabelId() const {
|
| - return IDS_BOOKMARK_BAR_UNDO_EDIT;
|
| -}
|
| -
|
| -int BookmarkEditOperation::GetRedoLabelId() const {
|
| - return IDS_BOOKMARK_BAR_REDO_EDIT;
|
| -}
|
| -
|
| -void BookmarkEditOperation::OnBookmarkRenumbered(int64 old_id, int64 new_id) {
|
| - if (node_id_ == old_id)
|
| - node_id_ = new_id;
|
| -}
|
| -
|
| -// BookmarkMoveOperation ------------------------------------------------------
|
| -
|
| -// Handles the undo of a bookmark being moved to a new location.
|
| -class BookmarkMoveOperation : public BookmarkUndoOperation {
|
| - public:
|
| - BookmarkMoveOperation(BookmarkModel* bookmark_model,
|
| - BookmarkRenumberObserver* undo_renumber_observer,
|
| - const BookmarkNode* old_parent,
|
| - int old_index,
|
| - const BookmarkNode* new_parent,
|
| - int new_index);
|
| - ~BookmarkMoveOperation() override {}
|
| - int GetUndoLabelId() const override;
|
| - int GetRedoLabelId() const override;
|
| -
|
| - // UndoOperation:
|
| - void Undo() override;
|
| -
|
| - // BookmarkRenumberObserver:
|
| - void OnBookmarkRenumbered(int64 old_id, int64 new_id) override;
|
| -
|
| - private:
|
| - int64 old_parent_id_;
|
| - int64 new_parent_id_;
|
| - int old_index_;
|
| - int new_index_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BookmarkMoveOperation);
|
| -};
|
| -
|
| -BookmarkMoveOperation::BookmarkMoveOperation(
|
| - BookmarkModel* bookmark_model,
|
| - BookmarkRenumberObserver* undo_renumber_observer,
|
| - const BookmarkNode* old_parent,
|
| - int old_index,
|
| - const BookmarkNode* new_parent,
|
| - int new_index)
|
| - : BookmarkUndoOperation(bookmark_model, undo_renumber_observer),
|
| - old_parent_id_(old_parent->id()),
|
| - new_parent_id_(new_parent->id()),
|
| - old_index_(old_index),
|
| - new_index_(new_index) {
|
| -}
|
| -
|
| -void BookmarkMoveOperation::Undo() {
|
| - BookmarkModel* model = bookmark_model();
|
| - const BookmarkNode* old_parent =
|
| - bookmarks::GetBookmarkNodeByID(model, old_parent_id_);
|
| - const BookmarkNode* new_parent =
|
| - bookmarks::GetBookmarkNodeByID(model, new_parent_id_);
|
| - DCHECK(old_parent);
|
| - DCHECK(new_parent);
|
| -
|
| - const BookmarkNode* node = new_parent->GetChild(new_index_);
|
| - int destination_index = old_index_;
|
| -
|
| - // If the bookmark was moved up within the same parent then the destination
|
| - // index needs to be incremented since the old index did not account for the
|
| - // moved bookmark.
|
| - if (old_parent == new_parent && new_index_ < old_index_)
|
| - ++destination_index;
|
| -
|
| - model->Move(node, old_parent, destination_index);
|
| -}
|
| -
|
| -int BookmarkMoveOperation::GetUndoLabelId() const {
|
| - return IDS_BOOKMARK_BAR_UNDO_MOVE;
|
| -}
|
| -
|
| -int BookmarkMoveOperation::GetRedoLabelId() const {
|
| - return IDS_BOOKMARK_BAR_REDO_MOVE;
|
| -}
|
| -
|
| -void BookmarkMoveOperation::OnBookmarkRenumbered(int64 old_id, int64 new_id) {
|
| - if (old_parent_id_ == old_id)
|
| - old_parent_id_ = new_id;
|
| - if (new_parent_id_ == old_id)
|
| - new_parent_id_ = new_id;
|
| -}
|
| -
|
| -// BookmarkReorderOperation ---------------------------------------------------
|
| -
|
| -// Handle the undo of reordering of bookmarks that can happen as a result of
|
| -// sorting a bookmark folder by name or the undo of that operation. The change
|
| -// of order is not recursive so only the order of the immediate children of the
|
| -// folder need to be restored.
|
| -class BookmarkReorderOperation : public BookmarkUndoOperation {
|
| - public:
|
| - BookmarkReorderOperation(BookmarkModel* bookmark_model,
|
| - BookmarkRenumberObserver* undo_renumber_observer,
|
| - const BookmarkNode* parent);
|
| - ~BookmarkReorderOperation() override;
|
| -
|
| - // UndoOperation:
|
| - void Undo() override;
|
| - int GetUndoLabelId() const override;
|
| - int GetRedoLabelId() const override;
|
| -
|
| - // BookmarkRenumberObserver:
|
| - void OnBookmarkRenumbered(int64 old_id, int64 new_id) override;
|
| -
|
| - private:
|
| - int64 parent_id_;
|
| - std::vector<int64> ordered_bookmarks_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BookmarkReorderOperation);
|
| -};
|
| -
|
| -BookmarkReorderOperation::BookmarkReorderOperation(
|
| - BookmarkModel* bookmark_model,
|
| - BookmarkRenumberObserver* undo_renumber_observer,
|
| - const BookmarkNode* parent)
|
| - : BookmarkUndoOperation(bookmark_model, undo_renumber_observer),
|
| - parent_id_(parent->id()) {
|
| - ordered_bookmarks_.resize(parent->child_count());
|
| - for (int i = 0; i < parent->child_count(); ++i)
|
| - ordered_bookmarks_[i] = parent->GetChild(i)->id();
|
| -}
|
| -
|
| -BookmarkReorderOperation::~BookmarkReorderOperation() {
|
| -}
|
| -
|
| -void BookmarkReorderOperation::Undo() {
|
| - BookmarkModel* model = bookmark_model();
|
| - const BookmarkNode* parent =
|
| - bookmarks::GetBookmarkNodeByID(model, parent_id_);
|
| - DCHECK(parent);
|
| -
|
| - std::vector<const BookmarkNode*> ordered_nodes;
|
| - for (size_t i = 0; i < ordered_bookmarks_.size(); ++i) {
|
| - ordered_nodes.push_back(
|
| - bookmarks::GetBookmarkNodeByID(model, ordered_bookmarks_[i]));
|
| - }
|
| -
|
| - model->ReorderChildren(parent, ordered_nodes);
|
| -}
|
| -
|
| -int BookmarkReorderOperation::GetUndoLabelId() const {
|
| - return IDS_BOOKMARK_BAR_UNDO_REORDER;
|
| -}
|
| -
|
| -int BookmarkReorderOperation::GetRedoLabelId() const {
|
| - return IDS_BOOKMARK_BAR_REDO_REORDER;
|
| -}
|
| -
|
| -void BookmarkReorderOperation::OnBookmarkRenumbered(int64 old_id,
|
| - int64 new_id) {
|
| - if (parent_id_ == old_id)
|
| - parent_id_ = new_id;
|
| - for (size_t i = 0; i < ordered_bookmarks_.size(); ++i) {
|
| - if (ordered_bookmarks_[i] == old_id)
|
| - ordered_bookmarks_[i] = new_id;
|
| - }
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -// BookmarkUndoService --------------------------------------------------------
|
| -
|
| -BookmarkUndoService::BookmarkUndoService() : scoped_observer_(this) {
|
| -}
|
| -
|
| -BookmarkUndoService::~BookmarkUndoService() {
|
| -}
|
| -
|
| -void BookmarkUndoService::Start(BookmarkModel* model) {
|
| - scoped_observer_.Add(model);
|
| -}
|
| -
|
| -void BookmarkUndoService::Shutdown() {
|
| - scoped_observer_.RemoveAll();
|
| -}
|
| -
|
| -void BookmarkUndoService::BookmarkModelLoaded(BookmarkModel* model,
|
| - bool ids_reassigned) {
|
| - undo_manager_.RemoveAllOperations();
|
| -}
|
| -
|
| -void BookmarkUndoService::BookmarkModelBeingDeleted(BookmarkModel* model) {
|
| - undo_manager_.RemoveAllOperations();
|
| -}
|
| -
|
| -void BookmarkUndoService::BookmarkNodeMoved(BookmarkModel* model,
|
| - const BookmarkNode* old_parent,
|
| - int old_index,
|
| - const BookmarkNode* new_parent,
|
| - int new_index) {
|
| - scoped_ptr<UndoOperation> op(new BookmarkMoveOperation(
|
| - model, this, old_parent, old_index, new_parent, new_index));
|
| - undo_manager()->AddUndoOperation(op.Pass());
|
| -}
|
| -
|
| -void BookmarkUndoService::BookmarkNodeAdded(BookmarkModel* model,
|
| - const BookmarkNode* parent,
|
| - int index) {
|
| - scoped_ptr<UndoOperation> op(
|
| - new BookmarkAddOperation(model, this, parent, index));
|
| - undo_manager()->AddUndoOperation(op.Pass());
|
| -}
|
| -
|
| -void BookmarkUndoService::OnWillRemoveBookmarks(BookmarkModel* model,
|
| - const BookmarkNode* parent,
|
| - int old_index,
|
| - const BookmarkNode* node) {
|
| - scoped_ptr<UndoOperation> op(
|
| - new BookmarkRemoveOperation(model, this, parent, old_index, node));
|
| - undo_manager()->AddUndoOperation(op.Pass());
|
| -}
|
| -
|
| -void BookmarkUndoService::OnWillRemoveAllUserBookmarks(BookmarkModel* model) {
|
| - bookmarks::ScopedGroupBookmarkActions merge_removes(model);
|
| - for (int i = 0; i < model->root_node()->child_count(); ++i) {
|
| - const BookmarkNode* permanent_node = model->root_node()->GetChild(i);
|
| - for (int j = permanent_node->child_count() - 1; j >= 0; --j) {
|
| - scoped_ptr<UndoOperation> op(new BookmarkRemoveOperation(
|
| - model, this, permanent_node, j, permanent_node->GetChild(j)));
|
| - undo_manager()->AddUndoOperation(op.Pass());
|
| - }
|
| - }
|
| -}
|
| -
|
| -void BookmarkUndoService::OnWillChangeBookmarkNode(BookmarkModel* model,
|
| - const BookmarkNode* node) {
|
| - scoped_ptr<UndoOperation> op(new BookmarkEditOperation(model, this, node));
|
| - undo_manager()->AddUndoOperation(op.Pass());
|
| -}
|
| -
|
| -void BookmarkUndoService::OnWillReorderBookmarkNode(BookmarkModel* model,
|
| - const BookmarkNode* node) {
|
| - scoped_ptr<UndoOperation> op(new BookmarkReorderOperation(model, this, node));
|
| - undo_manager()->AddUndoOperation(op.Pass());
|
| -}
|
| -
|
| -void BookmarkUndoService::GroupedBookmarkChangesBeginning(
|
| - BookmarkModel* model) {
|
| - undo_manager()->StartGroupingActions();
|
| -}
|
| -
|
| -void BookmarkUndoService::GroupedBookmarkChangesEnded(BookmarkModel* model) {
|
| - undo_manager()->EndGroupingActions();
|
| -}
|
| -
|
| -void BookmarkUndoService::OnBookmarkRenumbered(int64 old_id, int64 new_id) {
|
| - std::vector<UndoOperation*> all_operations =
|
| - undo_manager()->GetAllUndoOperations();
|
| - for (UndoOperation* op : all_operations) {
|
| - static_cast<BookmarkUndoOperation*>(op)
|
| - ->OnBookmarkRenumbered(old_id, new_id);
|
| - }
|
| -}
|
|
|