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 COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_CLIENT_H_
6#define COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_CLIENT_H_
7
8#include <set>
9#include <utility>
10#include <vector>
11
12#include "base/callback_forward.h"
13#include "base/task/cancelable_task_tracker.h"
14#include "components/bookmarks/browser/bookmark_storage.h"
15#include "components/favicon_base/favicon_callback.h"
16#include "components/favicon_base/favicon_types.h"
17#include "components/keyed_service/core/keyed_service.h"
18
19class BookmarkNode;
20class BookmarkPermanentNode;
21class GURL;
22
23namespace base {
24struct UserMetricsAction;
25}
26
27namespace bookmarks {
28
29// This class abstracts operations that depends on the embedder's environment,
30// e.g. Chrome.
31class BookmarkClient : public KeyedService {
32 public:
33  // Types representing a set of BookmarkNode and a mapping from BookmarkNode
34  // to the number of time the corresponding URL has been typed by the user in
35  // the Omnibox.
36  typedef std::set<const BookmarkNode*> NodeSet;
37  typedef std::pair<const BookmarkNode*, int> NodeTypedCountPair;
38  typedef std::vector<NodeTypedCountPair> NodeTypedCountPairs;
39
40  // Returns true if the embedder favors touch icons over favicons.
41  virtual bool PreferTouchIcon();
42
43  // Requests a favicon from the history cache for the web page at |page_url|.
44  // |callback| is run when the favicon has been fetched. If |type| is:
45  // - favicon_base::FAVICON, the returned gfx::Image is a multi-resolution
46  //   image of gfx::kFaviconSize DIP width and height. The data from the
47  //   history cache is resized if need be.
48  // - not favicon_base::FAVICON, the returned gfx::Image is a single-resolution
49  //   image with the largest bitmap in the history cache for |page_url| and
50  //   |type|.
51  virtual base::CancelableTaskTracker::TaskId GetFaviconImageForPageURL(
52      const GURL& page_url,
53      favicon_base::IconType type,
54      const favicon_base::FaviconImageCallback& callback,
55      base::CancelableTaskTracker* tracker);
56
57    // Returns true if the embedder supports typed count for URL.
58  virtual bool SupportsTypedCountForNodes();
59
60  // Retrieves the number of time each BookmarkNode URL has been typed in
61  // the Omnibox by the user.
62  virtual void GetTypedCountForNodes(
63      const NodeSet& nodes,
64      NodeTypedCountPairs* node_typed_count_pairs);
65
66  // Returns whether the embedder wants permanent node |node|
67  // to always be visible or to only show them when not empty.
68  virtual bool IsPermanentNodeVisible(const BookmarkPermanentNode* node) = 0;
69
70  // Wrapper around RecordAction defined in base/metrics/user_metrics.h
71  // that ensure that the action is posted from the correct thread.
72  virtual void RecordAction(const base::UserMetricsAction& action) = 0;
73
74  // Returns a task that will be used to load any additional root nodes. This
75  // task will be invoked in the Profile's IO task runner.
76  virtual LoadExtraCallback GetLoadExtraNodesCallback() = 0;
77
78  // Returns true if the |permanent_node| can have its title updated.
79  virtual bool CanSetPermanentNodeTitle(const BookmarkNode* permanent_node) = 0;
80
81  // Returns true if |node| should sync.
82  virtual bool CanSyncNode(const BookmarkNode* node) = 0;
83
84  // Returns true if this node can be edited by the user.
85  // TODO(joaodasilva): the model should check this more aggressively, and
86  // should give the client a means to temporarily disable those checks.
87  // http://crbug.com/49598
88  virtual bool CanBeEditedByUser(const BookmarkNode* node) = 0;
89
90 protected:
91  virtual ~BookmarkClient() {}
92};
93
94}  // namespace bookmarks
95
96#endif  // COMPONENTS_BOOKMARKS_BROWSER_BOOKMARK_CLIENT_H_
97