15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef WEBKIT_BROWSER_APPCACHE_APPCACHE_DATABASE_H_
6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define WEBKIT_BROWSER_APPCACHE_APPCACHE_DATABASE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/gtest_prod_util.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h"
187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "webkit/browser/webkit_storage_browser_export.h"
19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/common/appcache/appcache_interfaces.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace sql {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Connection;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MetaTable;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Statement;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class StatementID;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace appcache {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class WEBKIT_STORAGE_BROWSER_EXPORT AppCacheDatabase {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  struct WEBKIT_STORAGE_BROWSER_EXPORT GroupRecord {
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GroupRecord();
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~GroupRecord();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 group_id;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL origin;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL manifest_url;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time creation_time;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time last_access_time;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  struct WEBKIT_STORAGE_BROWSER_EXPORT CacheRecord {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CacheRecord()
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        : cache_id(0), group_id(0), online_wildcard(false), cache_size(0) {}
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 cache_id;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 group_id;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool online_wildcard;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::Time update_time;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 cache_size;  // the sum of all response sizes in this cache
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct EntryRecord {
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EntryRecord() : cache_id(0), flags(0), response_id(0), response_size(0) {}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 cache_id;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL url;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int flags;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 response_id;
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 response_size;
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  struct WEBKIT_STORAGE_BROWSER_EXPORT NamespaceRecord {
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NamespaceRecord();
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ~NamespaceRecord();
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 cache_id;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL origin;
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    Namespace namespace_;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  typedef std::vector<NamespaceRecord> NamespaceRecordVector;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  struct OnlineWhiteListRecord {
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    OnlineWhiteListRecord() : cache_id(0), is_pattern(false) {}
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    int64 cache_id;
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    GURL namespace_url;
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    bool is_pattern;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  explicit AppCacheDatabase(const base::FilePath& path);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~AppCacheDatabase();
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void CloseConnection();
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void Disable();
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_disabled() const { return is_disabled_; }
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 GetOriginUsage(const GURL& origin);
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetAllOriginUsage(std::map<GURL, int64>* usage_map);
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindOriginsWithGroups(std::set<GURL>* origins);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindLastStorageIds(
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int64* last_group_id, int64* last_cache_id, int64* last_response_id,
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int64* last_deletable_response_rowid);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindGroup(int64 group_id, GroupRecord* record);
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindGroupForManifestUrl(const GURL& manifest_url, GroupRecord* record);
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindGroupsForOrigin(
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& origin, std::vector<GroupRecord>* records);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindGroupForCache(int64 cache_id, GroupRecord* record);
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool UpdateGroupLastAccessTime(
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int64 group_id, base::Time last_access_time);
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool InsertGroup(const GroupRecord* record);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DeleteGroup(int64 group_id);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindCache(int64 cache_id, CacheRecord* record);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindCacheForGroup(int64 group_id, CacheRecord* record);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindCachesForOrigin(
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& origin, std::vector<CacheRecord>* records);
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool InsertCache(const CacheRecord* record);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DeleteCache(int64 cache_id);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindEntriesForCache(
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int64 cache_id, std::vector<EntryRecord>* records);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindEntriesForUrl(
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& url, std::vector<EntryRecord>* records);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindEntry(int64 cache_id, const GURL& url, EntryRecord* record);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool InsertEntry(const EntryRecord* record);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool InsertEntryRecords(
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::vector<EntryRecord>& records);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DeleteEntriesForCache(int64 cache_id);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool AddEntryFlags(const GURL& entry_url, int64 cache_id,
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                     int additional_flags);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindResponseIdsForCacheAsVector(
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int64 cache_id, std::vector<int64>* response_ids) {
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return FindResponseIdsForCacheHelper(cache_id, response_ids, NULL);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindResponseIdsForCacheAsSet(
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int64 cache_id, std::set<int64>* response_ids) {
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return FindResponseIdsForCacheHelper(cache_id, NULL, response_ids);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindNamespacesForOrigin(
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& origin,
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NamespaceRecordVector* intercepts,
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NamespaceRecordVector* fallbacks);
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindNamespacesForCache(
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int64 cache_id,
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NamespaceRecordVector* intercepts,
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::vector<NamespaceRecord>* fallbacks);
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool InsertNamespaceRecords(
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const NamespaceRecordVector& records);
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool InsertNamespace(const NamespaceRecord* record);
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DeleteNamespacesForCache(int64 cache_id);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindOnlineWhiteListForCache(
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int64 cache_id, std::vector<OnlineWhiteListRecord>* records);
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool InsertOnlineWhiteList(const OnlineWhiteListRecord* record);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool InsertOnlineWhiteListRecords(
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::vector<OnlineWhiteListRecord>& records);
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DeleteOnlineWhiteListForCache(int64 cache_id);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool GetDeletableResponseIds(std::vector<int64>* response_ids,
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                               int64 max_rowid, int limit);
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool InsertDeletableResponseIds(const std::vector<int64>& response_ids);
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DeleteDeletableResponseIds(const std::vector<int64>& response_ids);
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // So our callers can wrap operations in transactions.
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  sql::Connection* db_connection() {
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LazyOpen(true);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return db_.get();
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool RunCachedStatementWithIds(
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const sql::StatementID& statement_id, const char* sql,
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const std::vector<int64>& ids);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool RunUniqueStatementWithInt64Result(const char* sql, int64* result);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool FindResponseIdsForCacheHelper(
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      int64 cache_id, std::vector<int64>* ids_vector,
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::set<int64>* ids_set);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Record retrieval helpers
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReadGroupRecord(const sql::Statement& statement, GroupRecord* record);
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReadCacheRecord(const sql::Statement& statement, CacheRecord* record);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReadEntryRecord(const sql::Statement& statement, EntryRecord* record);
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReadNamespaceRecords(
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      sql::Statement* statement,
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NamespaceRecordVector* intercepts,
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      NamespaceRecordVector* fallbacks);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReadNamespaceRecord(
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const sql::Statement* statement, NamespaceRecord* record);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ReadOnlineWhiteListRecord(
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const sql::Statement& statement, OnlineWhiteListRecord* record);
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Database creation
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool LazyOpen(bool create_if_needed);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool EnsureDatabaseVersion();
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool CreateSchema();
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool UpgradeSchema();
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void ResetConnectionAndTables();
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Deletes the existing database file and the entire directory containing
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // the database file including the disk cache in which response headers
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // and bodies are stored, and then creates a new database file.
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DeleteExistingAndCreateNewDatabase();
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath db_file_path_;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<sql::Connection> db_;
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<sql::MetaTable> meta_table_;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_disabled_;
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool is_recreating_;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, CacheRecords);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, EntryRecords);
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, NamespaceRecords);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, GroupRecords);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, LazyOpen);
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, ExperimentalFlags);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, OnlineWhiteListRecords);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, ReCreate);
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, DeletableResponseIds);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, OriginUsage);
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, UpgradeSchema3to5);
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, UpgradeSchema4to5);
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppCacheDatabase);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace appcache
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
226868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif  // WEBKIT_BROWSER_APPCACHE_APPCACHE_DATABASE_H_
227