// Copyright 2013 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_RENDERER_INSTANT_RESTRICTED_ID_CACHE_H_ #define CHROME_RENDERER_INSTANT_RESTRICTED_ID_CACHE_H_ #include <stddef.h> #include <set> #include <utility> #include <vector> #include "base/check_op.h" #include "base/containers/lru_cache.h" #include "base/gtest_prod_util.h" #include "base/numerics/wrapping_math.h" #include "chrome/common/search/instant_types.h" // In InstantExtended, iframes are used to display objects which can only be // referenced by the Instant page using an ID (restricted ID). These IDs need to // be unique and cached for a while so that the SearchBox API can fetch the // object info based on the ID when required by the Instant page. The reason to // use a cache of N items as against just the last set of results is that there // may be race conditions - e.g. the user clicks on a result being shown but the // result set has internally changed but not yet been displayed. // // The cache can be used in two modes: // // 1. To store items and assign restricted IDs to them. The cache will store // a max of |max_cache_size_| items and assign them unique IDs. // // 2. To store items that already have restricted IDs assigned to them (e.g. // from another instance of the cache). The cache will then not generate IDs // and does not make any guarantees of the uniqueness of the IDs. If multiple // items are inserted with the same ID, the cache will return the last // inserted item in GetItemWithRestrictedID() call. // T needs to be copyable. template <typename T> class InstantRestrictedIDCache { … }; template <typename T> InstantRestrictedIDCache<T>::InstantRestrictedIDCache(size_t max_cache_size) : … { … } template <typename T> InstantRestrictedIDCache<T>::~InstantRestrictedIDCache() { … } template <typename T> void InstantRestrictedIDCache<T>::AddItems(const ItemVector& items) { … } template <typename T> void InstantRestrictedIDCache<T>::AddItemsWithRestrictedID( const ItemIDVector& items) { … } template <typename T> void InstantRestrictedIDCache<T>::GetCurrentItems(ItemIDVector* items) const { … } template <typename T> bool InstantRestrictedIDCache<T>::GetItemWithRestrictedID( InstantRestrictedID restricted_id, T* item) const { … } #endif // CHROME_RENDERER_INSTANT_RESTRICTED_ID_CACHE_H_