103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// found in the LICENSE file.
403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef COMPONENTS_OMNIBOX_ANSWERS_CACHE_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define COMPONENTS_OMNIBOX_ANSWERS_CACHE_H_
703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include <list>
903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/basictypes.h"
1103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "base/strings/string16.h"
1203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)struct AnswersQueryData {
1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  AnswersQueryData();
1503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  AnswersQueryData(const base::string16& full_query_text,
1603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                   const base::string16& query_type);
1703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  base::string16 full_query_text;
1803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  base::string16 query_type;
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)};
2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)// Cache for the most-recently seen answer for Answers in Suggest.
2203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class AnswersCache {
2303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public:
2403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  explicit AnswersCache(size_t max_entries);
2503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  ~AnswersCache();
2603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
2703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Gets the top answer query completion for the query term. The query data
2803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // will contain empty query text and type if no matching data was found.
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  AnswersQueryData GetTopAnswerEntry(const base::string16& query);
3003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Registers a query that received an answer suggestion.
3203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void UpdateRecentAnswers(const base::string16& full_query_text,
3303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                           const base::string16& query_type);
3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  // Signals if cache is empty.
3603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  bool empty() const { return cache_.empty(); }
3703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) private:
3903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  size_t max_entries_;
4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  typedef std::list<AnswersQueryData> Cache;
4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  Cache cache_;
4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
4303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AnswersCache);
4403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)};
4503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // COMPONENTS_OMNIBOX_ANSWERS_CACHE_H_
47