chrome_bookmark_client.h revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
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 <vector>
9
10#include "base/compiler_specific.h"
11#include "base/deferred_sequenced_task_runner.h"
12#include "base/memory/ref_counted.h"
13#include "components/bookmarks/browser/base_bookmark_model_observer.h"
14#include "components/bookmarks/browser/bookmark_client.h"
15#include "components/keyed_service/core/keyed_service.h"
16#include "components/policy/core/browser/managed_bookmarks_tracker.h"
17#include "content/public/browser/notification_observer.h"
18#include "content/public/browser/notification_registrar.h"
19
20class BookmarkModel;
21class Profile;
22
23class ChromeBookmarkClient : public BookmarkClient,
24                             public content::NotificationObserver,
25                             public KeyedService,
26                             public BaseBookmarkModelObserver {
27  public:
28  // |index_urls| says whether URLs should be stored in the BookmarkIndex
29  // in addition to bookmark titles.
30  ChromeBookmarkClient(Profile* profile, bool index_urls);
31  virtual ~ChromeBookmarkClient();
32
33  // Returns the BookmarkModel that corresponds to this ChromeBookmarkClient.
34  BookmarkModel* model() { return model_.get(); }
35
36  // Returns the managed_node.
37  const BookmarkNode* managed_node() { return managed_node_; }
38
39  // Returns true if the given node belongs to the managed bookmarks tree.
40  bool IsDescendantOfManagedNode(const BookmarkNode* node);
41
42  // Returns true if there is at least one managed node in the |list|.
43  bool HasDescendantsOfManagedNode(
44      const std::vector<const BookmarkNode*>& list);
45
46  // BookmarkClient:
47  virtual bool PreferTouchIcon() OVERRIDE;
48  virtual base::CancelableTaskTracker::TaskId GetFaviconImageForURL(
49      const GURL& page_url,
50      int icon_types,
51      int desired_size_in_dip,
52      const favicon_base::FaviconImageCallback& callback,
53      base::CancelableTaskTracker* tracker) OVERRIDE;
54  virtual bool SupportsTypedCountForNodes() OVERRIDE;
55  virtual void GetTypedCountForNodes(
56      const NodeSet& nodes,
57      NodeTypedCountPairs* node_typed_count_pairs) OVERRIDE;
58  virtual bool IsPermanentNodeVisible(
59      const BookmarkPermanentNode* node) OVERRIDE;
60  virtual void RecordAction(const base::UserMetricsAction& action) OVERRIDE;
61  virtual bookmarks::LoadExtraCallback GetLoadExtraNodesCallback() OVERRIDE;
62  virtual bool CanSetPermanentNodeTitle(
63      const BookmarkNode* permanent_node) OVERRIDE;
64  virtual bool CanSyncNode(const BookmarkNode* node) OVERRIDE;
65  virtual bool CanBeEditedByUser(const BookmarkNode* node) OVERRIDE;
66
67  // content::NotificationObserver:
68  virtual void Observe(int type,
69                       const content::NotificationSource& source,
70                       const content::NotificationDetails& details) OVERRIDE;
71
72  // KeyedService:
73  virtual void Shutdown() OVERRIDE;
74
75 private:
76  // BaseBookmarkModelObserver:
77  virtual void BookmarkModelChanged() OVERRIDE;
78  virtual void BookmarkNodeRemoved(BookmarkModel* model,
79                                   const BookmarkNode* parent,
80                                   int old_index,
81                                   const BookmarkNode* node,
82                                   const std::set<GURL>& removed_urls) OVERRIDE;
83  virtual void BookmarkAllNodesRemoved(
84      BookmarkModel* model,
85      const std::set<GURL>& removed_urls) OVERRIDE;
86  virtual void BookmarkModelLoaded(BookmarkModel* model,
87                                   bool ids_reassigned) OVERRIDE;
88
89  // Helper for GetLoadExtraNodesCallback().
90  static bookmarks::BookmarkPermanentNodeList LoadExtraNodes(
91      const scoped_refptr<base::DeferredSequencedTaskRunner>& profile_io_runner,
92      BookmarkPermanentNode* managed_node,
93      scoped_ptr<base::ListValue> initial_managed_bookmarks,
94      int64* next_node_id);
95
96  // Returns the management domain that configured the managed bookmarks,
97  // or an empty string.
98  std::string GetManagedBookmarksDomain();
99
100  Profile* profile_;
101
102  content::NotificationRegistrar registrar_;
103
104  scoped_ptr<BookmarkModel> model_;
105
106  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