| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/appcache/appcache_storage_impl.h" | 5 #include "content/browser/appcache/appcache_storage_impl.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <functional> | 8 #include <functional> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 AppCacheDatabase* database, | 75 AppCacheDatabase* database, |
| 76 scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy, | 76 scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy, |
| 77 bool force_keep_session_state) { | 77 bool force_keep_session_state) { |
| 78 scoped_ptr<AppCacheDatabase> database_to_delete(database); | 78 scoped_ptr<AppCacheDatabase> database_to_delete(database); |
| 79 | 79 |
| 80 // If saving session state, only delete the database. | 80 // If saving session state, only delete the database. |
| 81 if (force_keep_session_state) | 81 if (force_keep_session_state) |
| 82 return; | 82 return; |
| 83 | 83 |
| 84 bool has_session_only_appcaches = | 84 bool has_session_only_appcaches = |
| 85 special_storage_policy && | 85 special_storage_policy.get() && |
| 86 special_storage_policy->HasSessionOnlyOrigins(); | 86 special_storage_policy->HasSessionOnlyOrigins(); |
| 87 | 87 |
| 88 // Clearning only session-only databases, and there are none. | 88 // Clearning only session-only databases, and there are none. |
| 89 if (!has_session_only_appcaches) | 89 if (!has_session_only_appcaches) |
| 90 return; | 90 return; |
| 91 | 91 |
| 92 std::set<GURL> origins; | 92 std::set<GURL> origins; |
| 93 database->FindOriginsWithGroups(&origins); | 93 database->FindOriginsWithGroups(&origins); |
| 94 if (origins.empty()) | 94 if (origins.empty()) |
| 95 return; // nothing to delete | 95 return; // nothing to delete |
| 96 | 96 |
| 97 sql::Connection* connection = database->db_connection(); | 97 sql::Connection* connection = database->db_connection(); |
| 98 if (!connection) { | 98 if (!connection) { |
| 99 NOTREACHED() << "Missing database connection."; | 99 NOTREACHED() << "Missing database connection."; |
| 100 return; | 100 return; |
| 101 } | 101 } |
| 102 | 102 |
| 103 std::set<GURL>::const_iterator origin; | 103 std::set<GURL>::const_iterator origin; |
| 104 DCHECK(special_storage_policy); | 104 DCHECK(special_storage_policy.get()); |
| 105 for (origin = origins.begin(); origin != origins.end(); ++origin) { | 105 for (origin = origins.begin(); origin != origins.end(); ++origin) { |
| 106 if (!special_storage_policy->IsStorageSessionOnly(*origin)) | 106 if (!special_storage_policy->IsStorageSessionOnly(*origin)) |
| 107 continue; | 107 continue; |
| 108 if (special_storage_policy->IsStorageProtected(*origin)) | 108 if (special_storage_policy->IsStorageProtected(*origin)) |
| 109 continue; | 109 continue; |
| 110 | 110 |
| 111 std::vector<AppCacheDatabase::GroupRecord> groups; | 111 std::vector<AppCacheDatabase::GroupRecord> groups; |
| 112 database->FindGroupsForOrigin(*origin, &groups); | 112 database->FindGroupsForOrigin(*origin, &groups); |
| 113 std::vector<AppCacheDatabase::GroupRecord>::const_iterator group; | 113 std::vector<AppCacheDatabase::GroupRecord>::const_iterator group; |
| 114 for (group = groups.begin(); group != groups.end(); ++group) { | 114 for (group = groups.begin(); group != groups.end(); ++group) { |
| (...skipping 1229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1344 service()->force_keep_session_state()))) { | 1344 service()->force_keep_session_state()))) { |
| 1345 delete database_; | 1345 delete database_; |
| 1346 } | 1346 } |
| 1347 database_ = NULL; // So no further database tasks can be scheduled. | 1347 database_ = NULL; // So no further database tasks can be scheduled. |
| 1348 } | 1348 } |
| 1349 | 1349 |
| 1350 void AppCacheStorageImpl::Initialize( | 1350 void AppCacheStorageImpl::Initialize( |
| 1351 const base::FilePath& cache_directory, | 1351 const base::FilePath& cache_directory, |
| 1352 const scoped_refptr<base::SingleThreadTaskRunner>& db_thread, | 1352 const scoped_refptr<base::SingleThreadTaskRunner>& db_thread, |
| 1353 const scoped_refptr<base::SingleThreadTaskRunner>& cache_thread) { | 1353 const scoped_refptr<base::SingleThreadTaskRunner>& cache_thread) { |
| 1354 DCHECK(db_thread); | 1354 DCHECK(db_thread.get()); |
| 1355 | 1355 |
| 1356 cache_directory_ = cache_directory; | 1356 cache_directory_ = cache_directory; |
| 1357 is_incognito_ = cache_directory_.empty(); | 1357 is_incognito_ = cache_directory_.empty(); |
| 1358 | 1358 |
| 1359 base::FilePath db_file_path; | 1359 base::FilePath db_file_path; |
| 1360 if (!is_incognito_) | 1360 if (!is_incognito_) |
| 1361 db_file_path = cache_directory_.Append(kAppCacheDatabaseName); | 1361 db_file_path = cache_directory_.Append(kAppCacheDatabaseName); |
| 1362 database_ = new AppCacheDatabase(db_file_path); | 1362 database_ = new AppCacheDatabase(db_file_path); |
| 1363 | 1363 |
| 1364 db_thread_ = db_thread; | 1364 db_thread_ = db_thread; |
| (...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1857 base::Bind(&AppCacheStorageImpl::CallScheduleReinitialize, | 1857 base::Bind(&AppCacheStorageImpl::CallScheduleReinitialize, |
| 1858 weak_factory_.GetWeakPtr())); | 1858 weak_factory_.GetWeakPtr())); |
| 1859 } | 1859 } |
| 1860 | 1860 |
| 1861 void AppCacheStorageImpl::CallScheduleReinitialize() { | 1861 void AppCacheStorageImpl::CallScheduleReinitialize() { |
| 1862 service_->ScheduleReinitialize(); | 1862 service_->ScheduleReinitialize(); |
| 1863 // note: 'this' may be deleted at this point. | 1863 // note: 'this' may be deleted at this point. |
| 1864 } | 1864 } |
| 1865 | 1865 |
| 1866 } // namespace content | 1866 } // namespace content |
| OLD | NEW |