OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CONTENT_BROWSER_APPCACHE_APPCACHE_STORAGE_IMPL_H_ | 5 #ifndef CONTENT_BROWSER_APPCACHE_APPCACHE_STORAGE_IMPL_H_ |
6 #define CONTENT_BROWSER_APPCACHE_APPCACHE_STORAGE_IMPL_H_ | 6 #define CONTENT_BROWSER_APPCACHE_APPCACHE_STORAGE_IMPL_H_ |
7 | 7 |
8 #include <deque> | 8 #include <deque> |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
11 #include <utility> | 11 #include <utility> |
12 #include <vector> | 12 #include <vector> |
13 | 13 |
14 #include "base/callback.h" | 14 #include "base/callback.h" |
15 #include "base/files/file_path.h" | 15 #include "base/files/file_path.h" |
16 #include "base/memory/ref_counted.h" | 16 #include "base/memory/ref_counted.h" |
17 #include "base/memory/weak_ptr.h" | 17 #include "base/memory/weak_ptr.h" |
| 18 #include "base/timer/timer.h" |
18 #include "content/browser/appcache/appcache_database.h" | 19 #include "content/browser/appcache/appcache_database.h" |
19 #include "content/browser/appcache/appcache_disk_cache.h" | 20 #include "content/browser/appcache/appcache_disk_cache.h" |
20 #include "content/browser/appcache/appcache_storage.h" | 21 #include "content/browser/appcache/appcache_storage.h" |
21 #include "content/common/content_export.h" | 22 #include "content/common/content_export.h" |
22 | 23 |
23 namespace base { | 24 namespace base { |
24 class SingleThreadTaskRunner; | 25 class SingleThreadTaskRunner; |
25 } // namespace base | 26 } // namespace base |
26 | 27 |
27 namespace content { | 28 namespace content { |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
83 class StoreOrLoadTask; | 84 class StoreOrLoadTask; |
84 class CacheLoadTask; | 85 class CacheLoadTask; |
85 class GroupLoadTask; | 86 class GroupLoadTask; |
86 class StoreGroupAndCacheTask; | 87 class StoreGroupAndCacheTask; |
87 class FindMainResponseTask; | 88 class FindMainResponseTask; |
88 class MarkEntryAsForeignTask; | 89 class MarkEntryAsForeignTask; |
89 class MakeGroupObsoleteTask; | 90 class MakeGroupObsoleteTask; |
90 class GetDeletableResponseIdsTask; | 91 class GetDeletableResponseIdsTask; |
91 class InsertDeletableResponseIdsTask; | 92 class InsertDeletableResponseIdsTask; |
92 class DeleteDeletableResponseIdsTask; | 93 class DeleteDeletableResponseIdsTask; |
93 class UpdateGroupLastAccessTimeTask; | 94 class LazyUpdateLastAccessTimeTask; |
| 95 class CommitLastAccessTimesTask; |
94 | 96 |
95 typedef std::deque<DatabaseTask*> DatabaseTaskQueue; | 97 typedef std::deque<DatabaseTask*> DatabaseTaskQueue; |
96 typedef std::map<int64, CacheLoadTask*> PendingCacheLoads; | 98 typedef std::map<int64, CacheLoadTask*> PendingCacheLoads; |
97 typedef std::map<GURL, GroupLoadTask*> PendingGroupLoads; | 99 typedef std::map<GURL, GroupLoadTask*> PendingGroupLoads; |
98 typedef std::deque<std::pair<GURL, int64> > PendingForeignMarkings; | 100 typedef std::deque<std::pair<GURL, int64> > PendingForeignMarkings; |
99 typedef std::set<StoreGroupAndCacheTask*> PendingQuotaQueries; | 101 typedef std::set<StoreGroupAndCacheTask*> PendingQuotaQueries; |
100 | 102 |
101 bool IsInitTaskComplete() { | 103 bool IsInitTaskComplete() { |
102 return last_cache_id_ != AppCacheStorage::kUnitializedId; | 104 return last_cache_id_ != AppCacheStorage::kUnitializedId; |
103 } | 105 } |
104 | 106 |
105 CacheLoadTask* GetPendingCacheLoadTask(int64 cache_id); | 107 CacheLoadTask* GetPendingCacheLoadTask(int64 cache_id); |
106 GroupLoadTask* GetPendingGroupLoadTask(const GURL& manifest_url); | 108 GroupLoadTask* GetPendingGroupLoadTask(const GURL& manifest_url); |
107 void GetPendingForeignMarkingsForCache( | 109 void GetPendingForeignMarkingsForCache( |
108 int64 cache_id, std::vector<GURL>* urls); | 110 int64 cache_id, std::vector<GURL>* urls); |
109 | 111 |
110 void ScheduleSimpleTask(const base::Closure& task); | 112 void ScheduleSimpleTask(const base::Closure& task); |
111 void RunOnePendingSimpleTask(); | 113 void RunOnePendingSimpleTask(); |
112 | 114 |
113 void DelayedStartDeletingUnusedResponses(); | 115 void DelayedStartDeletingUnusedResponses(); |
114 void StartDeletingResponses(const std::vector<int64>& response_ids); | 116 void StartDeletingResponses(const std::vector<int64>& response_ids); |
115 void ScheduleDeleteOneResponse(); | 117 void ScheduleDeleteOneResponse(); |
116 void DeleteOneResponse(); | 118 void DeleteOneResponse(); |
117 | |
118 void OnDeletedOneResponse(int rv); | 119 void OnDeletedOneResponse(int rv); |
119 void OnDiskCacheInitialized(int rv); | 120 void OnDiskCacheInitialized(int rv); |
120 void DeleteAndStartOver(); | 121 void DeleteAndStartOver(); |
121 void DeleteAndStartOverPart2(); | 122 void DeleteAndStartOverPart2(); |
122 void CallScheduleReinitialize(); | 123 void CallScheduleReinitialize(); |
| 124 void LazilyCommitLastAccessTimes(); |
| 125 void OnLazyCommitTimer(); |
123 | 126 |
124 // Sometimes we can respond without having to query the database. | 127 // Sometimes we can respond without having to query the database. |
125 bool FindResponseForMainRequestInGroup( | 128 bool FindResponseForMainRequestInGroup( |
126 AppCacheGroup* group, const GURL& url, Delegate* delegate); | 129 AppCacheGroup* group, const GURL& url, Delegate* delegate); |
127 void DeliverShortCircuitedFindMainResponse( | 130 void DeliverShortCircuitedFindMainResponse( |
128 const GURL& url, | 131 const GURL& url, |
129 const AppCacheEntry& found_entry, | 132 const AppCacheEntry& found_entry, |
130 scoped_refptr<AppCacheGroup> group, | 133 scoped_refptr<AppCacheGroup> group, |
131 scoped_refptr<AppCache> newest_cache, | 134 scoped_refptr<AppCache> newest_cache, |
132 scoped_refptr<DelegateReference> delegate_ref); | 135 scoped_refptr<DelegateReference> delegate_ref); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 int64 last_deletable_response_rowid_; | 167 int64 last_deletable_response_rowid_; |
165 | 168 |
166 // Created on the IO thread, but only used on the DB thread. | 169 // Created on the IO thread, but only used on the DB thread. |
167 AppCacheDatabase* database_; | 170 AppCacheDatabase* database_; |
168 | 171 |
169 // Set if we discover a fatal error like a corrupt SQL database or | 172 // Set if we discover a fatal error like a corrupt SQL database or |
170 // disk cache and cannot continue. | 173 // disk cache and cannot continue. |
171 bool is_disabled_; | 174 bool is_disabled_; |
172 | 175 |
173 scoped_ptr<AppCacheDiskCache> disk_cache_; | 176 scoped_ptr<AppCacheDiskCache> disk_cache_; |
| 177 base::OneShotTimer<AppCacheStorageImpl> lazy_commit_timer_; |
174 | 178 |
175 // Used to short-circuit certain operations without having to schedule | 179 // Used to short-circuit certain operations without having to schedule |
176 // any tasks on the background database thread. | 180 // any tasks on the background database thread. |
177 std::deque<base::Closure> pending_simple_tasks_; | 181 std::deque<base::Closure> pending_simple_tasks_; |
178 base::WeakPtrFactory<AppCacheStorageImpl> weak_factory_; | 182 base::WeakPtrFactory<AppCacheStorageImpl> weak_factory_; |
179 | 183 |
180 friend class content::AppCacheStorageImplTest; | 184 friend class content::AppCacheStorageImplTest; |
181 friend class content::ChromeAppCacheServiceTest; | 185 friend class content::ChromeAppCacheServiceTest; |
182 }; | 186 }; |
183 | 187 |
184 } // namespace content | 188 } // namespace content |
185 | 189 |
186 #endif // CONTENT_BROWSER_APPCACHE_APPCACHE_STORAGE_IMPL_H_ | 190 #endif // CONTENT_BROWSER_APPCACHE_APPCACHE_STORAGE_IMPL_H_ |
OLD | NEW |