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 #include "webkit/database/database_tracker.h" | 5 #include "webkit/database/database_tracker.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 | 134 |
135 if (quota_manager_proxy_) | 135 if (quota_manager_proxy_) |
136 quota_manager_proxy_->NotifyStorageAccessed( | 136 quota_manager_proxy_->NotifyStorageAccessed( |
137 quota::QuotaClient::kDatabase, | 137 quota::QuotaClient::kDatabase, |
138 DatabaseUtil::GetOriginFromIdentifier(origin_identifier), | 138 DatabaseUtil::GetOriginFromIdentifier(origin_identifier), |
139 quota::kStorageTypeTemporary); | 139 quota::kStorageTypeTemporary); |
140 | 140 |
141 InsertOrUpdateDatabaseDetails(origin_identifier, database_name, | 141 InsertOrUpdateDatabaseDetails(origin_identifier, database_name, |
142 database_description, estimated_size); | 142 database_description, estimated_size); |
143 if (database_connections_.AddConnection(origin_identifier, database_name)) { | 143 if (database_connections_.AddConnection(origin_identifier, database_name)) { |
144 *database_size = SeedOpenDatabaseSize(origin_identifier, database_name); | 144 *database_size = SeedOpenDatabaseInfo(origin_identifier, |
| 145 database_name, |
| 146 database_description); |
145 return; | 147 return; |
146 } | 148 } |
147 *database_size = UpdateOpenDatabaseSizeAndNotify(origin_identifier, | 149 *database_size = UpdateOpenDatabaseInfoAndNotify(origin_identifier, |
148 database_name); | 150 database_name, |
| 151 &database_description); |
149 } | 152 } |
150 | 153 |
151 void DatabaseTracker::DatabaseModified(const string16& origin_identifier, | 154 void DatabaseTracker::DatabaseModified(const string16& origin_identifier, |
152 const string16& database_name) { | 155 const string16& database_name) { |
153 if (!LazyInit()) | 156 if (!LazyInit()) |
154 return; | 157 return; |
155 UpdateOpenDatabaseSizeAndNotify(origin_identifier, database_name); | 158 UpdateOpenDatabaseSizeAndNotify(origin_identifier, database_name); |
156 } | 159 } |
157 | 160 |
158 void DatabaseTracker::DatabaseClosed(const string16& origin_identifier, | 161 void DatabaseTracker::DatabaseClosed(const string16& origin_identifier, |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 string16 origin_directory = | 274 string16 origin_directory = |
272 base::IntToString16(incognito_origin_directories_generator_++); | 275 base::IntToString16(incognito_origin_directories_generator_++); |
273 incognito_origin_directories_[origin_identifier] = origin_directory; | 276 incognito_origin_directories_[origin_identifier] = origin_directory; |
274 return origin_directory; | 277 return origin_directory; |
275 } | 278 } |
276 | 279 |
277 FilePath DatabaseTracker::GetFullDBFilePath( | 280 FilePath DatabaseTracker::GetFullDBFilePath( |
278 const string16& origin_identifier, | 281 const string16& origin_identifier, |
279 const string16& database_name) { | 282 const string16& database_name) { |
280 DCHECK(!origin_identifier.empty()); | 283 DCHECK(!origin_identifier.empty()); |
281 DCHECK(!database_name.empty()); | |
282 if (!LazyInit()) | 284 if (!LazyInit()) |
283 return FilePath(); | 285 return FilePath(); |
284 | 286 |
285 int64 id = databases_table_->GetDatabaseID( | 287 int64 id = databases_table_->GetDatabaseID( |
286 origin_identifier, database_name); | 288 origin_identifier, database_name); |
287 if (id < 0) | 289 if (id < 0) |
288 return FilePath(); | 290 return FilePath(); |
289 | 291 |
290 FilePath file_name = FilePath::FromWStringHack( | 292 FilePath file_name = FilePath::FromWStringHack( |
291 UTF8ToWide(base::Int64ToString(id))); | 293 UTF8ToWide(base::Int64ToString(id))); |
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 details.description = database_description; | 526 details.description = database_description; |
525 details.estimated_size = estimated_size; | 527 details.estimated_size = estimated_size; |
526 databases_table_->UpdateDatabaseDetails(details); | 528 databases_table_->UpdateDatabaseDetails(details); |
527 } | 529 } |
528 } | 530 } |
529 | 531 |
530 void DatabaseTracker::ClearAllCachedOriginInfo() { | 532 void DatabaseTracker::ClearAllCachedOriginInfo() { |
531 origins_info_map_.clear(); | 533 origins_info_map_.clear(); |
532 } | 534 } |
533 | 535 |
534 DatabaseTracker::CachedOriginInfo* DatabaseTracker::GetCachedOriginInfo( | 536 DatabaseTracker::CachedOriginInfo* DatabaseTracker::MaybeGetCachedOriginInfo( |
535 const string16& origin_identifier) { | 537 const string16& origin_identifier, bool create_if_needed) { |
536 if (!LazyInit()) | 538 if (!LazyInit()) |
537 return NULL; | 539 return NULL; |
538 | 540 |
539 // Populate the cache with data for this origin if needed. | 541 // Populate the cache with data for this origin if needed. |
540 if (origins_info_map_.find(origin_identifier) == origins_info_map_.end()) { | 542 if (origins_info_map_.find(origin_identifier) == origins_info_map_.end()) { |
| 543 if (!create_if_needed) |
| 544 return NULL; |
| 545 |
541 std::vector<DatabaseDetails> details; | 546 std::vector<DatabaseDetails> details; |
542 if (!databases_table_->GetAllDatabaseDetailsForOrigin( | 547 if (!databases_table_->GetAllDatabaseDetailsForOrigin( |
543 origin_identifier, &details)) { | 548 origin_identifier, &details)) { |
544 return NULL; | 549 return NULL; |
545 } | 550 } |
546 | 551 |
547 CachedOriginInfo& origin_info = origins_info_map_[origin_identifier]; | 552 CachedOriginInfo& origin_info = origins_info_map_[origin_identifier]; |
548 origin_info.SetOrigin(origin_identifier); | 553 origin_info.SetOrigin(origin_identifier); |
549 for (std::vector<DatabaseDetails>::const_iterator it = details.begin(); | 554 for (std::vector<DatabaseDetails>::const_iterator it = details.begin(); |
550 it != details.end(); it++) { | 555 it != details.end(); it++) { |
(...skipping 15 matching lines...) Expand all Loading... |
566 | 571 |
567 int64 DatabaseTracker::GetDBFileSize(const string16& origin_identifier, | 572 int64 DatabaseTracker::GetDBFileSize(const string16& origin_identifier, |
568 const string16& database_name) { | 573 const string16& database_name) { |
569 FilePath db_file_name = GetFullDBFilePath(origin_identifier, database_name); | 574 FilePath db_file_name = GetFullDBFilePath(origin_identifier, database_name); |
570 int64 db_file_size = 0; | 575 int64 db_file_size = 0; |
571 if (!file_util::GetFileSize(db_file_name, &db_file_size)) | 576 if (!file_util::GetFileSize(db_file_name, &db_file_size)) |
572 db_file_size = 0; | 577 db_file_size = 0; |
573 return db_file_size; | 578 return db_file_size; |
574 } | 579 } |
575 | 580 |
576 int64 DatabaseTracker::SeedOpenDatabaseSize( | 581 int64 DatabaseTracker::SeedOpenDatabaseInfo( |
577 const string16& origin_id, const string16& name) { | 582 const string16& origin_id, const string16& name, |
| 583 const string16& description) { |
578 DCHECK(database_connections_.IsDatabaseOpened(origin_id, name)); | 584 DCHECK(database_connections_.IsDatabaseOpened(origin_id, name)); |
579 int64 size = GetDBFileSize(origin_id, name); | 585 int64 size = GetDBFileSize(origin_id, name); |
580 database_connections_.SetOpenDatabaseSize(origin_id, name, size); | 586 database_connections_.SetOpenDatabaseSize(origin_id, name, size); |
581 if (origins_info_map_.find(origin_id) != origins_info_map_.end()) | 587 CachedOriginInfo* info = MaybeGetCachedOriginInfo(origin_id, false); |
582 origins_info_map_[origin_id].SetDatabaseSize(name, size); | 588 if (info) { |
| 589 info->SetDatabaseSize(name, size); |
| 590 info->SetDatabaseDescription(name, description); |
| 591 } |
583 return size; | 592 return size; |
584 } | 593 } |
585 | 594 |
586 int64 DatabaseTracker::UpdateOpenDatabaseSizeAndNotify( | 595 int64 DatabaseTracker::UpdateOpenDatabaseInfoAndNotify( |
587 const string16& origin_id, const string16& name) { | 596 const string16& origin_id, const string16& name, |
| 597 const string16* opt_description) { |
588 DCHECK(database_connections_.IsDatabaseOpened(origin_id, name)); | 598 DCHECK(database_connections_.IsDatabaseOpened(origin_id, name)); |
589 int64 new_size = GetDBFileSize(origin_id, name); | 599 int64 new_size = GetDBFileSize(origin_id, name); |
590 int64 old_size = database_connections_.GetOpenDatabaseSize(origin_id, name); | 600 int64 old_size = database_connections_.GetOpenDatabaseSize(origin_id, name); |
| 601 CachedOriginInfo* info = MaybeGetCachedOriginInfo(origin_id, false); |
| 602 if (info && opt_description) |
| 603 info->SetDatabaseDescription(name, *opt_description); |
591 if (old_size != new_size) { | 604 if (old_size != new_size) { |
592 database_connections_.SetOpenDatabaseSize(origin_id, name, new_size); | 605 database_connections_.SetOpenDatabaseSize(origin_id, name, new_size); |
593 if (origins_info_map_.find(origin_id) != origins_info_map_.end()) | 606 if (info) |
594 origins_info_map_[origin_id].SetDatabaseSize(name, new_size); | 607 info->SetDatabaseSize(name, new_size); |
595 if (quota_manager_proxy_) | 608 if (quota_manager_proxy_) |
596 quota_manager_proxy_->NotifyStorageModified( | 609 quota_manager_proxy_->NotifyStorageModified( |
597 quota::QuotaClient::kDatabase, | 610 quota::QuotaClient::kDatabase, |
598 DatabaseUtil::GetOriginFromIdentifier(origin_id), | 611 DatabaseUtil::GetOriginFromIdentifier(origin_id), |
599 quota::kStorageTypeTemporary, | 612 quota::kStorageTypeTemporary, |
600 new_size - old_size); | 613 new_size - old_size); |
601 FOR_EACH_OBSERVER(Observer, observers_, OnDatabaseSizeChanged( | 614 FOR_EACH_OBSERVER(Observer, observers_, OnDatabaseSizeChanged( |
602 origin_id, name, new_size)); | 615 origin_id, name, new_size)); |
603 } | 616 } |
604 return new_size; | 617 return new_size; |
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
841 return; | 854 return; |
842 } | 855 } |
843 if (shutting_down_) { | 856 if (shutting_down_) { |
844 NOTREACHED(); | 857 NOTREACHED(); |
845 return; | 858 return; |
846 } | 859 } |
847 clear_local_state_on_exit_ = clear_local_state_on_exit; | 860 clear_local_state_on_exit_ = clear_local_state_on_exit; |
848 } | 861 } |
849 | 862 |
850 } // namespace webkit_database | 863 } // namespace webkit_database |
OLD | NEW |