diff options
Diffstat (limited to 'net/disk_cache/disk_cache.h')
-rw-r--r-- | net/disk_cache/disk_cache.h | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/net/disk_cache/disk_cache.h b/net/disk_cache/disk_cache.h new file mode 100644 index 0000000..f2c90b7 --- /dev/null +++ b/net/disk_cache/disk_cache.h @@ -0,0 +1,181 @@ +// Copyright 2008, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Defines the public interface of the disk cache. For more details see +// http://wiki/Main/ChromeDiskCacheBackend + +#ifndef NET_DISK_CACHE_DISK_CACHE_H__ +#define NET_DISK_CACHE_DISK_CACHE_H__ + +#include <string> +#include <vector> + +#include "base/basictypes.h" +#include "base/time.h" +#include "net/base/completion_callback.h" + +namespace disk_cache { + +class Entry; +class Backend; + +// Returns an instance of the Backend. path points to a folder where +// the cached data will be stored. This cache instance must be the only object +// that will be reading or writing files to that folder. The returned object +// should be deleted when not needed anymore. If force is true, and there is +// a problem with the cache initialization, the files will be deleted and a +// new set will be created. max_bytes is the maximum size the cache can grow to. +// If zero is passed in as max_bytes, the cache will determine the value to use +// based on the available disk space. The returned pointer can be NULL if a +// fatal error is found. +Backend* CreateCacheBackend(const std::wstring& path, bool force, + int max_bytes); + +// Returns an instance of a Backend implemented only in memory. The returned +// object should be deleted when not needed anymore. max_bytes is the maximum +// size the cache can grow to. If zero is passed in as max_bytes, the cache will +// determine the value to use based on the available memory. The returned +// pointer can be NULL if a fatal error is found. +Backend* CreateInMemoryCacheBackend(int max_bytes); + +// The root interface for a disk cache instance. +class Backend { + public: + virtual ~Backend() {} + + // Returns the number of entries in the cache. + virtual int32 GetEntryCount() const = 0; + + // Opens an existing entry. Upon success, the out param holds a pointer + // to a Entry object representing the specified disk cache entry. + // When the entry pointer is no longer needed, the Close method + // should be called. + virtual bool OpenEntry(const std::string& key, Entry** entry) = 0; + + // Creates a new entry. Upon success, the out param holds a pointer + // to a Entry object representing the newly created disk cache + // entry. When the entry pointer is no longer needed, the Close + // method should be called. + virtual bool CreateEntry(const std::string& key, Entry** entry) = 0; + + // Marks the entry, specified by the given key, for deletion. + virtual bool DoomEntry(const std::string& key) = 0; + + // Marks all entries for deletion. + virtual bool DoomAllEntries() = 0; + + // Marks a range of entries for deletion. This supports unbounded deletes in + // either direction by using null Time values for either argument. + virtual bool DoomEntriesBetween(const Time initial_time, + const Time end_time) = 0; + + // Marks all entries accessed since initial_time for deletion. + virtual bool DoomEntriesSince(const Time initial_time) = 0; + + // Enumerate the cache. Initialize iter to NULL before calling this method + // the first time. That will cause the enumeration to start at the head of + // the cache. For subsequent calls, pass the same iter pointer again without + // changing its value. This method returns false when there are no more + // entries to enumerate. When the entry pointer is no longer needed, the + // Close method should be called. + // + // NOTE: This method does not modify the last_used field of the entry, + // and therefore it does not impact the eviction ranking of the entry. + virtual bool OpenNextEntry(void** iter, Entry** next_entry) = 0; + + // Releases iter without returning the next entry. Whenever OpenNextEntry() + // returns true, but the caller is not interested in continuing the + // enumeration by calling OpenNextEntry() again, the enumeration must be + // ended by calling this method with iter returned by OpenNextEntry(). + virtual void EndEnumeration(void** iter) = 0; + + // Return a list of cache statistics. + virtual void GetStats( + std::vector<std::pair<std::string, std::string> >* stats) = 0; +}; + +// This interface represents an entry in the disk cache. +class Entry { + public: + // Marks this cache entry for deletion. + virtual void Doom() = 0; + + // Releases this entry. Calling this method does not cancel pending IO + // operations on this entry. Even after the last reference to this object has + // been released, pending completion callbacks may be invoked. + virtual void Close() = 0; + + // Returns the key associated with this cache entry. + virtual std::string GetKey() const = 0; + + // Returns the time when this cache entry was last used. + virtual Time GetLastUsed() const = 0; + + // Returns the time when this cache entry was last modified. + virtual Time GetLastModified() const = 0; + + // Returns the size of the cache data with the given index. + virtual int32 GetDataSize(int index) const = 0; + + // Copies cache data into the given buffer of length |buf_len|. If + // completion_callback is null, then this call blocks until the read + // operation is complete. Otherwise, completion_callback will be + // called on the current thread once the read completes. Returns the + // number of bytes read or a network error code. If a completion callback is + // provided then it will be called if this function returns ERR_IO_PENDING. + // Note that the callback will be invoked in any case, even after Close has + // been called; in other words, the caller may close this entry without + // having to wait for all the callbacks, and still rely on the cleanup + // performed from the callback code. + virtual int ReadData(int index, int offset, char* buf, int buf_len, + net::CompletionCallback* completion_callback) = 0; + + // Copies cache data from the given buffer of length |buf_len|. If + // completion_callback is null, then this call blocks until the write + // operation is complete. Otherwise, completion_callback will be + // called on the current thread once the write completes. Returns the + // number of bytes written or a network error code. If a completion callback + // is provided then it will be called if this function returns ERR_IO_PENDING. + // Note that the callback will be invoked in any case, even after Close has + // been called; in other words, the caller may close this entry without + // having to wait for all the callbacks, and still rely on the cleanup + // performed from the callback code. + // If truncate is true, this call will truncate the stored data at the end of + // what we are writing here. + virtual int WriteData(int index, int offset, const char* buf, int buf_len, + net::CompletionCallback* completion_callback, + bool truncate) = 0; + + protected: + virtual ~Entry() {} +}; + +} // namespace disk_cache + +#endif // NET_DISK_CACHE_DISK_CACHE_H__ |