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

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
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..7aa03f6c8d0fc62a3e5e963a6df2661a537331ac 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,96 @@
#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 QueryType {
xiyuan 2013/10/29 02:32:24 Move into the WebserviceCache class.
rkc 2013/10/29 20:36:24 Done.
+ WEBSTORE = 0,
+ PEOPLE = 1
+};
+
+enum ResultStatus {
+ FRESH = 0,
+ STALE = 1
+};
+
+struct Payload {
xiyuan 2013/10/29 02:32:24 Is this used outside WebserviceCache? If not, move
rkc 2013/10/29 20:36:24 Done.
+ Payload(QueryType type,
+ const base::Time& time,
+ const base::DictionaryValue* result)
+ : type(type), time(time), result(result) {}
+
+ Payload() {}
+
+ QueryType type;
+ base::Time time;
+ const base::DictionaryValue* result;
+};
+
+// 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();
+ explicit WebserviceCache(content::BrowserContext* context);
~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);
+ const CacheResult Get(QueryType type, const std::string& query);
xiyuan 2013/10/29 02:32:24 It seems that we only use FRESH result. Why do we
rkc 2013/10/29 20:36:24 Whether the value is stale or fresh, we still disp
// 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;
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.
+ base::DictionaryValue* DictFromPayload(const Payload& payload);
xiyuan 2013/10/29 02:32:24 Document ownership of the returned object. Or make
rkc 2013/10/29 20:36:24 Done.
+
+ // Trims our MRU cache, making sure that any element that is removed is also
+ // removed from the dictionary data store.
+ void TrimCache();
+
+ content::BrowserContext* browser_context_;
Cache cache_;
+ scoped_refptr<DictionaryDataStore> data_store_;
+
+ bool cache_loaded_;
DISALLOW_COPY_AND_ASSIGN(WebserviceCache);
};

Powered by Google App Engine
This is Rietveld 408576698