1// Copyright 2013 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#include "chrome/browser/ui/app_list/search/history.h"
6
7#include "base/strings/string_util.h"
8#include "base/strings/utf_string_conversions.h"
9#include "chrome/browser/ui/app_list/search/history_data.h"
10#include "chrome/browser/ui/app_list/search/history_data_store.h"
11#include "ui/app_list/search/tokenized_string.h"
12
13namespace app_list {
14
15namespace {
16
17// Normalize the given string by joining all its tokens with a space.
18std::string NormalizeString(const std::string& utf8) {
19  TokenizedString tokenized(base::UTF8ToUTF16(utf8));
20  return base::UTF16ToUTF8(JoinString(tokenized.tokens(), ' '));
21}
22
23}  // namespace
24
25History::History(scoped_refptr<HistoryDataStore> store)
26    : store_(store),
27      data_loaded_(false) {
28  const size_t kMaxQueryEntries = 1000;
29  const size_t kMaxSecondaryQueries = 5;
30
31  data_.reset(
32      new HistoryData(store_.get(), kMaxQueryEntries, kMaxSecondaryQueries));
33  data_->AddObserver(this);
34}
35
36History::~History() {
37  data_->RemoveObserver(this);
38}
39
40bool History::IsReady() const {
41  return data_loaded_;
42}
43
44void History::AddLaunchEvent(const std::string& query,
45                             const std::string& result_id) {
46  DCHECK(IsReady());
47  data_->Add(NormalizeString(query), result_id);
48}
49
50scoped_ptr<KnownResults> History::GetKnownResults(
51    const std::string& query) const {
52  DCHECK(IsReady());
53  return data_->GetKnownResults(NormalizeString(query)).Pass();
54}
55
56void History::OnHistoryDataLoadedFromStore() {
57  data_loaded_ = true;
58}
59
60}  // namespace app_list
61