webservice_cache.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file.
44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "chrome/browser/ui/app_list/search/common/webservice_cache.h"
64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/values.h"
84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace app_list {
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace {
114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const int kWebserviceCacheMaxSize = 100;
134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const int kWebserviceCacheTimeLimitInMinutes = 1;
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace
164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebserviceCache::CacheDeletor::operator()(
184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    WebserviceCache::Payload& payload) {
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  delete payload.second;
204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)WebserviceCache::WebserviceCache()
234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    : cache_(kWebserviceCacheMaxSize) {
244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)WebserviceCache::~WebserviceCache() {
274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)const base::DictionaryValue* WebserviceCache::Get(const std::string& query) {
304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  Cache::iterator iter = cache_.Get(query);
314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (iter != cache_.end()) {
324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    if (base::Time::Now() - iter->second.first <=
334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)        base::TimeDelta::FromMinutes(kWebserviceCacheTimeLimitInMinutes)) {
344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      return iter->second.second;
354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    } else {
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      cache_.Erase(iter);
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    }
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  }
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return NULL;
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebserviceCache::Put(const std::string& query,
434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                          scoped_ptr<base::DictionaryValue> result) {
444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (result)
454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    cache_.Put(query, std::make_pair(base::Time::Now(), result.release()));
464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}
474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}  // namespace app_list
49