webservice_cache.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
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/common/webservice_cache.h"
6
7#include "base/values.h"
8
9namespace app_list {
10namespace {
11
12const int kWebserviceCacheMaxSize = 100;
13const int kWebserviceCacheTimeLimitInMinutes = 1;
14
15}  // namespace
16
17void WebserviceCache::CacheDeletor::operator()(
18    WebserviceCache::Payload& payload) {
19  delete payload.second;
20}
21
22WebserviceCache::WebserviceCache()
23    : cache_(kWebserviceCacheMaxSize) {
24}
25
26WebserviceCache::~WebserviceCache() {
27}
28
29const base::DictionaryValue* WebserviceCache::Get(const std::string& query) {
30  Cache::iterator iter = cache_.Get(query);
31  if (iter != cache_.end()) {
32    if (base::Time::Now() - iter->second.first <=
33        base::TimeDelta::FromMinutes(kWebserviceCacheTimeLimitInMinutes)) {
34      return iter->second.second;
35    } else {
36      cache_.Erase(iter);
37    }
38  }
39  return NULL;
40}
41
42void WebserviceCache::Put(const std::string& query,
43                          scoped_ptr<base::DictionaryValue> result) {
44  if (result)
45    cache_.Put(query, std::make_pair(base::Time::Now(), result.release()));
46}
47
48}  // namespace app_list
49