blob: ae94c850642ecc2651e42875404a100fbd53d4d6 [file] [log] [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_MODEL_OBSERVER_H_
#define COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_MODEL_OBSERVER_H_
#include <stddef.h>
#include <set>
#include "base/location.h"
#include "base/observer_list_types.h"
class GURL;
namespace bookmarks {
class BookmarkNode;
// Observer for the BookmarkModel.
class BookmarkModelObserver : public base::CheckedObserver {
public:
BookmarkModelObserver(const BookmarkModelObserver&) = delete;
BookmarkModelObserver& operator=(const BookmarkModelObserver&) = delete;
// Invoked when the model has finished loading. `ids_reassigned` mirrors
// that of BookmarkLoadDetails::ids_reassigned. See it for details.
virtual void BookmarkModelLoaded(bool ids_reassigned) = 0;
// Invoked from the destructor of the BookmarkModel.
virtual void BookmarkModelBeingDeleted() {}
// Invoked prior to moving a bookmark node.
virtual void OnWillMoveBookmarkNode(const BookmarkNode* old_parent,
size_t old_index,
const BookmarkNode* new_parent,
size_t new_index) {}
// Invoked when a node has moved.
virtual void BookmarkNodeMoved(const BookmarkNode* old_parent,
size_t old_index,
const BookmarkNode* new_parent,
size_t new_index) = 0;
// Invoked when a node has been added. If the added node has any descendants,
// BookmarkModel` will invoke `BookmarkNodeAdded` recursively for all these
// descendants.
//
// `added_by_user` is true when a new bookmark was added by the user and false
// when a node is added by sync or duplicated.
virtual void BookmarkNodeAdded(const BookmarkNode* parent,
size_t index,
bool added_by_user) = 0;
// Invoked prior to removing a node from the model. When a node is removed
// it's descendants are implicitly removed from the model as
// well. Notification is only sent for the node itself, not any
// descendants. For example, if folder 'A' has the children 'A1' and 'A2',
// model->Remove('A') generates a single notification for 'A'; no notification
// is sent for 'A1' or 'A2'.
//
// `parent` the parent of the node that will be removed.
// `old_index` the index of the node about to be removed in `parent`.
// `node` is the node to be removed.
virtual void OnWillRemoveBookmarks(const BookmarkNode* parent,
size_t old_index,
const BookmarkNode* node,
const base::Location& location) {}
// Invoked after a node has been removed from the model. Removing a node
// implicitly removes all descendants. Notification is only sent for the node
// that BookmarkModel::Remove() is invoked on. See description of
// OnWillRemoveBookmarks() for details.
//
// `parent` the parent of the node that was removed.
// `old_index` the index of the removed node in `parent` before it was
// removed.
// `node` the node that was removed.
// `no_longer_bookmarked` contains the urls of any nodes that are no longer
// bookmarked as a result of the removal.
virtual void BookmarkNodeRemoved(const BookmarkNode* parent,
size_t old_index,
const BookmarkNode* node,
const std::set<GURL>& no_longer_bookmarked,
const base::Location& location) = 0;
// Invoked before the title or url of a node is changed. Subsequent
// BookmarkNodeChanged call guaranteed to contain the same BookmarkNode.
virtual void OnWillChangeBookmarkNode(const BookmarkNode* node) {}
// Invoked when the title or url of a node changes. Guaranteed to contain the
// same BookmarkNode as the preceding OnWillChangeBookmark Node call.
virtual void BookmarkNodeChanged(const BookmarkNode* node) = 0;
// Invoked before the metainfo of a node is changed.
virtual void OnWillChangeBookmarkMetaInfo(const BookmarkNode* node) {}
// Invoked when the metainfo on a node changes.
virtual void BookmarkMetaInfoChanged(const BookmarkNode* node) {}
// Invoked when a favicon has been loaded or changed.
virtual void BookmarkNodeFaviconChanged(const BookmarkNode* node) = 0;
// Invoked before the direct children of `node` have been reordered in some
// way, such as sorted.
virtual void OnWillReorderBookmarkNode(const BookmarkNode* node) {}
// Invoked when the children (just direct children, not descendants) of
// `node` have been reordered in some way, such as sorted.
virtual void BookmarkNodeChildrenReordered(const BookmarkNode* node) = 0;
// Invoked before an extensive set of model changes is about to begin.
// This tells UI intensive observers to wait until the updates finish to
// update themselves.
// Observers should still respond to BookmarkNodeRemoved immediately,
// to avoid holding onto stale node pointers.
virtual void ExtensiveBookmarkChangesBeginning() {}
// Invoked after an extensive set of model changes has ended.
// This tells observers to update themselves if they were waiting for the
// update to finish.
virtual void ExtensiveBookmarkChangesEnded() {}
// Invoked before all non-permanent bookmark nodes that are editable by
// the user are removed.
virtual void OnWillRemoveAllUserBookmarks(const base::Location& location) {}
// Invoked when all non-permanent bookmark nodes that are editable by the
// user have been removed.
// `removed_urls` is populated with the urls which no longer have any
// bookmarks associated with them.
virtual void BookmarkAllUserNodesRemoved(const std::set<GURL>& removed_urls,
const base::Location& location) = 0;
// Invoked before a set of model changes that is initiated by a single user
// action. For example, this is called a single time when pasting from the
// clipboard before each pasted bookmark is added to the bookmark model.
virtual void GroupedBookmarkChangesBeginning() {}
// Invoked after a set of model changes triggered by a single user action has
// ended.
virtual void GroupedBookmarkChangesEnded() {}
protected:
BookmarkModelObserver() = default;
~BookmarkModelObserver() override = default;
};
} // namespace bookmarks
#endif // COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_MODEL_OBSERVER_H_