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