15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_SYNC_GLUE_BOOKMARK_CHANGE_PROCESSOR_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_SYNC_GLUE_BOOKMARK_CHANGE_PROCESSOR_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/bookmark_model_associator.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/glue/sync_backend_host.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_model_observer.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_node.h" 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/sync_driver/change_processor.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/sync_driver/data_type_error_handler.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass Profile; 190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class RefCountedMemory; 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WriteNode; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WriteTransaction; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncer 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace browser_sync { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class is responsible for taking changes from the BookmarkModel 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and applying them to the sync API 'syncable' model, and vice versa. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// All operations and use of this class are from the UI thread. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This is currently bookmarks specific. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class BookmarkChangeProcessor : public BookmarkModelObserver, 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public sync_driver::ChangeProcessor { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch BookmarkChangeProcessor(Profile* profile, 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch BookmarkModelAssociator* model_associator, 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sync_driver::DataTypeErrorHandler* error_handler); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~BookmarkChangeProcessor(); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BookmarkModelObserver implementation. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // BookmarkModel -> sync API model change application. 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void BookmarkModelLoaded(BookmarkModel* model, 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool ids_reassigned) OVERRIDE; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeMoved(BookmarkModel* model, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* old_parent, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int old_index, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* new_parent, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int new_index) OVERRIDE; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeAdded(BookmarkModel* model, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* parent, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index) OVERRIDE; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeRemoved(BookmarkModel* model, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* parent, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index, 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const BookmarkNode* node, 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::set<GURL>& removed_urls) OVERRIDE; 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void BookmarkAllUserNodesRemoved( 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) BookmarkModel* model, 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::set<GURL>& removed_urls) OVERRIDE; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeChanged(BookmarkModel* model, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* node) OVERRIDE; 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void BookmarkMetaInfoChanged(BookmarkModel* model, 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const BookmarkNode* node) OVERRIDE; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeFaviconChanged(BookmarkModel* model, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* node) OVERRIDE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void BookmarkNodeChildrenReordered(BookmarkModel* model, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* node) OVERRIDE; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The change processor implementation, responsible for applying changes from 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the sync model to the bookmarks model. 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ApplyChangesFromSyncModel( 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const syncer::BaseTransaction* trans, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 model_version, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const syncer::ImmutableChangeRecordList& changes) OVERRIDE; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // The following methods are static and hence may be invoked at any time, and 817dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // do not depend on having a running ChangeProcessor. 827dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 837dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Updates the title, URL, creation time and favicon of the bookmark |node| 847dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // with data taken from the |sync_node| sync node. 857dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static void UpdateBookmarkWithSyncData( 867dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const syncer::BaseNode& sync_node, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* model, 887dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const BookmarkNode* node, 897dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Profile* profile); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Creates a bookmark node under the given parent node from the given sync 927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // node. Returns the newly created node. The created node is placed at the 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // specified index among the parent's children. 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const BookmarkNode* CreateBookmarkNode( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::BaseNode* sync_node, 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* parent, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* model, 987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch Profile* profile, 997dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int index); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the favicon of the given bookmark node from the given sync node. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns whether the favicon was set in the bookmark node. 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |profile| is the profile that contains the HistoryService and BookmarkModel 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for the bookmark in question. 1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch static bool SetBookmarkFavicon(const syncer::BaseNode* sync_node, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* bookmark_node, 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BookmarkModel* model, 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Applies the 1x favicon |bitmap_data| and |icon_url| to |bookmark_node|. 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |profile| is the profile that contains the HistoryService and BookmarkModel 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for the bookmark in question. 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void ApplyBookmarkFavicon( 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* bookmark_node, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& icon_url, 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const scoped_refptr<base::RefCountedMemory>& bitmap_data); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sets the favicon of the given sync node from the given bookmark node. 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void SetSyncNodeFavicon(const BookmarkNode* bookmark_node, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* model, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::WriteNode* sync_node); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Treat the |index|th child of |parent| as a newly added node, and create a 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // corresponding node in the sync domain using |trans|. All properties 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // will be transferred to the new node. A node corresponding to |parent| 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // must already exist and be associated for this call to succeed. Returns 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the ID of the just-created node, or if creation fails, kInvalidID. 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static int64 CreateSyncNode(const BookmarkNode* parent, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* model, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::WriteTransaction* trans, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModelAssociator* associator, 1345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sync_driver::DataTypeErrorHandler* error_handler); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Update |bookmark_node|'s sync node. 137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) static int64 UpdateSyncNode(const BookmarkNode* bookmark_node, 138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BookmarkModel* model, 139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) syncer::WriteTransaction* trans, 140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) BookmarkModelAssociator* associator, 1415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) sync_driver::DataTypeErrorHandler* error_handler); 142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Update transaction version of |model| and |nodes| to |new_version| if 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it's valid. 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void UpdateTransactionVersion( 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 new_version, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* model, 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<const BookmarkNode*>& nodes); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void StartImpl() OVERRIDE; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum MoveOrCreate { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOVE, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CREATE, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Retrieves the meta info from the given sync node. 1600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch static scoped_ptr<BookmarkNode::MetaInfoMap> GetBookmarkMetaInfo( 1610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const syncer::BaseNode* sync_node); 162a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 163a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Sets the meta info of the given sync node from the given bookmark node. 164a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) static void SetSyncNodeMetaInfo(const BookmarkNode* node, 165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) syncer::WriteNode* sync_node); 166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Helper function used to fix the position of a sync node so that it matches 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the position of a corresponding bookmark model node. |parent| and 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |index| identify the bookmark model position. |dst| is the node whose 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // position is to be fixed. If |operation| is CREATE, treat |dst| as an 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // uncreated node and set its position via InitByCreation(); otherwise, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |dst| is treated as an existing node, and its position will be set via 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SetPosition(). |trans| is the transaction to which |dst| belongs. Returns 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // false on failure. 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool PlaceSyncNode(MoveOrCreate operation, 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const BookmarkNode* parent, 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int index, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::WriteTransaction* trans, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::WriteNode* dst, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModelAssociator* associator); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copy properties (but not position) from |src| to |dst|. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void UpdateSyncNodeProperties(const BookmarkNode* src, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* model, 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncer::WriteNode* dst); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Helper function to encode a bookmark's favicon into raw PNG data. 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void EncodeFavicon(const BookmarkNode* src, 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* model, 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<base::RefCountedMemory>* dst); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove |sync_node|. It should not have any children 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveOneSyncNode(syncer::WriteNode* sync_node); 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove all sync nodes, except the permanent nodes. 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveAllSyncNodes(); 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Remove all children of the bookmark node with bookmark node id: 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |topmost_node_id|. 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RemoveAllChildNodes(syncer::WriteTransaction* trans, 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const int64& topmost_node_id); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Remove all the sync nodes associated with |node| and its children. 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveSyncNodeHierarchy(const BookmarkNode* node); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 206cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Creates or updates a sync node associated with |node|. 207cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) void CreateOrUpdateSyncNode(const BookmarkNode* node); 208cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Returns false if |node| should not be synced. 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool CanSyncNode(const BookmarkNode* node); 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The bookmark model we are processing changes from. Non-NULL when 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |running_| is true. 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModel* bookmark_model_; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Profile* profile_; 217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The two models should be associated according to this ModelAssociator. 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BookmarkModelAssociator* model_associator_; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BookmarkChangeProcessor); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace browser_sync 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_SYNC_GLUE_BOOKMARK_CHANGE_PROCESSOR_H_ 227