1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_BOOKMARKS_CHROME_BOOKMARK_CLIENT_H_ 6 #define CHROME_BROWSER_BOOKMARKS_CHROME_BOOKMARK_CLIENT_H_ 7 8 #include <set> 9 #include <vector> 10 11 #include "base/callback_list.h" 12 #include "base/deferred_sequenced_task_runner.h" 13 #include "base/macros.h" 14 #include "components/bookmarks/browser/base_bookmark_model_observer.h" 15 #include "components/bookmarks/browser/bookmark_client.h" 16 #include "components/policy/core/browser/managed_bookmarks_tracker.h" 17 18 class BookmarkModel; 19 class GURL; 20 class HistoryService; 21 class HistoryServiceFactory; 22 class Profile; 23 24 class ChromeBookmarkClient : public bookmarks::BookmarkClient, 25 public BaseBookmarkModelObserver { 26 public: 27 explicit ChromeBookmarkClient(Profile* profile); 28 virtual ~ChromeBookmarkClient(); 29 30 void Init(BookmarkModel* model); 31 32 // KeyedService: 33 virtual void Shutdown() OVERRIDE; 34 35 // Returns the managed_node. managed_node()36 const BookmarkNode* managed_node() { return managed_node_; } 37 38 // Returns true if the given node belongs to the managed bookmarks tree. 39 bool IsDescendantOfManagedNode(const BookmarkNode* node); 40 41 // Returns true if there is at least one managed node in the |list|. 42 bool HasDescendantsOfManagedNode( 43 const std::vector<const BookmarkNode*>& list); 44 45 // bookmarks::BookmarkClient: 46 virtual bool PreferTouchIcon() OVERRIDE; 47 virtual base::CancelableTaskTracker::TaskId GetFaviconImageForPageURL( 48 const GURL& page_url, 49 favicon_base::IconType type, 50 const favicon_base::FaviconImageCallback& callback, 51 base::CancelableTaskTracker* tracker) OVERRIDE; 52 virtual bool SupportsTypedCountForNodes() OVERRIDE; 53 virtual void GetTypedCountForNodes( 54 const NodeSet& nodes, 55 NodeTypedCountPairs* node_typed_count_pairs) OVERRIDE; 56 virtual bool IsPermanentNodeVisible( 57 const BookmarkPermanentNode* node) OVERRIDE; 58 virtual void RecordAction(const base::UserMetricsAction& action) OVERRIDE; 59 virtual bookmarks::LoadExtraCallback GetLoadExtraNodesCallback() OVERRIDE; 60 virtual bool CanSetPermanentNodeTitle( 61 const BookmarkNode* permanent_node) OVERRIDE; 62 virtual bool CanSyncNode(const BookmarkNode* node) OVERRIDE; 63 virtual bool CanBeEditedByUser(const BookmarkNode* node) OVERRIDE; 64 65 private: 66 friend class HistoryServiceFactory; 67 void SetHistoryService(HistoryService* history_service); 68 69 // BaseBookmarkModelObserver: 70 virtual void BookmarkModelChanged() OVERRIDE; 71 virtual void BookmarkNodeRemoved(BookmarkModel* model, 72 const BookmarkNode* parent, 73 int old_index, 74 const BookmarkNode* node, 75 const std::set<GURL>& removed_urls) OVERRIDE; 76 virtual void BookmarkAllUserNodesRemoved( 77 BookmarkModel* model, 78 const std::set<GURL>& removed_urls) OVERRIDE; 79 virtual void BookmarkModelLoaded(BookmarkModel* model, 80 bool ids_reassigned) OVERRIDE; 81 82 // Helper for GetLoadExtraNodesCallback(). 83 static bookmarks::BookmarkPermanentNodeList LoadExtraNodes( 84 scoped_ptr<BookmarkPermanentNode> managed_node, 85 scoped_ptr<base::ListValue> initial_managed_bookmarks, 86 int64* next_node_id); 87 88 // Returns the management domain that configured the managed bookmarks, 89 // or an empty string. 90 std::string GetManagedBookmarksDomain(); 91 92 Profile* profile_; 93 94 // HistoryService associated to the Profile. Due to circular dependency, this 95 // cannot be passed to the constructor, nor lazily fetched. Instead the value 96 // is initialized from HistoryServiceFactory. 97 HistoryService* history_service_; 98 99 scoped_ptr<base::CallbackList<void(const std::set<GURL>&)>::Subscription> 100 favicon_changed_subscription_; 101 102 // Pointer to the BookmarkModel. Will be non-NULL from the call to Init to 103 // the call to Shutdown. Must be valid for the whole interval. 104 BookmarkModel* model_; 105 106 scoped_ptr<policy::ManagedBookmarksTracker> managed_bookmarks_tracker_; 107 BookmarkPermanentNode* managed_node_; 108 109 DISALLOW_COPY_AND_ASSIGN(ChromeBookmarkClient); 110 }; 111 112 #endif // CHROME_BROWSER_BOOKMARKS_CHROME_BOOKMARK_CLIENT_H_ 113