OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/sync_file_system/drive_backend/metadata_database.h" | 5 #include "chrome/browser/sync_file_system/drive_backend/metadata_database.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <stack> | 8 #include <stack> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 1172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1183 index_.get()); | 1183 index_.get()); |
1184 WriteToDatabase(callback); | 1184 WriteToDatabase(callback); |
1185 return; | 1185 return; |
1186 } | 1186 } |
1187 } | 1187 } |
1188 } | 1188 } |
1189 | 1189 |
1190 scoped_ptr<FileTracker> updated_tracker = CloneFileTracker(&tracker); | 1190 scoped_ptr<FileTracker> updated_tracker = CloneFileTracker(&tracker); |
1191 *updated_tracker->mutable_synced_details() = updated_details; | 1191 *updated_tracker->mutable_synced_details() = updated_details; |
1192 | 1192 |
| 1193 bool should_promote = false; |
| 1194 |
1193 // Activate the tracker if: | 1195 // Activate the tracker if: |
1194 // - There is no active tracker that tracks |tracker->file_id()|. | 1196 // - There is no active tracker that tracks |tracker->file_id()|. |
1195 // - There is no active tracker that has the same |parent| and |title|. | 1197 // - There is no active tracker that has the same |parent| and |title|. |
1196 if (!tracker.active() && CanActivateTracker(tracker)) { | 1198 if (!tracker.active() && CanActivateTracker(tracker)) { |
1197 updated_tracker->set_active(true); | 1199 updated_tracker->set_active(true); |
1198 updated_tracker->set_dirty(true); | 1200 updated_tracker->set_dirty(true); |
1199 updated_tracker->set_needs_folder_listing( | 1201 updated_tracker->set_needs_folder_listing( |
1200 tracker.synced_details().file_kind() == FILE_KIND_FOLDER); | 1202 tracker.synced_details().file_kind() == FILE_KIND_FOLDER); |
| 1203 should_promote = true; |
1201 } else if (tracker.dirty() && !ShouldKeepDirty(tracker)) { | 1204 } else if (tracker.dirty() && !ShouldKeepDirty(tracker)) { |
1202 updated_tracker->set_dirty(false); | 1205 updated_tracker->set_dirty(false); |
1203 } | 1206 } |
1204 index_->StoreFileTracker(updated_tracker.Pass()); | 1207 index_->StoreFileTracker(updated_tracker.Pass()); |
| 1208 if (should_promote) |
| 1209 index_->PromoteDemotedDirtyTracker(tracker_id); |
1205 | 1210 |
1206 WriteToDatabase(callback); | 1211 WriteToDatabase(callback); |
1207 } | 1212 } |
1208 | 1213 |
1209 MetadataDatabase::ActivationStatus MetadataDatabase::TryActivateTracker( | 1214 MetadataDatabase::ActivationStatus MetadataDatabase::TryActivateTracker( |
1210 int64 parent_tracker_id, | 1215 int64 parent_tracker_id, |
1211 const std::string& file_id, | 1216 const std::string& file_id, |
1212 const SyncStatusCallback& callback) { | 1217 const SyncStatusCallback& callback) { |
1213 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1218 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
1214 | 1219 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1274 WriteToDatabase(callback); | 1279 WriteToDatabase(callback); |
1275 return ACTIVATION_PENDING; | 1280 return ACTIVATION_PENDING; |
1276 } | 1281 } |
1277 | 1282 |
1278 void MetadataDatabase::LowerTrackerPriority(int64 tracker_id) { | 1283 void MetadataDatabase::LowerTrackerPriority(int64 tracker_id) { |
1279 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1284 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
1280 index_->DemoteDirtyTracker(tracker_id); | 1285 index_->DemoteDirtyTracker(tracker_id); |
1281 WriteToDatabase(base::Bind(&EmptyStatusCallback)); | 1286 WriteToDatabase(base::Bind(&EmptyStatusCallback)); |
1282 } | 1287 } |
1283 | 1288 |
1284 void MetadataDatabase::PromoteLowerPriorityTrackersToNormal() { | 1289 bool MetadataDatabase::PromoteLowerPriorityTrackersToNormal() { |
1285 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1290 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
1286 index_->PromoteDemotedDirtyTrackers(); | 1291 bool promoted = index_->PromoteDemotedDirtyTrackers(); |
| 1292 WriteToDatabase(base::Bind(&EmptyStatusCallback)); |
| 1293 return promoted; |
| 1294 } |
| 1295 |
| 1296 void MetadataDatabase::PromoteDemotedTracker(int64 tracker_id) { |
| 1297 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
| 1298 index_->PromoteDemotedDirtyTracker(tracker_id); |
1287 WriteToDatabase(base::Bind(&EmptyStatusCallback)); | 1299 WriteToDatabase(base::Bind(&EmptyStatusCallback)); |
1288 } | 1300 } |
1289 | 1301 |
1290 bool MetadataDatabase::GetNormalPriorityDirtyTracker( | 1302 bool MetadataDatabase::GetNormalPriorityDirtyTracker( |
1291 FileTracker* tracker_out) const { | 1303 FileTracker* tracker_out) const { |
1292 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); | 1304 DCHECK(worker_sequence_checker_.CalledOnValidSequencedThread()); |
1293 | 1305 |
1294 int64 dirty_tracker_id = index_->PickDirtyTracker(); | 1306 int64 dirty_tracker_id = index_->PickDirtyTracker(); |
1295 if (!dirty_tracker_id) | 1307 if (!dirty_tracker_id) |
1296 return false; | 1308 return false; |
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1896 index_->StoreFileMetadata(app_root_metadata.Pass()); | 1908 index_->StoreFileMetadata(app_root_metadata.Pass()); |
1897 index_->StoreFileTracker(app_root_tracker.Pass()); | 1909 index_->StoreFileTracker(app_root_tracker.Pass()); |
1898 } | 1910 } |
1899 | 1911 |
1900 void MetadataDatabase::DetachFromSequence() { | 1912 void MetadataDatabase::DetachFromSequence() { |
1901 worker_sequence_checker_.DetachFromSequence(); | 1913 worker_sequence_checker_.DetachFromSequence(); |
1902 } | 1914 } |
1903 | 1915 |
1904 } // namespace drive_backend | 1916 } // namespace drive_backend |
1905 } // namespace sync_file_system | 1917 } // namespace sync_file_system |
OLD | NEW |