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