Home | History | Annotate | Download | only in browser
      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 
     19 class BookmarkNode;
     20 class BookmarkPermanentNode;
     21 class GURL;
     22 
     23 namespace base {
     24 struct UserMetricsAction;
     25 }
     26 
     27 namespace bookmarks {
     28 
     29 // This class abstracts operations that depends on the embedder's environment,
     30 // e.g. Chrome.
     31 class 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