OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #include "webkit/appcache/appcache_storage_impl.h" | 5 #include "webkit/appcache/appcache_storage_impl.h" |
6 | 6 |
7 #include "app/sql/connection.h" | 7 #include "app/sql/connection.h" |
8 #include "app/sql/transaction.h" | 8 #include "app/sql/transaction.h" |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 826 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
837 STLDeleteElements(&pending_simple_tasks_); | 837 STLDeleteElements(&pending_simple_tasks_); |
838 | 838 |
839 std::for_each(scheduled_database_tasks_.begin(), | 839 std::for_each(scheduled_database_tasks_.begin(), |
840 scheduled_database_tasks_.end(), | 840 scheduled_database_tasks_.end(), |
841 std::mem_fun(&DatabaseTask::CancelCompletion)); | 841 std::mem_fun(&DatabaseTask::CancelCompletion)); |
842 | 842 |
843 if (database_) | 843 if (database_) |
844 AppCacheThread::DeleteSoon(AppCacheThread::db(), FROM_HERE, database_); | 844 AppCacheThread::DeleteSoon(AppCacheThread::db(), FROM_HERE, database_); |
845 } | 845 } |
846 | 846 |
847 void AppCacheStorageImpl::Initialize(const FilePath& cache_directory) { | 847 void AppCacheStorageImpl::Initialize(const FilePath& cache_directory, |
| 848 base::MessageLoopProxy* cache_thread) { |
848 cache_directory_ = cache_directory; | 849 cache_directory_ = cache_directory; |
| 850 cache_thread_ = cache_thread; |
849 is_incognito_ = cache_directory_.empty(); | 851 is_incognito_ = cache_directory_.empty(); |
850 | 852 |
851 FilePath db_file_path; | 853 FilePath db_file_path; |
852 if (!is_incognito_) | 854 if (!is_incognito_) |
853 db_file_path = cache_directory_.Append(kAppCacheDatabaseName); | 855 db_file_path = cache_directory_.Append(kAppCacheDatabaseName); |
854 database_ = new AppCacheDatabase(db_file_path); | 856 database_ = new AppCacheDatabase(db_file_path); |
855 | 857 |
856 scoped_refptr<InitTask> task = new InitTask(this); | 858 scoped_refptr<InitTask> task = new InitTask(this); |
857 task->Schedule(); | 859 task->Schedule(); |
858 } | 860 } |
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1266 | 1268 |
1267 if (!disk_cache_.get()) { | 1269 if (!disk_cache_.get()) { |
1268 int rv = net::OK; | 1270 int rv = net::OK; |
1269 disk_cache_.reset(new AppCacheDiskCache); | 1271 disk_cache_.reset(new AppCacheDiskCache); |
1270 if (is_incognito_) { | 1272 if (is_incognito_) { |
1271 rv = disk_cache_->InitWithMemBackend( | 1273 rv = disk_cache_->InitWithMemBackend( |
1272 kMaxMemDiskCacheSize, &init_callback_); | 1274 kMaxMemDiskCacheSize, &init_callback_); |
1273 } else { | 1275 } else { |
1274 rv = disk_cache_->InitWithDiskBackend( | 1276 rv = disk_cache_->InitWithDiskBackend( |
1275 cache_directory_.Append(kDiskCacheDirectoryName), | 1277 cache_directory_.Append(kDiskCacheDirectoryName), |
1276 kMaxDiskCacheSize, false, &init_callback_); | 1278 kMaxDiskCacheSize, false, cache_thread_, &init_callback_); |
1277 } | 1279 } |
1278 | 1280 |
| 1281 // We should not keep this reference around. |
| 1282 cache_thread_ = NULL; |
| 1283 |
1279 if (rv != net::ERR_IO_PENDING) | 1284 if (rv != net::ERR_IO_PENDING) |
1280 OnDiskCacheInitialized(rv); | 1285 OnDiskCacheInitialized(rv); |
1281 } | 1286 } |
1282 return disk_cache_.get(); | 1287 return disk_cache_.get(); |
1283 } | 1288 } |
1284 | 1289 |
1285 void AppCacheStorageImpl::OnDiskCacheInitialized(int rv) { | 1290 void AppCacheStorageImpl::OnDiskCacheInitialized(int rv) { |
1286 if (rv != net::OK) { | 1291 if (rv != net::OK) { |
1287 LOG(ERROR) << "Failed to open the appcache diskcache."; | 1292 LOG(ERROR) << "Failed to open the appcache diskcache."; |
1288 AppCacheHistograms::CountInitResult(AppCacheHistograms::DISK_CACHE_ERROR); | 1293 AppCacheHistograms::CountInitResult(AppCacheHistograms::DISK_CACHE_ERROR); |
1289 | 1294 |
1290 // We're unable to open the disk cache, this is a fatal error that we can't | 1295 // We're unable to open the disk cache, this is a fatal error that we can't |
1291 // really recover from. We handle it by disabling the appcache for this | 1296 // really recover from. We handle it by disabling the appcache for this |
1292 // browser session and deleting the directory on disk. The next browser | 1297 // browser session and deleting the directory on disk. The next browser |
1293 // session should start with a clean slate. | 1298 // session should start with a clean slate. |
1294 Disable(); | 1299 Disable(); |
1295 if (!is_incognito_) { | 1300 if (!is_incognito_) { |
1296 LOG(INFO) << "Deleting existing appcache data and starting over."; | 1301 LOG(INFO) << "Deleting existing appcache data and starting over."; |
1297 AppCacheThread::PostTask(AppCacheThread::db(), FROM_HERE, | 1302 AppCacheThread::PostTask(AppCacheThread::db(), FROM_HERE, |
1298 NewRunnableFunction(DeleteDirectory, cache_directory_)); | 1303 NewRunnableFunction(DeleteDirectory, cache_directory_)); |
1299 } | 1304 } |
1300 } | 1305 } |
1301 } | 1306 } |
1302 | 1307 |
1303 } // namespace appcache | 1308 } // namespace appcache |
OLD | NEW |