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); 210d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, QuickIntegrityCheck); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, NamespaceRecords); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, GroupRecords); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, LazyOpen); 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, ExperimentalFlags); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, OnlineWhiteListRecords); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, ReCreate); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, DeletableResponseIds); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, OriginUsage); 219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, UpgradeSchema3to5); 220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) FRIEND_TEST_ALL_PREFIXES(AppCacheDatabaseTest, UpgradeSchema4to5); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AppCacheDatabase); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace appcache 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 227868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif // WEBKIT_BROWSER_APPCACHE_APPCACHE_DATABASE_H_ 228