1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <list> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <vector> 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/basictypes.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/callback.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/containers/hash_tables.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/file_path.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/gtest_prod_util.h" 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/ref_counted.h" 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/weak_ptr.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/single_thread_task_runner.h" 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/threading/thread_checker.h" 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h" 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/timer/timer.h" 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "net/base/cache_type.h" 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/base/completion_callback.h" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/base/net_export.h" 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_ANDROID) 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/android/application_status_listener.h" 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Pickle; 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class PickleIterator; 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace disk_cache { 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)class SimpleIndexDelegate; 37868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class SimpleIndexFile; 38558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochstruct SimpleIndexLoadResult; 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class NET_EXPORT_PRIVATE EntryMetadata { 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EntryMetadata(); 43424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) EntryMetadata(base::Time last_used_time, int entry_size); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Time GetLastUsedTime() const; 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetLastUsedTime(const base::Time& last_used_time); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 48424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int GetEntrySize() const { return entry_size_; } 49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void SetEntrySize(int entry_size) { entry_size_ = entry_size; } 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Serialize the data into the provided pickle. 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void Serialize(Pickle* pickle) const; 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool Deserialize(PickleIterator* it); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 55424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) static base::TimeDelta GetLowerEpsilonForTimeComparisons() { 56424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return base::TimeDelta::FromSeconds(1); 57424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) static base::TimeDelta GetUpperEpsilonForTimeComparisons() { 59424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return base::TimeDelta(); 60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) friend class SimpleIndexFileTest; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // When adding new members here, you should update the Serialize() and 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Deserialize() methods. 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 68424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) uint32 last_used_time_seconds_since_epoch_; 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 70424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int32 entry_size_; // Storage size in bytes. 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 72424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)COMPILE_ASSERT(sizeof(EntryMetadata) == 8, metadata_size); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This class is not Thread-safe. 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class NET_EXPORT_PRIVATE SimpleIndex 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : public base::SupportsWeakPtr<SimpleIndex> { 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public: 78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch typedef std::vector<uint64> HashList; 79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SimpleIndex(const scoped_refptr<base::SingleThreadTaskRunner>& io_thread, 8168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SimpleIndexDelegate* delegate, 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) net::CacheType cache_type, 83868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<SimpleIndexFile> simple_index_file); 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual ~SimpleIndex(); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 87bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch void Initialize(base::Time cache_mtime); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool SetMaxSize(int max_bytes); 90b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) int max_size() const { return max_size_; } 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void Insert(uint64 entry_hash); 933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void Remove(uint64 entry_hash); 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Check whether the index has the entry given the hash of its key. 963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool Has(uint64 entry_hash) const; 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Update the last used time of the entry with the given key and return true 99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // iff the entry exist in the index. 1003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool UseIfExists(uint64 entry_hash); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void WriteToDisk(); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Update the size (in bytes) of an entry, in the metadata stored in the 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // index. This should be the total disk-file size including all streams of the 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // entry. 107424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool UpdateEntrySize(uint64 entry_hash, int entry_size); 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef base::hash_map<uint64, EntryMetadata> EntrySet; 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) static void InsertInEntrySet(uint64 entry_hash, 112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const EntryMetadata& entry_metadata, 113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EntrySet* entry_set); 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 115c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Executes the |callback| when the index is ready. Allows multiple callbacks. 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int ExecuteWhenReady(const net::CompletionCallback& callback); 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Returns entries from the index that have last accessed time matching the 119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // range between |initial_time| and |end_time| where open intervals are 120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // possible according to the definition given in |DoomEntriesBetween()| in the 12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // disk cache backend interface. 12268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) scoped_ptr<HashList> GetEntriesBetween(const base::Time initial_time, 12368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const base::Time end_time); 124eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Returns the list of all entries key hash. 126eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<HashList> GetAllHashes(); 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Returns number of indexed entries. 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int32 GetEntryCount() const; 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 131a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) // Returns whether the index has been initialized yet. 132a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool initialized() const { return initialized_; } 133a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 134c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private: 135868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) friend class SimpleIndexTest; 136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(SimpleIndexTest, IndexSizeCorrectOnMerge); 137868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(SimpleIndexTest, DiskWriteQueued); 138868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(SimpleIndexTest, DiskWriteExecuted); 139868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(SimpleIndexTest, DiskWritePostponed); 140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 141c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void StartEvictionIfNeeded(); 142868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void EvictionDone(int result); 143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 144c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void PostponeWritingToDisk(); 145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 146424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void UpdateEntryIteratorSize(EntrySet::iterator* it, int entry_size); 147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Must run on IO Thread. 149558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void MergeInitializingSet(scoped_ptr<SimpleIndexLoadResult> load_result); 150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_ANDROID) 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) void OnApplicationStateChange(base::android::ApplicationState state); 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) scoped_ptr<base::android::ApplicationStatusListener> app_status_listener_; 155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // The owner of |this| must ensure the |delegate_| outlives |this|. 15868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SimpleIndexDelegate* delegate_; 159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EntrySet entries_set_; 161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const net::CacheType cache_type_; 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint64 cache_size_; // Total cache storage size in bytes. 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint64 max_size_; 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint64 high_watermark_; 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint64 low_watermark_; 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool eviction_in_progress_; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::TimeTicks eviction_start_time_; 169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // This stores all the entry_hash of entries that are removed during 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // initialization. 172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::hash_set<uint64> removed_entries_; 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool initialized_; 174c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 175868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<SimpleIndexFile> index_file_; 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner> io_thread_; 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 179c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // All nonstatic SimpleEntryImpl methods should always be called on the IO 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // thread, in all cases. |io_thread_checker_| documents and enforces this. 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::ThreadChecker io_thread_checker_; 182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Timestamp of the last time we wrote the index to disk. 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // PostponeWritingToDisk() may give up postponing and allow the write if it 185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // has been a while since last time we wrote. 186b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::TimeTicks last_write_to_disk_; 187868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::OneShotTimer<SimpleIndex> write_to_disk_timer_; 189868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Closure write_to_disk_cb_; 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) typedef std::list<net::CompletionCallback> CallbackList; 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CallbackList to_run_when_initialized_; 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Set to true when the app is on the background. When the app is in the 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // background we can write the index much more frequently, to insure fresh 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // index on next startup. 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool app_on_background_; 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace disk_cache 201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // NET_DISK_CACHE_SIMPLE_SIMPLE_INDEX_H_ 203