Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7452)

Unified Diff: chrome/browser/ui/app_list/search/common/webservice_cache.h

Issue 49353006: Add caching for apps list search results. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/ui/app_list/search/common/webservice_cache.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/app_list/search/common/webservice_cache.h
diff --git a/chrome/browser/ui/app_list/search/common/webservice_cache.h b/chrome/browser/ui/app_list/search/common/webservice_cache.h
index 942e8c51b0e6df70123971ef4862bc2c3505d040..8bedd16f185c865fc535fd4c533ae9f969205be0 100644
--- a/chrome/browser/ui/app_list/search/common/webservice_cache.h
+++ b/chrome/browser/ui/app_list/search/common/webservice_cache.h
@@ -9,40 +9,101 @@
#include "base/basictypes.h"
#include "base/containers/mru_cache.h"
+#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/time/time.h"
+#include "chrome/browser/ui/app_list/search/common/dictionary_data_store.h"
+#include "components/browser_context_keyed_service/browser_context_keyed_service.h"
namespace base {
class DictionaryValue;
}
+namespace content {
+class BrowserContext;
+}
+
namespace app_list {
+enum ResultStatus {
+ FRESH = 0,
+ STALE = 1
+};
+
+// Pair of values, first indicating whether this is a fresh result or stale,
+// the second holding the actual value.
+typedef std::pair<ResultStatus, const base::DictionaryValue*> CacheResult;
+
// WebserviceCache manages a cache of search results which should be valid
// during an input session. This will reduce unnecessary queries for typing
// backspace or so on. This is not meant to hold cache entries across multiple
// search sessions.
-class WebserviceCache {
+class WebserviceCache : public BrowserContextKeyedService,
+ public base::SupportsWeakPtr<WebserviceCache> {
public:
- WebserviceCache();
- ~WebserviceCache();
+ enum QueryType {
+ WEBSTORE = 0,
+ PEOPLE = 1
+ };
+
+ explicit WebserviceCache(content::BrowserContext* context);
+ virtual ~WebserviceCache();
// Checks the current cache and returns the value for the |query| if it's
- // valid. Otherwise returns NULL.
- const base::DictionaryValue* Get(const std::string& query);
+ // valid. Otherwise an CacheResult object with the result field set to NULL.
+ // A query consists of a query 'type' and the query itself. The two current
+ // types of queries supported are webstore queries and people search queries.
+ // The type silos the query into it's own separate domain, preventing any
+ // mixing of the queries.
+ const CacheResult Get(QueryType type, const std::string& query);
// Puts the new result to the query.
- void Put(const std::string& query, scoped_ptr<base::DictionaryValue> result);
+ void Put(QueryType type,
+ const std::string& query,
+ scoped_ptr<base::DictionaryValue> result);
private:
- typedef std::pair<base::Time, base::DictionaryValue*> Payload;
+ struct Payload {
+ Payload(const base::Time& time,
+ const base::DictionaryValue* result)
+ : time(time), result(result) {}
+ Payload() {}
+
+ base::Time time;
+ const base::DictionaryValue* result;
+ };
+
class CacheDeletor {
public:
void operator()(Payload& payload);
};
typedef base::MRUCacheBase<std::string, Payload, CacheDeletor> Cache;
+ // Callback for when the cache is loaded from the dictionary data store.
+ void OnCacheLoaded(scoped_ptr<base::DictionaryValue>);
+
+ // Populates the payload parameter with the corresponding payload stored
+ // in the given dictionary. If the dictionary is invalid for any reason,
+ // this method will return false.
+ bool PayloadFromDict(const base::DictionaryValue* dict,
+ Payload* payload);
+
+ // Returns a dictionary value for a given payload. The returned dictionary
+ // will be owned by the data_store_ cached_dict, and freed on the destruction
+ // of our dictionary datastore.
+ base::DictionaryValue* DictFromPayload(const Payload& payload);
+
+ // Trims our MRU cache, making sure that any element that is removed is also
+ // removed from the dictionary data store.
+ void TrimCache();
+
+ // Prepends a type string to the given query and returns a new query string.
+ std::string PrependType(QueryType type, const std::string& query);
+
Cache cache_;
+ scoped_refptr<DictionaryDataStore> data_store_;
+
+ bool cache_loaded_;
DISALLOW_COPY_AND_ASSIGN(WebserviceCache);
};
« no previous file with comments | « no previous file | chrome/browser/ui/app_list/search/common/webservice_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698