123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- // Copyright 2013 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef COMPONENTS_NACL_BROWSER_PNACL_TRANSLATION_CACHE_H_
- #define COMPONENTS_NACL_BROWSER_PNACL_TRANSLATION_CACHE_H_
- #include <map>
- #include <memory>
- #include "base/callback.h"
- #include "base/files/file_path.h"
- #include "base/memory/weak_ptr.h"
- #include "base/time/time.h"
- #include "net/base/cache_type.h"
- namespace disk_cache {
- class Backend;
- struct BackendResult;
- }
- namespace nacl {
- struct PnaclCacheInfo;
- }
- namespace net {
- class DrainableIOBuffer;
- }
- namespace pnacl {
- typedef base::OnceCallback<void(int)> CompletionOnceCallback;
- typedef base::OnceCallback<void(int, scoped_refptr<net::DrainableIOBuffer>)>
- GetNexeCallback;
- class PnaclTranslationCacheEntry;
- extern const int kMaxMemCacheSize;
- class PnaclTranslationCache
- : public base::SupportsWeakPtr<PnaclTranslationCache> {
- public:
- PnaclTranslationCache();
- PnaclTranslationCache(const PnaclTranslationCache&) = delete;
- PnaclTranslationCache& operator=(const PnaclTranslationCache&) = delete;
- virtual ~PnaclTranslationCache();
- // Initialize the translation cache in |cache_dir|. If the return value is
- // net::ERR_IO_PENDING, |callback| will be called with a 0 argument on success
- // and <0 otherwise.
- int InitOnDisk(const base::FilePath& cache_dir,
- CompletionOnceCallback callback);
- // Initialize the translation cache in memory. If the return value is
- // net::ERR_IO_PENDING, |callback| will be called with a 0 argument on success
- // and <0 otherwise.
- int InitInMemory(CompletionOnceCallback callback);
- // Store the nexe in the translation cache, and call |callback| with
- // the result. The result passed to the callback is 0 on success and
- // <0 otherwise. A reference to |nexe_data| is held until completion
- // or cancellation.
- void StoreNexe(const std::string& key,
- net::DrainableIOBuffer* nexe_data,
- CompletionOnceCallback callback);
- // Retrieve the nexe from the translation cache. Write the data into |nexe|
- // and call |callback|, passing a result code (0 on success and <0 otherwise),
- // and a DrainableIOBuffer with the data.
- void GetNexe(const std::string& key, GetNexeCallback callback);
- // Return the number of entries in the cache backend.
- int Size();
- // Return the cache key for |info|
- static std::string GetKey(const nacl::PnaclCacheInfo& info);
- // Doom all entries between |initial| and |end|. If the return value is
- // net::ERR_IO_PENDING, |callback| will be invoked when the operation
- // completes.
- int DoomEntriesBetween(base::Time initial,
- base::Time end,
- CompletionOnceCallback callback);
- private:
- friend class PnaclTranslationCacheEntry;
- friend class PnaclTranslationCacheTest;
- // PnaclTranslationCacheEntry should only use the
- // OpComplete and backend methods on PnaclTranslationCache.
- void OpComplete(PnaclTranslationCacheEntry* entry);
- disk_cache::Backend* backend() { return disk_cache_.get(); }
- int Init(net::CacheType,
- const base::FilePath& directory,
- int cache_size,
- CompletionOnceCallback callback);
- void OnCreateBackendComplete(disk_cache::BackendResult result);
- std::unique_ptr<disk_cache::Backend> disk_cache_;
- CompletionOnceCallback init_callback_;
- bool in_memory_;
- std::map<void*, scoped_refptr<PnaclTranslationCacheEntry> > open_entries_;
- };
- } // namespace pnacl
- #endif // COMPONENTS_NACL_BROWSER_PNACL_TRANSLATION_CACHE_H_
|