Offline By Default
Update the shell to try to run applications from the cache
before trying to download those from the web.
If an application is thus run from the cache, the shell
will asynchronously connect the server to update the
application for the next run, if needed.
BUG=https://github.com/domokit/mojo/issues/363
R=ppi@chromium.org
Review URL: https://codereview.chromium.org/1276073004 .
diff --git a/services/url_response_disk_cache/url_response_disk_cache_db.h b/services/url_response_disk_cache/url_response_disk_cache_db.h
new file mode 100644
index 0000000..c8aee1b
--- /dev/null
+++ b/services/url_response_disk_cache/url_response_disk_cache_db.h
@@ -0,0 +1,78 @@
+// Copyright 2015 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 SERVICES_URL_RESPONSE_DISK_CACHE_URL_RESPONSE_DISK_CACHE_DB_H_
+#define SERVICES_URL_RESPONSE_DISK_CACHE_URL_RESPONSE_DISK_CACHE_DB_H_
+
+#include "base/files/file_path.h"
+#include "base/memory/linked_ptr.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "services/url_response_disk_cache/url_response_disk_cache_entry.mojom.h"
+
+namespace leveldb {
+class Comparator;
+class DB;
+class Iterator;
+};
+
+namespace mojo {
+
+// Specialized database for the cache content.
+class URLResponseDiskCacheDB
+ : public base::RefCountedThreadSafe<URLResponseDiskCacheDB> {
+ public:
+ class Iterator {
+ public:
+ explicit Iterator(linked_ptr<leveldb::DB> db);
+ ~Iterator();
+
+ bool HasNext();
+ void GetNext(CacheKeyPtr* key, CacheEntryPtr* entry);
+
+ private:
+ linked_ptr<leveldb::DB> db_;
+ scoped_ptr<leveldb::Iterator> it_;
+ };
+
+ // Constructs the database. |db_path| is the path to the leveldb database. If
+ // the path exists, the database will be opened, otherwise it will be created.
+ explicit URLResponseDiskCacheDB(const base::FilePath& db_path);
+
+ // Set and get the version of the database.
+ uint64_t GetVersion();
+ void SetVersion(uint64_t version);
+
+ // Put an entry for the given |request_origin| and |url|. Older entry for the
+ // same |request_origin| and |url| will not be removed, but will be shadowed
+ // by the new one.
+ void PutNew(const std::string& request_origin,
+ const std::string& url,
+ CacheEntryPtr entry);
+
+ // Returns the newest entry for the given |request_origin| and |url|, or null
+ // if none exist.
+ CacheEntryPtr GetNewest(const std::string& request_origin,
+ const std::string& url);
+
+ // Delete the entry for the given |key|.
+ void Delete(CacheKeyPtr key);
+
+ // Returns an iterator over all the entries in the database. For a given
+ // |request_origin| and |url|, entries will be sorted from newest to oldest.
+ // An iterator will not be invalidated nor any of its values will be modified
+ // by further changes to the database.
+ scoped_ptr<Iterator> GetIterator();
+
+ private:
+ friend class base::RefCountedThreadSafe<URLResponseDiskCacheDB>;
+ ~URLResponseDiskCacheDB();
+
+ scoped_ptr<leveldb::Comparator> comparator_;
+ linked_ptr<leveldb::DB> db_;
+};
+
+} // namespace
+
+#endif // SERVICES_URL_RESPONSE_DISK_CACHE_URL_RESPONSE_DISK_CACHE_DB_H_