15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_MODEL_OBSERVER_H_ 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_MODEL_OBSERVER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <set> 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkModel; 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkNode; 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class GURL; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Observer for the BookmarkModel. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkModelObserver { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked when the model has finished loading. |ids_reassigned| mirrors 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // that of BookmarkLoadDetails::ids_reassigned. See it for details. 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void BookmarkModelLoaded(BookmarkModel* model, 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool ids_reassigned) = 0; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked from the destructor of the BookmarkModel. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkModelBeingDeleted(BookmarkModel* model) {} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked when a node has moved. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeMoved(BookmarkModel* model, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* old_parent, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int old_index, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* new_parent, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int new_index) = 0; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Invoked prior to adding a bookmark node, and in particular, prior to adding 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // it to the parent. This function can be used to alter the contents of the 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // node before BookmarkNodeAdded listeners know about it. 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void OnWillAddBookmarkNode(BookmarkModel* model, 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) BookmarkNode* node) {} 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked when a node has been added. 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeAdded(BookmarkModel* model, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* parent, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index) = 0; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Invoked before a node is removed. 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // |parent| the parent of the node that will be removed. 45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // |old_index| the index of the node about to be removed in |parent|. 46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // |node| is the node to be removed. 47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnWillRemoveBookmarks(BookmarkModel* model, 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const BookmarkNode* parent, 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) int old_index, 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const BookmarkNode* node) {} 51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked when a node has been removed, the item may still be starred though. 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |parent| the parent of the node that was removed. 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |old_index| the index of the removed node in |parent| before it was 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // removed. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |node| is the node that was removed. 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // |removed_urls| is populated with the urls which no longer have any 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // bookmarks associated with them. 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeRemoved(BookmarkModel* model, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* parent, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int old_index, 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const BookmarkNode* node, 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::set<GURL>& removed_urls) = 0; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Invoked before the title or url of a node is changed. 66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnWillChangeBookmarkNode(BookmarkModel* model, 67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const BookmarkNode* node) {} 68868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked when the title or url of a node changes. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeChanged(BookmarkModel* model, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* node) = 0; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Invoked before the metainfo of a node is changed. 748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void OnWillChangeBookmarkMetaInfo(BookmarkModel* model, 758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const BookmarkNode* node) {} 768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // Invoked when the metainfo on a node changes. 788bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) virtual void BookmarkMetaInfoChanged(BookmarkModel* model, 798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const BookmarkNode* node) {} 808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked when a favicon has been loaded or changed. 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeFaviconChanged(BookmarkModel* model, 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* node) = 0; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Invoked before the direct children of |node| have been reordered in some 86868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // way, such as sorted. 87868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void OnWillReorderBookmarkNode(BookmarkModel* model, 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const BookmarkNode* node) {} 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked when the children (just direct children, not descendants) of 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |node| have been reordered in some way, such as sorted. 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeChildrenReordered(BookmarkModel* model, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* node) = 0; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked before an extensive set of model changes is about to begin. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This tells UI intensive observers to wait until the updates finish to 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // update themselves. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These methods should only be used for imports and sync. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Observers should still respond to BookmarkNodeRemoved immediately, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to avoid holding onto stale node pointers. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) {} 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked after an extensive set of model changes has ended. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This tells observers to update themselves if they were waiting for the 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // update to finish. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) {} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Invoked before all non-permanent bookmark nodes that are editable by 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // the user are removed. 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void OnWillRemoveAllUserBookmarks(BookmarkModel* model) {} 111868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Invoked when all non-permanent bookmark nodes that are editable by the 11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // user have been removed. 114010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // |removed_urls| is populated with the urls which no longer have any 115010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // bookmarks associated with them. 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void BookmarkAllUserNodesRemoved( 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) BookmarkModel* model, 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::set<GURL>& removed_urls) = 0; 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Invoked before a set of model changes that is initiated by a single user 121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // action. For example, this is called a single time when pasting from the 122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // clipboard before each pasted bookmark is added to the bookmark model. 123a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void GroupedBookmarkChangesBeginning(BookmarkModel* model) {} 124a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 125a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // Invoked after a set of model changes triggered by a single user action has 126a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // ended. 127a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual void GroupedBookmarkChangesEnded(BookmarkModel* model) {} 128a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BookmarkModelObserver() {} 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 133cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif // COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_MODEL_OBSERVER_H_ 134