1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#ifndef COMPONENTS_HISTORY_CORE_BROWSER_HISTORY_CLIENT_H_
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#define COMPONENTS_HISTORY_CORE_BROWSER_HISTORY_CLIENT_H_
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <vector>
946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/macros.h"
1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/strings/string16.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/keyed_service/core/keyed_service.h"
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "sql/init_status.h"
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "url/gurl.h"
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace history {
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)struct URLAndTitle {
1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  GURL url;
2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  base::string16 title;
2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// This class abstracts operations that depend on the embedder's environment,
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// e.g. Chrome.
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class HistoryClient : public KeyedService {
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public:
2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  HistoryClient();
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Waits until the bookmarks have been loaded.
3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  //
3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Must not be called from the main thread.
3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void BlockUntilBookmarksLoaded();
3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Returns true if the specified URL is bookmarked.
3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  //
3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // If not on the main thread, then BlockUntilBookmarksLoaded must be called.
3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual bool IsBookmarked(const GURL& url);
3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Returns, by reference in |bookmarks|, the set of bookmarked urls and their
4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // titles. This returns the unique set of URLs. For example, if two bookmarks
4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // reference the same URL only one entry is added even if the title are not
4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // the same.
4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  //
4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // If not on the main thread, then BlockUntilBookmarksLoaded must be called.
4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void GetBookmarks(std::vector<URLAndTitle>* bookmarks);
4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Notifies the embedder that there was a problem reading the database.
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  //
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Must be called from the main thread.
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void NotifyProfileError(sql::InitStatus init_status);
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Returns whether database errors should be reported to the crash server.
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool ShouldReportDatabaseError();
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected:
56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(HistoryClient);
57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)};
58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}  // namespace history
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#endif  // COMPONENTS_HISTORY_CORE_BROWSER_HISTORY_CLIENT_H_
62