15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#ifndef CHROME_BROWSER_BOOKMARKS_CHROME_BOOKMARK_CLIENT_H_ 65c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#define CHROME_BROWSER_BOOKMARKS_CHROME_BOOKMARK_CLIENT_H_ 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <set> 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <vector> 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/callback_list.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/deferred_sequenced_task_runner.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/macros.h" 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/base_bookmark_model_observer.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/bookmarks/browser/bookmark_client.h" 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/policy/core/browser/managed_bookmarks_tracker.h" 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass BookmarkModel; 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass GURL; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass HistoryService; 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass HistoryServiceFactory; 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuclass Profile; 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ChromeBookmarkClient : public bookmarks::BookmarkClient, 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public BaseBookmarkModelObserver { 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) explicit ChromeBookmarkClient(Profile* profile); 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual ~ChromeBookmarkClient(); 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void Init(BookmarkModel* model); 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // KeyedService: 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void Shutdown() OVERRIDE; 345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Returns the managed_node. 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const BookmarkNode* managed_node() { return managed_node_; } 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Returns true if the given node belongs to the managed bookmarks tree. 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool IsDescendantOfManagedNode(const BookmarkNode* node); 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Returns true if there is at least one managed node in the |list|. 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool HasDescendantsOfManagedNode( 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::vector<const BookmarkNode*>& list); 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // bookmarks::BookmarkClient: 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual bool PreferTouchIcon() OVERRIDE; 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual base::CancelableTaskTracker::TaskId GetFaviconImageForPageURL( 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const GURL& page_url, 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch favicon_base::IconType type, 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const favicon_base::FaviconImageCallback& callback, 515c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::CancelableTaskTracker* tracker) OVERRIDE; 525c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual bool SupportsTypedCountForNodes() OVERRIDE; 535c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void GetTypedCountForNodes( 545c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu const NodeSet& nodes, 555c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NodeTypedCountPairs* node_typed_count_pairs) OVERRIDE; 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool IsPermanentNodeVisible( 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const BookmarkPermanentNode* node) OVERRIDE; 585c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu virtual void RecordAction(const base::UserMetricsAction& action) OVERRIDE; 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bookmarks::LoadExtraCallback GetLoadExtraNodesCallback() OVERRIDE; 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool CanSetPermanentNodeTitle( 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const BookmarkNode* permanent_node) OVERRIDE; 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool CanSyncNode(const BookmarkNode* node) OVERRIDE; 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual bool CanBeEditedByUser(const BookmarkNode* node) OVERRIDE; 645c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 655c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu private: 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci friend class HistoryServiceFactory; 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void SetHistoryService(HistoryService* history_service); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // BaseBookmarkModelObserver: 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void BookmarkModelChanged() OVERRIDE; 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void BookmarkNodeRemoved(BookmarkModel* model, 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const BookmarkNode* parent, 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int old_index, 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const BookmarkNode* node, 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::set<GURL>& removed_urls) OVERRIDE; 76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) virtual void BookmarkAllUserNodesRemoved( 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) BookmarkModel* model, 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::set<GURL>& removed_urls) OVERRIDE; 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void BookmarkModelLoaded(BookmarkModel* model, 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) bool ids_reassigned) OVERRIDE; 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Helper for GetLoadExtraNodesCallback(). 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static bookmarks::BookmarkPermanentNodeList LoadExtraNodes( 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<BookmarkPermanentNode> managed_node, 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<base::ListValue> initial_managed_bookmarks, 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) int64* next_node_id); 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Returns the management domain that configured the managed bookmarks, 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // or an empty string. 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string GetManagedBookmarksDomain(); 91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu Profile* profile_; 935c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // HistoryService associated to the Profile. Due to circular dependency, this 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // cannot be passed to the constructor, nor lazily fetched. Instead the value 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // is initialized from HistoryServiceFactory. 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HistoryService* history_service_; 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<base::CallbackList<void(const std::set<GURL>&)>::Subscription> 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci favicon_changed_subscription_; 1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 102f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Pointer to the BookmarkModel. Will be non-NULL from the call to Init to 103f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // the call to Shutdown. Must be valid for the whole interval. 104f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) BookmarkModel* model_; 1055c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 106f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_ptr<policy::ManagedBookmarksTracker> managed_bookmarks_tracker_; 10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) BookmarkPermanentNode* managed_node_; 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1095c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu DISALLOW_COPY_AND_ASSIGN(ChromeBookmarkClient); 1105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 1115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 1125c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#endif // CHROME_BROWSER_BOOKMARKS_CHROME_BOOKMARK_CLIENT_H_ 113