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 "chrome/browser/sync_file_system/drive_metadata_store.h" | 5 #include "chrome/browser/sync_file_system/drive_metadata_store.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 | 40 |
41 const char* const kServiceName = DriveFileSyncService::kServiceName; | 41 const char* const kServiceName = DriveFileSyncService::kServiceName; |
42 const char kDatabaseVersionKey[] = "VERSION"; | 42 const char kDatabaseVersionKey[] = "VERSION"; |
43 const int64 kCurrentDatabaseVersion = 1; | 43 const int64 kCurrentDatabaseVersion = 1; |
44 const char kChangeStampKey[] = "CHANGE_STAMP"; | 44 const char kChangeStampKey[] = "CHANGE_STAMP"; |
45 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; | 45 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; |
46 const char kDriveMetadataKeyPrefix[] = "METADATA: "; | 46 const char kDriveMetadataKeyPrefix[] = "METADATA: "; |
47 const char kMetadataKeySeparator = ' '; | 47 const char kMetadataKeySeparator = ' '; |
48 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; | 48 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; |
49 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; | 49 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; |
| 50 const char kDriveDisabledOriginKeyPrefix[] = "DISABLED_ORIGIN: "; |
50 const size_t kDriveMetadataKeyPrefixLength = arraysize(kDriveMetadataKeyPrefix); | 51 const size_t kDriveMetadataKeyPrefixLength = arraysize(kDriveMetadataKeyPrefix); |
51 | 52 |
52 const base::FilePath::CharType kV0FormatPathPrefix[] = | 53 const base::FilePath::CharType kV0FormatPathPrefix[] = |
53 FILE_PATH_LITERAL("drive/"); | 54 FILE_PATH_LITERAL("drive/"); |
54 | 55 |
55 bool ParseV0FormatFileSystemURLString(const GURL& url, | 56 bool ParseV0FormatFileSystemURLString(const GURL& url, |
56 GURL* origin, | 57 GURL* origin, |
57 base::FilePath* path) { | 58 base::FilePath* path) { |
58 fileapi::FileSystemType mount_type; | 59 fileapi::FileSystemType mount_type; |
59 base::FilePath virtual_path; | 60 base::FilePath virtual_path; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 SyncStatusCode MigrateDatabaseIfNeeded(); | 107 SyncStatusCode MigrateDatabaseIfNeeded(); |
107 SyncStatusCode MigrateFromVersion0Database(); | 108 SyncStatusCode MigrateFromVersion0Database(); |
108 | 109 |
109 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp); | 110 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp); |
110 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id); | 111 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id); |
111 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); | 112 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); |
112 SyncStatusCode UpdateEntry(const FileSystemURL& url, | 113 SyncStatusCode UpdateEntry(const FileSystemURL& url, |
113 const DriveMetadata& metadata); | 114 const DriveMetadata& metadata); |
114 SyncStatusCode DeleteEntry(const FileSystemURL& url); | 115 SyncStatusCode DeleteEntry(const FileSystemURL& url); |
115 | 116 |
116 SyncStatusCode UpdateSyncOriginAsBatch(const GURL& origin, | 117 // TODO(calvinlo): consolidate these state transition functions for sync |
| 118 // origins like "UpdateOrigin(GURL, SyncStatusEnum)". And manage origins in |
| 119 // just one map like "Map<SyncStatusEnum, ResourceIDMap>". |
| 120 // http://crbug.com/211600 |
| 121 SyncStatusCode UpdateOriginAsBatchSync(const GURL& origin, |
117 const std::string& resource_id); | 122 const std::string& resource_id); |
118 SyncStatusCode UpdateSyncOriginAsIncremental(const GURL& origin, | 123 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin, |
119 const std::string& resource_id); | 124 const std::string& resource_id); |
| 125 SyncStatusCode EnableOrigin(const GURL& origin, |
| 126 const std::string& resource_id); |
| 127 SyncStatusCode DisableOrigin(const GURL& origin, |
| 128 const std::string& resource_id); |
120 SyncStatusCode RemoveOrigin(const GURL& origin); | 129 SyncStatusCode RemoveOrigin(const GURL& origin); |
121 | 130 |
122 SyncStatusCode GetSyncOrigins(ResourceIdByOrigin* batch_sync_origins, | 131 SyncStatusCode GetOrigins(ResourceIdByOrigin* batch_sync_origins, |
123 ResourceIdByOrigin* incremental_sync_origins); | 132 ResourceIdByOrigin* incremental_sync_origins, |
| 133 ResourceIdByOrigin* disabled_origins); |
124 | 134 |
125 private: | 135 private: |
126 bool CalledOnValidThread() const { | 136 bool CalledOnValidThread() const { |
127 return task_runner_->RunsTasksOnCurrentThread(); | 137 return task_runner_->RunsTasksOnCurrentThread(); |
128 } | 138 } |
129 | 139 |
130 scoped_refptr<base::SequencedTaskRunner> task_runner_; | 140 scoped_refptr<base::SequencedTaskRunner> task_runner_; |
131 | 141 |
132 std::string db_path_; | 142 std::string db_path_; |
133 scoped_ptr<leveldb::DB> db_; | 143 scoped_ptr<leveldb::DB> db_; |
134 | 144 |
135 DISALLOW_COPY_AND_ASSIGN(DriveMetadataDB); | 145 DISALLOW_COPY_AND_ASSIGN(DriveMetadataDB); |
136 }; | 146 }; |
137 | 147 |
138 struct DriveMetadataDBContents { | 148 struct DriveMetadataDBContents { |
139 int64 largest_changestamp; | 149 int64 largest_changestamp; |
140 DriveMetadataStore::MetadataMap metadata_map; | 150 DriveMetadataStore::MetadataMap metadata_map; |
141 std::string sync_root_directory_resource_id; | 151 std::string sync_root_directory_resource_id; |
142 ResourceIdByOrigin batch_sync_origins; | 152 ResourceIdByOrigin batch_sync_origins; |
143 ResourceIdByOrigin incremental_sync_origins; | 153 ResourceIdByOrigin incremental_sync_origins; |
| 154 ResourceIdByOrigin disabled_origins; |
144 }; | 155 }; |
145 | 156 |
146 namespace { | 157 namespace { |
147 | 158 |
148 SyncStatusCode InitializeDBOnFileThread(DriveMetadataDB* db, | 159 SyncStatusCode InitializeDBOnFileThread(DriveMetadataDB* db, |
149 DriveMetadataDBContents* contents) { | 160 DriveMetadataDBContents* contents) { |
150 DCHECK(db); | 161 DCHECK(db); |
151 DCHECK(contents); | 162 DCHECK(contents); |
152 | 163 |
153 contents->largest_changestamp = 0; | 164 contents->largest_changestamp = 0; |
154 contents->metadata_map.clear(); | 165 contents->metadata_map.clear(); |
155 contents->batch_sync_origins.clear(); | 166 contents->batch_sync_origins.clear(); |
156 contents->incremental_sync_origins.clear(); | 167 contents->incremental_sync_origins.clear(); |
| 168 contents->disabled_origins.clear(); |
157 | 169 |
158 bool created = false; | 170 bool created = false; |
159 SyncStatusCode status = db->Initialize(&created); | 171 SyncStatusCode status = db->Initialize(&created); |
160 if (status != SYNC_STATUS_OK) | 172 if (status != SYNC_STATUS_OK) |
161 return status; | 173 return status; |
162 | 174 |
163 if (!created) { | 175 if (!created) { |
164 status = db->MigrateDatabaseIfNeeded(); | 176 status = db->MigrateDatabaseIfNeeded(); |
165 if (status != SYNC_STATUS_OK) { | 177 if (status != SYNC_STATUS_OK) { |
166 LOG(WARNING) << "Failed to migrate DriveMetadataStore to latest version."; | 178 LOG(WARNING) << "Failed to migrate DriveMetadataStore to latest version."; |
167 return status; | 179 return status; |
168 } | 180 } |
169 } | 181 } |
170 | 182 |
171 return db->ReadContents(contents); | 183 return db->ReadContents(contents); |
172 } | 184 } |
173 | 185 |
174 // Returns a key string for the given batch sync origin. | 186 // Returns a key string for the given batch sync origin. |
175 // For example, when |origin| is "http://www.example.com", | 187 // For example, when |origin| is "http://www.example.com", |
176 // returns "BSYNC_ORIGIN: http://www.example.com". | 188 // returns "BSYNC_ORIGIN: http://www.example.com". |
| 189 // TODO(calvinlo): consolidate these CreateKeyFor* functions. |
| 190 // http://crbug.com/211600 |
177 std::string CreateKeyForBatchSyncOrigin(const GURL& origin) { | 191 std::string CreateKeyForBatchSyncOrigin(const GURL& origin) { |
178 DCHECK(origin.is_valid()); | 192 DCHECK(origin.is_valid()); |
179 return kDriveBatchSyncOriginKeyPrefix + origin.spec(); | 193 return kDriveBatchSyncOriginKeyPrefix + origin.spec(); |
180 } | 194 } |
181 | 195 |
182 // Returns a key string for the given incremental sync origin. | 196 // Returns a key string for the given incremental sync origin. |
183 // For example, when |origin| is "http://www.example.com", | 197 // For example, when |origin| is "http://www.example.com", |
184 // returns "ISYNC_ORIGIN: http://www.example.com". | 198 // returns "ISYNC_ORIGIN: http://www.example.com". |
185 std::string CreateKeyForIncrementalSyncOrigin(const GURL& origin) { | 199 std::string CreateKeyForIncrementalSyncOrigin(const GURL& origin) { |
186 DCHECK(origin.is_valid()); | 200 DCHECK(origin.is_valid()); |
187 return kDriveIncrementalSyncOriginKeyPrefix + origin.spec(); | 201 return kDriveIncrementalSyncOriginKeyPrefix + origin.spec(); |
188 } | 202 } |
189 | 203 |
| 204 // Returns a key string for the given disabled origin. |
| 205 // For example, when |origin| is "http://www.example.com", |
| 206 // returns "DISABLED_ORIGIN: http://www.example.com". |
| 207 std::string CreateKeyForDisabledOrigin(const GURL& origin) { |
| 208 DCHECK(origin.is_valid()); |
| 209 return kDriveDisabledOriginKeyPrefix + origin.spec(); |
| 210 } |
| 211 |
190 void AddOriginsToVector(std::vector<GURL>* all_origins, | 212 void AddOriginsToVector(std::vector<GURL>* all_origins, |
191 const ResourceIdByOrigin& resource_map) { | 213 const ResourceIdByOrigin& resource_map) { |
192 for (ResourceIdByOrigin::const_iterator itr = resource_map.begin(); | 214 for (ResourceIdByOrigin::const_iterator itr = resource_map.begin(); |
193 itr != resource_map.end(); | 215 itr != resource_map.end(); |
194 ++itr) { | 216 ++itr) { |
195 all_origins->push_back(itr->first); | 217 all_origins->push_back(itr->first); |
196 } | 218 } |
197 } | 219 } |
198 | 220 |
199 void InsertReverseMap(const ResourceIdByOrigin& forward_map, | 221 void InsertReverseMap(const ResourceIdByOrigin& forward_map, |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
252 if (status != SYNC_STATUS_OK) { | 274 if (status != SYNC_STATUS_OK) { |
253 callback.Run(status, false); | 275 callback.Run(status, false); |
254 return; | 276 return; |
255 } | 277 } |
256 | 278 |
257 largest_changestamp_ = contents->largest_changestamp; | 279 largest_changestamp_ = contents->largest_changestamp; |
258 metadata_map_.swap(contents->metadata_map); | 280 metadata_map_.swap(contents->metadata_map); |
259 sync_root_directory_resource_id_ = contents->sync_root_directory_resource_id; | 281 sync_root_directory_resource_id_ = contents->sync_root_directory_resource_id; |
260 batch_sync_origins_.swap(contents->batch_sync_origins); | 282 batch_sync_origins_.swap(contents->batch_sync_origins); |
261 incremental_sync_origins_.swap(contents->incremental_sync_origins); | 283 incremental_sync_origins_.swap(contents->incremental_sync_origins); |
| 284 disabled_origins_.swap(contents->disabled_origins); |
262 // |largest_changestamp_| is set to 0 for a fresh empty database. | 285 // |largest_changestamp_| is set to 0 for a fresh empty database. |
263 | 286 |
264 origin_by_resource_id_.clear(); | 287 origin_by_resource_id_.clear(); |
265 InsertReverseMap(batch_sync_origins_, &origin_by_resource_id_); | 288 InsertReverseMap(batch_sync_origins_, &origin_by_resource_id_); |
266 InsertReverseMap(incremental_sync_origins_, &origin_by_resource_id_); | 289 InsertReverseMap(incremental_sync_origins_, &origin_by_resource_id_); |
| 290 InsertReverseMap(disabled_origins_, &origin_by_resource_id_); |
267 | 291 |
268 callback.Run(status, largest_changestamp_ <= 0); | 292 callback.Run(status, largest_changestamp_ <= 0); |
269 } | 293 } |
270 | 294 |
271 void DriveMetadataStore::RestoreSyncRootDirectory( | 295 void DriveMetadataStore::RestoreSyncRootDirectory( |
272 const SyncStatusCallback& callback) { | 296 const SyncStatusCallback& callback) { |
273 DCHECK(CalledOnValidThread()); | 297 DCHECK(CalledOnValidThread()); |
274 std::string* sync_root_directory_resource_id = new std::string; | 298 std::string* sync_root_directory_resource_id = new std::string; |
275 base::PostTaskAndReplyWithResult( | 299 base::PostTaskAndReplyWithResult( |
276 file_task_runner_, FROM_HERE, | 300 file_task_runner_, FROM_HERE, |
(...skipping 15 matching lines...) Expand all Loading... |
292 db_status_ = status; | 316 db_status_ = status; |
293 if (status != SYNC_STATUS_OK) { | 317 if (status != SYNC_STATUS_OK) { |
294 callback.Run(status); | 318 callback.Run(status); |
295 return; | 319 return; |
296 } | 320 } |
297 | 321 |
298 sync_root_directory_resource_id_.swap(*sync_root_directory_resource_id); | 322 sync_root_directory_resource_id_.swap(*sync_root_directory_resource_id); |
299 callback.Run(status); | 323 callback.Run(status); |
300 } | 324 } |
301 | 325 |
302 void DriveMetadataStore::RestoreSyncOrigins( | 326 void DriveMetadataStore::RestoreOrigins( |
303 const SyncStatusCallback& callback) { | 327 const SyncStatusCallback& callback) { |
304 DCHECK(CalledOnValidThread()); | 328 DCHECK(CalledOnValidThread()); |
305 ResourceIdByOrigin* batch_sync_origins = new ResourceIdByOrigin; | 329 ResourceIdByOrigin* batch_sync_origins = new ResourceIdByOrigin; |
306 ResourceIdByOrigin* incremental_sync_origins = new ResourceIdByOrigin; | 330 ResourceIdByOrigin* incremental_sync_origins = new ResourceIdByOrigin; |
| 331 ResourceIdByOrigin* disabled_origins = new ResourceIdByOrigin; |
307 base::PostTaskAndReplyWithResult( | 332 base::PostTaskAndReplyWithResult( |
308 file_task_runner_, FROM_HERE, | 333 file_task_runner_, FROM_HERE, |
309 base::Bind(&DriveMetadataDB::GetSyncOrigins, | 334 base::Bind(&DriveMetadataDB::GetOrigins, |
310 base::Unretained(db_.get()), | 335 base::Unretained(db_.get()), |
311 batch_sync_origins, | 336 batch_sync_origins, |
312 incremental_sync_origins), | 337 incremental_sync_origins, |
313 base::Bind(&DriveMetadataStore::DidRestoreSyncOrigins, | 338 disabled_origins), |
| 339 base::Bind(&DriveMetadataStore::DidRestoreOrigins, |
314 AsWeakPtr(), callback, | 340 AsWeakPtr(), callback, |
315 base::Owned(batch_sync_origins), | 341 base::Owned(batch_sync_origins), |
316 base::Owned(incremental_sync_origins))); | 342 base::Owned(incremental_sync_origins), |
| 343 base::Owned(disabled_origins))); |
317 } | 344 } |
318 | 345 |
319 void DriveMetadataStore::DidRestoreSyncOrigins( | 346 void DriveMetadataStore::DidRestoreOrigins( |
320 const SyncStatusCallback& callback, | 347 const SyncStatusCallback& callback, |
321 ResourceIdByOrigin* batch_sync_origins, | 348 ResourceIdByOrigin* batch_sync_origins, |
322 ResourceIdByOrigin* incremental_sync_origins, | 349 ResourceIdByOrigin* incremental_sync_origins, |
| 350 ResourceIdByOrigin* disabled_origins, |
323 SyncStatusCode status) { | 351 SyncStatusCode status) { |
324 DCHECK(CalledOnValidThread()); | 352 DCHECK(CalledOnValidThread()); |
325 DCHECK(batch_sync_origins); | 353 DCHECK(batch_sync_origins); |
326 DCHECK(incremental_sync_origins); | 354 DCHECK(incremental_sync_origins); |
| 355 DCHECK(disabled_origins); |
327 | 356 |
328 db_status_ = status; | 357 db_status_ = status; |
329 if (status != SYNC_STATUS_OK) { | 358 if (status != SYNC_STATUS_OK) { |
330 callback.Run(status); | 359 callback.Run(status); |
331 return; | 360 return; |
332 } | 361 } |
333 | 362 |
334 batch_sync_origins_.swap(*batch_sync_origins); | 363 batch_sync_origins_.swap(*batch_sync_origins); |
335 incremental_sync_origins_.swap(*incremental_sync_origins); | 364 incremental_sync_origins_.swap(*incremental_sync_origins); |
| 365 disabled_origins_.swap(*disabled_origins); |
336 | 366 |
337 origin_by_resource_id_.clear(); | 367 origin_by_resource_id_.clear(); |
338 InsertReverseMap(batch_sync_origins_, &origin_by_resource_id_); | 368 InsertReverseMap(batch_sync_origins_, &origin_by_resource_id_); |
339 InsertReverseMap(incremental_sync_origins_, &origin_by_resource_id_); | 369 InsertReverseMap(incremental_sync_origins_, &origin_by_resource_id_); |
| 370 InsertReverseMap(disabled_origins_, &origin_by_resource_id_); |
340 | 371 |
341 callback.Run(status); | 372 callback.Run(status); |
342 } | 373 } |
343 | 374 |
344 void DriveMetadataStore::SetLargestChangeStamp( | 375 void DriveMetadataStore::SetLargestChangeStamp( |
345 int64 largest_changestamp, | 376 int64 largest_changestamp, |
346 const SyncStatusCallback& callback) { | 377 const SyncStatusCallback& callback) { |
347 DCHECK(CalledOnValidThread()); | 378 DCHECK(CalledOnValidThread()); |
348 DCHECK_EQ(SYNC_STATUS_OK, db_status_); | 379 DCHECK_EQ(SYNC_STATUS_OK, db_status_); |
349 largest_changestamp_ = largest_changestamp; | 380 largest_changestamp_ = largest_changestamp; |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 bool DriveMetadataStore::IsBatchSyncOrigin(const GURL& origin) const { | 473 bool DriveMetadataStore::IsBatchSyncOrigin(const GURL& origin) const { |
443 DCHECK(CalledOnValidThread()); | 474 DCHECK(CalledOnValidThread()); |
444 return ContainsKey(batch_sync_origins_, origin); | 475 return ContainsKey(batch_sync_origins_, origin); |
445 } | 476 } |
446 | 477 |
447 bool DriveMetadataStore::IsIncrementalSyncOrigin(const GURL& origin) const { | 478 bool DriveMetadataStore::IsIncrementalSyncOrigin(const GURL& origin) const { |
448 DCHECK(CalledOnValidThread()); | 479 DCHECK(CalledOnValidThread()); |
449 return ContainsKey(incremental_sync_origins_, origin); | 480 return ContainsKey(incremental_sync_origins_, origin); |
450 } | 481 } |
451 | 482 |
| 483 bool DriveMetadataStore::IsOriginDisabled(const GURL& origin) const { |
| 484 DCHECK(CalledOnValidThread()); |
| 485 return ContainsKey(disabled_origins_, origin); |
| 486 } |
| 487 |
452 void DriveMetadataStore::AddBatchSyncOrigin(const GURL& origin, | 488 void DriveMetadataStore::AddBatchSyncOrigin(const GURL& origin, |
453 const std::string& resource_id) { | 489 const std::string& resource_id) { |
454 DCHECK(CalledOnValidThread()); | 490 DCHECK(CalledOnValidThread()); |
455 DCHECK(!IsBatchSyncOrigin(origin)); | 491 DCHECK(!IsBatchSyncOrigin(origin)); |
456 DCHECK(!IsIncrementalSyncOrigin(origin)); | 492 DCHECK(!IsIncrementalSyncOrigin(origin)); |
| 493 DCHECK(!IsOriginDisabled(origin)); |
457 DCHECK_EQ(SYNC_STATUS_OK, db_status_); | 494 DCHECK_EQ(SYNC_STATUS_OK, db_status_); |
458 | 495 |
459 batch_sync_origins_.insert(std::make_pair(origin, resource_id)); | 496 batch_sync_origins_.insert(std::make_pair(origin, resource_id)); |
460 origin_by_resource_id_.insert(std::make_pair(resource_id, origin)); | 497 origin_by_resource_id_.insert(std::make_pair(resource_id, origin)); |
461 | 498 |
462 // Store a pair of |origin| and |resource_id| in the DB. | 499 // Store a pair of |origin| and |resource_id| in the DB. |
463 base::PostTaskAndReplyWithResult( | 500 base::PostTaskAndReplyWithResult( |
464 file_task_runner_, FROM_HERE, | 501 file_task_runner_, FROM_HERE, |
465 base::Bind(&DriveMetadataDB::UpdateSyncOriginAsBatch, | 502 base::Bind(&DriveMetadataDB::UpdateOriginAsBatchSync, |
466 base::Unretained(db_.get()), origin, resource_id), | 503 base::Unretained(db_.get()), origin, resource_id), |
467 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); | 504 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); |
468 } | 505 } |
469 | 506 |
470 void DriveMetadataStore::MoveBatchSyncOriginToIncremental(const GURL& origin) { | 507 void DriveMetadataStore::MoveBatchSyncOriginToIncremental(const GURL& origin) { |
471 DCHECK(CalledOnValidThread()); | 508 DCHECK(CalledOnValidThread()); |
472 DCHECK(IsBatchSyncOrigin(origin)); | 509 DCHECK(IsBatchSyncOrigin(origin)); |
473 DCHECK(!IsIncrementalSyncOrigin(origin)); | 510 DCHECK(!IsIncrementalSyncOrigin(origin)); |
| 511 DCHECK(!IsOriginDisabled(origin)); |
474 DCHECK_EQ(SYNC_STATUS_OK, db_status_); | 512 DCHECK_EQ(SYNC_STATUS_OK, db_status_); |
475 | 513 |
476 std::map<GURL, std::string>::iterator found = | 514 std::map<GURL, std::string>::iterator found = |
477 batch_sync_origins_.find(origin); | 515 batch_sync_origins_.find(origin); |
478 incremental_sync_origins_.insert(std::make_pair(origin, found->second)); | 516 incremental_sync_origins_.insert(std::make_pair(origin, found->second)); |
479 | 517 |
480 // Store a pair of |origin| and |resource_id| in the DB. | 518 // Store a pair of |origin| and |resource_id| in the DB. |
481 base::PostTaskAndReplyWithResult( | 519 base::PostTaskAndReplyWithResult( |
482 file_task_runner_, FROM_HERE, | 520 file_task_runner_, FROM_HERE, |
483 base::Bind(&DriveMetadataDB::UpdateSyncOriginAsIncremental, | 521 base::Bind(&DriveMetadataDB::UpdateOriginAsIncrementalSync, |
484 base::Unretained(db_.get()), origin, found->second), | 522 base::Unretained(db_.get()), origin, found->second), |
485 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); | 523 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); |
486 | 524 |
487 batch_sync_origins_.erase(found); | 525 batch_sync_origins_.erase(found); |
488 } | 526 } |
489 | 527 |
| 528 void DriveMetadataStore::EnableOrigin( |
| 529 const GURL& origin, |
| 530 const SyncStatusCallback& callback) { |
| 531 DCHECK(CalledOnValidThread()); |
| 532 |
| 533 std::map<GURL, std::string>::iterator found = disabled_origins_.find(origin); |
| 534 if (found == disabled_origins_.end()) { |
| 535 // |origin| has not been registered yet. |
| 536 return; |
| 537 } |
| 538 std::string resource_id = found->second; |
| 539 disabled_origins_.erase(found); |
| 540 |
| 541 // Ensure |origin| is marked as a batch sync origin. |
| 542 batch_sync_origins_.insert(std::make_pair(origin, resource_id)); |
| 543 found = incremental_sync_origins_.find(origin); |
| 544 if (found != incremental_sync_origins_.end()) |
| 545 incremental_sync_origins_.erase(found); |
| 546 |
| 547 // Store a pair of |origin| and |resource_id| in the DB. |
| 548 base::PostTaskAndReplyWithResult( |
| 549 file_task_runner_, FROM_HERE, |
| 550 base::Bind(&DriveMetadataDB::EnableOrigin, |
| 551 base::Unretained(db_.get()), origin, resource_id), |
| 552 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); |
| 553 } |
| 554 |
| 555 void DriveMetadataStore::DisableOrigin( |
| 556 const GURL& origin, |
| 557 const SyncStatusCallback& callback) { |
| 558 DCHECK(CalledOnValidThread()); |
| 559 |
| 560 std::string resource_id; |
| 561 std::map<GURL, std::string>::iterator found = |
| 562 batch_sync_origins_.find(origin); |
| 563 if (found != batch_sync_origins_.end()) { |
| 564 resource_id = found->second; |
| 565 batch_sync_origins_.erase(found); |
| 566 } |
| 567 |
| 568 found = incremental_sync_origins_.find(origin); |
| 569 if (found != incremental_sync_origins_.end()) { |
| 570 resource_id = found->second; |
| 571 incremental_sync_origins_.erase(found); |
| 572 } |
| 573 |
| 574 if (resource_id.empty()) { |
| 575 // |origin| has not been registered yet. |
| 576 return; |
| 577 } |
| 578 |
| 579 disabled_origins_.insert(std::make_pair(origin, resource_id)); |
| 580 |
| 581 // Store a pair of |origin| and |resource_id| in the DB. |
| 582 base::PostTaskAndReplyWithResult( |
| 583 file_task_runner_, FROM_HERE, |
| 584 base::Bind(&DriveMetadataDB::DisableOrigin, |
| 585 base::Unretained(db_.get()), origin, resource_id), |
| 586 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); |
| 587 } |
| 588 |
490 void DriveMetadataStore::RemoveOrigin( | 589 void DriveMetadataStore::RemoveOrigin( |
491 const GURL& origin, | 590 const GURL& origin, |
492 const SyncStatusCallback& callback) { | 591 const SyncStatusCallback& callback) { |
493 DCHECK(CalledOnValidThread()); | 592 DCHECK(CalledOnValidThread()); |
494 | 593 |
495 metadata_map_.erase(origin); | 594 metadata_map_.erase(origin); |
496 | 595 |
497 std::string resource_id; | 596 std::string resource_id; |
498 if (EraseIfExists(&batch_sync_origins_, origin, &resource_id) || | 597 if (EraseIfExists(&batch_sync_origins_, origin, &resource_id) || |
499 EraseIfExists(&incremental_sync_origins_, origin, &resource_id)) { | 598 EraseIfExists(&incremental_sync_origins_, origin, &resource_id) || |
| 599 EraseIfExists(&disabled_origins_, origin, &resource_id)) { |
500 origin_by_resource_id_.erase(resource_id); | 600 origin_by_resource_id_.erase(resource_id); |
501 } | 601 } |
502 | 602 |
503 base::PostTaskAndReplyWithResult( | 603 base::PostTaskAndReplyWithResult( |
504 file_task_runner_, FROM_HERE, | 604 file_task_runner_, FROM_HERE, |
505 base::Bind(&DriveMetadataDB::RemoveOrigin, | 605 base::Bind(&DriveMetadataDB::RemoveOrigin, |
506 base::Unretained(db_.get()), origin), | 606 base::Unretained(db_.get()), origin), |
507 base::Bind(&DriveMetadataStore::DidRemoveOrigin, AsWeakPtr(), callback)); | 607 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); |
508 } | 608 } |
509 | 609 |
510 void DriveMetadataStore::DidRemoveOrigin( | 610 void DriveMetadataStore::DidUpdateOrigin( |
511 const SyncStatusCallback& callback, | 611 const SyncStatusCallback& callback, |
512 SyncStatusCode status) { | 612 SyncStatusCode status) { |
513 UpdateDBStatus(status); | 613 UpdateDBStatus(status); |
514 callback.Run(status); | 614 callback.Run(status); |
515 } | 615 } |
516 | 616 |
517 void DriveMetadataStore::UpdateDBStatus(SyncStatusCode status) { | 617 void DriveMetadataStore::UpdateDBStatus(SyncStatusCode status) { |
518 DCHECK(CalledOnValidThread()); | 618 DCHECK(CalledOnValidThread()); |
519 if (db_status_ != SYNC_STATUS_OK && | 619 if (db_status_ != SYNC_STATUS_OK && |
520 db_status_ != SYNC_DATABASE_ERROR_NOT_FOUND) { | 620 db_status_ != SYNC_DATABASE_ERROR_NOT_FOUND) { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
572 list->push_back(std::make_pair(url, itr->second.resource_id())); | 672 list->push_back(std::make_pair(url, itr->second.resource_id())); |
573 } | 673 } |
574 } | 674 } |
575 } | 675 } |
576 return SYNC_STATUS_OK; | 676 return SYNC_STATUS_OK; |
577 } | 677 } |
578 | 678 |
579 std::string DriveMetadataStore::GetResourceIdForOrigin( | 679 std::string DriveMetadataStore::GetResourceIdForOrigin( |
580 const GURL& origin) const { | 680 const GURL& origin) const { |
581 DCHECK(CalledOnValidThread()); | 681 DCHECK(CalledOnValidThread()); |
582 DCHECK(IsBatchSyncOrigin(origin) || IsIncrementalSyncOrigin(origin)); | 682 DCHECK(IsBatchSyncOrigin(origin) || |
| 683 IsIncrementalSyncOrigin(origin) || |
| 684 IsOriginDisabled(origin)); |
583 | 685 |
584 ResourceIdByOrigin::const_iterator found = | 686 ResourceIdByOrigin::const_iterator found = |
585 incremental_sync_origins_.find(origin); | 687 incremental_sync_origins_.find(origin); |
586 if (found != incremental_sync_origins_.end()) | 688 if (found != incremental_sync_origins_.end()) |
587 return found->second; | 689 return found->second; |
588 | 690 |
589 found = batch_sync_origins_.find(origin); | 691 found = batch_sync_origins_.find(origin); |
590 if (found != batch_sync_origins_.end()) | 692 if (found != batch_sync_origins_.end()) |
591 return found->second; | 693 return found->second; |
592 | 694 |
| 695 found = disabled_origins_.find(origin); |
| 696 if (found != disabled_origins_.end()) |
| 697 return found->second; |
| 698 |
593 NOTREACHED(); | 699 NOTREACHED(); |
594 return std::string(); | 700 return std::string(); |
595 } | 701 } |
596 | 702 |
597 void DriveMetadataStore::GetAllOrigins(std::vector<GURL>* origins) { | 703 void DriveMetadataStore::GetEnabledOrigins(std::vector<GURL>* origins) { |
598 DCHECK(CalledOnValidThread()); | 704 DCHECK(CalledOnValidThread()); |
| 705 origins->clear(); |
599 origins->reserve(batch_sync_origins_.size() + | 706 origins->reserve(batch_sync_origins_.size() + |
600 incremental_sync_origins_.size()); | 707 incremental_sync_origins_.size()); |
601 AddOriginsToVector(origins, batch_sync_origins_); | 708 AddOriginsToVector(origins, batch_sync_origins_); |
602 AddOriginsToVector(origins, incremental_sync_origins_); | 709 AddOriginsToVector(origins, incremental_sync_origins_); |
603 } | 710 } |
604 | 711 |
| 712 void DriveMetadataStore::GetDisabledOrigins(std::vector<GURL>* origins) { |
| 713 DCHECK(CalledOnValidThread()); |
| 714 origins->clear(); |
| 715 origins->reserve(disabled_origins_.size()); |
| 716 AddOriginsToVector(origins, disabled_origins_); |
| 717 } |
| 718 |
605 bool DriveMetadataStore::GetOriginByOriginRootDirectoryId( | 719 bool DriveMetadataStore::GetOriginByOriginRootDirectoryId( |
606 const std::string& resource_id, | 720 const std::string& resource_id, |
607 GURL* origin) { | 721 GURL* origin) { |
608 DCHECK(CalledOnValidThread()); | 722 DCHECK(CalledOnValidThread()); |
609 DCHECK(origin); | 723 DCHECK(origin); |
610 | 724 |
611 OriginByResourceId::iterator found = origin_by_resource_id_.find(resource_id); | 725 OriginByResourceId::iterator found = origin_by_resource_id_.find(resource_id); |
612 if (found == origin_by_resource_id_.end()) | 726 if (found == origin_by_resource_id_.end()) |
613 return false; | 727 return false; |
614 *origin = found->second; | 728 *origin = found->second; |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
687 DriveMetadata metadata; | 801 DriveMetadata metadata; |
688 bool success = metadata.ParseFromString(itr->value().ToString()); | 802 bool success = metadata.ParseFromString(itr->value().ToString()); |
689 DCHECK(success); | 803 DCHECK(success); |
690 | 804 |
691 success = contents->metadata_map[origin].insert( | 805 success = contents->metadata_map[origin].insert( |
692 std::make_pair(path, metadata)).second; | 806 std::make_pair(path, metadata)).second; |
693 DCHECK(success); | 807 DCHECK(success); |
694 } | 808 } |
695 } | 809 } |
696 | 810 |
697 SyncStatusCode status = GetSyncOrigins(&contents->batch_sync_origins, | 811 SyncStatusCode status = GetOrigins(&contents->batch_sync_origins, |
698 &contents->incremental_sync_origins); | 812 &contents->incremental_sync_origins, |
| 813 &contents->disabled_origins); |
699 if (status != SYNC_STATUS_OK && | 814 if (status != SYNC_STATUS_OK && |
700 status != SYNC_DATABASE_ERROR_NOT_FOUND) | 815 status != SYNC_DATABASE_ERROR_NOT_FOUND) |
701 return status; | 816 return status; |
702 | 817 |
703 status = GetSyncRootDirectory(&contents->sync_root_directory_resource_id); | 818 status = GetSyncRootDirectory(&contents->sync_root_directory_resource_id); |
704 if (status != SYNC_STATUS_OK && | 819 if (status != SYNC_STATUS_OK && |
705 status != SYNC_DATABASE_ERROR_NOT_FOUND) | 820 status != SYNC_DATABASE_ERROR_NOT_FOUND) |
706 return status; | 821 return status; |
707 | 822 |
708 return SYNC_STATUS_OK; | 823 return SYNC_STATUS_OK; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
760 // value: <Resource ID of the sync root directory> | 875 // value: <Resource ID of the sync root directory> |
761 // | 876 // |
762 // * key: "METADATA: " + <Origin and URL> (changed) | 877 // * key: "METADATA: " + <Origin and URL> (changed) |
763 // * value: <Serialized DriveMetadata> | 878 // * value: <Serialized DriveMetadata> |
764 // | 879 // |
765 // key: "BSYNC_ORIGIN: " + <URL string of a batch sync origin> | 880 // key: "BSYNC_ORIGIN: " + <URL string of a batch sync origin> |
766 // value: <Resource ID of the drive directory for the origin> | 881 // value: <Resource ID of the drive directory for the origin> |
767 // | 882 // |
768 // key: "ISYNC_ORIGIN: " + <URL string of a incremental sync origin> | 883 // key: "ISYNC_ORIGIN: " + <URL string of a incremental sync origin> |
769 // value: <Resource ID of the drive directory for the origin> | 884 // value: <Resource ID of the drive directory for the origin> |
| 885 // |
| 886 // key: "DISABLED_ORIGIN: " + <URL string of a disabled origin> |
| 887 // value: <Resource ID of the drive directory for the origin> |
770 | 888 |
771 leveldb::WriteBatch write_batch; | 889 leveldb::WriteBatch write_batch; |
772 write_batch.Put(kDatabaseVersionKey, | 890 write_batch.Put(kDatabaseVersionKey, |
773 base::Int64ToString(kCurrentDatabaseVersion)); | 891 base::Int64ToString(kCurrentDatabaseVersion)); |
774 | 892 |
775 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); | 893 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
776 for (itr->Seek(kDriveMetadataKeyPrefix); itr->Valid(); itr->Next()) { | 894 for (itr->Seek(kDriveMetadataKeyPrefix); itr->Valid(); itr->Next()) { |
777 std::string key = itr->key().ToString(); | 895 std::string key = itr->key().ToString(); |
778 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) | 896 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) |
779 break; | 897 break; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
843 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) { | 961 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) { |
844 DCHECK(CalledOnValidThread()); | 962 DCHECK(CalledOnValidThread()); |
845 DCHECK(db_.get()); | 963 DCHECK(db_.get()); |
846 | 964 |
847 std::string metadata_key = FileSystemURLToMetadataKey(url); | 965 std::string metadata_key = FileSystemURLToMetadataKey(url); |
848 leveldb::Status status = db_->Delete( | 966 leveldb::Status status = db_->Delete( |
849 leveldb::WriteOptions(), metadata_key); | 967 leveldb::WriteOptions(), metadata_key); |
850 return LevelDBStatusToSyncStatusCode(status); | 968 return LevelDBStatusToSyncStatusCode(status); |
851 } | 969 } |
852 | 970 |
853 SyncStatusCode DriveMetadataDB::UpdateSyncOriginAsBatch( | 971 SyncStatusCode DriveMetadataDB::UpdateOriginAsBatchSync( |
854 const GURL& origin, const std::string& resource_id) { | 972 const GURL& origin, const std::string& resource_id) { |
855 DCHECK(CalledOnValidThread()); | 973 DCHECK(CalledOnValidThread()); |
856 DCHECK(db_.get()); | 974 DCHECK(db_.get()); |
857 | 975 |
858 leveldb::Status status = db_->Put( | 976 leveldb::Status status = db_->Put( |
859 leveldb::WriteOptions(), | 977 leveldb::WriteOptions(), |
860 CreateKeyForBatchSyncOrigin(origin), | 978 CreateKeyForBatchSyncOrigin(origin), |
861 resource_id); | 979 resource_id); |
862 return LevelDBStatusToSyncStatusCode(status); | 980 return LevelDBStatusToSyncStatusCode(status); |
863 } | 981 } |
864 | 982 |
865 SyncStatusCode DriveMetadataDB::UpdateSyncOriginAsIncremental( | 983 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync( |
866 const GURL& origin, const std::string& resource_id) { | 984 const GURL& origin, const std::string& resource_id) { |
867 DCHECK(CalledOnValidThread()); | 985 DCHECK(CalledOnValidThread()); |
868 DCHECK(db_.get()); | 986 DCHECK(db_.get()); |
869 | 987 |
870 leveldb::WriteBatch batch; | 988 leveldb::WriteBatch batch; |
871 batch.Delete(CreateKeyForBatchSyncOrigin(origin)); | 989 batch.Delete(CreateKeyForBatchSyncOrigin(origin)); |
| 990 batch.Delete(CreateKeyForDisabledOrigin(origin)); |
872 batch.Put(CreateKeyForIncrementalSyncOrigin(origin), resource_id); | 991 batch.Put(CreateKeyForIncrementalSyncOrigin(origin), resource_id); |
873 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); | 992 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
874 | 993 |
875 return LevelDBStatusToSyncStatusCode(status); | 994 return LevelDBStatusToSyncStatusCode(status); |
876 } | 995 } |
877 | 996 |
| 997 SyncStatusCode DriveMetadataDB::EnableOrigin( |
| 998 const GURL& origin, const std::string& resource_id) { |
| 999 DCHECK(CalledOnValidThread()); |
| 1000 DCHECK(db_.get()); |
| 1001 |
| 1002 leveldb::WriteBatch batch; |
| 1003 batch.Delete(CreateKeyForIncrementalSyncOrigin(origin)); |
| 1004 batch.Delete(CreateKeyForDisabledOrigin(origin)); |
| 1005 batch.Put(CreateKeyForBatchSyncOrigin(origin), resource_id); |
| 1006 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
| 1007 |
| 1008 return LevelDBStatusToSyncStatusCode(status); |
| 1009 } |
| 1010 |
| 1011 SyncStatusCode DriveMetadataDB::DisableOrigin( |
| 1012 const GURL& origin_to_disable, const std::string& resource_id) { |
| 1013 DCHECK(CalledOnValidThread()); |
| 1014 DCHECK(db_.get()); |
| 1015 |
| 1016 leveldb::WriteBatch batch; |
| 1017 batch.Delete(CreateKeyForBatchSyncOrigin(origin_to_disable)); |
| 1018 batch.Delete(CreateKeyForIncrementalSyncOrigin(origin_to_disable)); |
| 1019 batch.Put(CreateKeyForDisabledOrigin(origin_to_disable), resource_id); |
| 1020 |
| 1021 // Remove entries specified by |origin_to_disable|. |
| 1022 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
| 1023 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_disable.spec(); |
| 1024 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { |
| 1025 std::string key = itr->key().ToString(); |
| 1026 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) |
| 1027 break; |
| 1028 GURL origin; |
| 1029 base::FilePath path; |
| 1030 MetadataKeyToOriginAndPath(key, &origin, &path); |
| 1031 if (origin != origin_to_disable) |
| 1032 break; |
| 1033 batch.Delete(key); |
| 1034 } |
| 1035 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
| 1036 |
| 1037 return LevelDBStatusToSyncStatusCode(status); |
| 1038 } |
| 1039 |
878 SyncStatusCode DriveMetadataDB::RemoveOrigin(const GURL& origin_to_remove) { | 1040 SyncStatusCode DriveMetadataDB::RemoveOrigin(const GURL& origin_to_remove) { |
879 DCHECK(CalledOnValidThread()); | 1041 DCHECK(CalledOnValidThread()); |
880 | 1042 |
881 leveldb::WriteBatch batch; | 1043 leveldb::WriteBatch batch; |
882 batch.Delete(kDriveBatchSyncOriginKeyPrefix + origin_to_remove.spec()); | 1044 batch.Delete(CreateKeyForBatchSyncOrigin(origin_to_remove)); |
883 batch.Delete(kDriveIncrementalSyncOriginKeyPrefix + origin_to_remove.spec()); | 1045 batch.Delete(CreateKeyForIncrementalSyncOrigin(origin_to_remove)); |
| 1046 batch.Delete(CreateKeyForDisabledOrigin(origin_to_remove)); |
884 | 1047 |
885 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); | 1048 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
886 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_remove.spec(); | 1049 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_remove.spec(); |
887 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { | 1050 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { |
888 std::string key = itr->key().ToString(); | 1051 std::string key = itr->key().ToString(); |
889 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) | 1052 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) |
890 break; | 1053 break; |
891 GURL origin; | 1054 GURL origin; |
892 base::FilePath path; | 1055 base::FilePath path; |
893 MetadataKeyToOriginAndPath(key, &origin, &path); | 1056 MetadataKeyToOriginAndPath(key, &origin, &path); |
894 if (origin != origin_to_remove) | 1057 if (origin != origin_to_remove) |
895 break; | 1058 break; |
896 batch.Delete(key); | 1059 batch.Delete(key); |
897 } | 1060 } |
898 | 1061 |
899 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); | 1062 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
900 return LevelDBStatusToSyncStatusCode(status); | 1063 return LevelDBStatusToSyncStatusCode(status); |
901 } | 1064 } |
902 | 1065 |
903 SyncStatusCode DriveMetadataDB::GetSyncOrigins( | 1066 SyncStatusCode DriveMetadataDB::GetOrigins( |
904 ResourceIdByOrigin* batch_sync_origins, | 1067 ResourceIdByOrigin* batch_sync_origins, |
905 ResourceIdByOrigin* incremental_sync_origins) { | 1068 ResourceIdByOrigin* incremental_sync_origins, |
| 1069 ResourceIdByOrigin* disabled_origins) { |
906 DCHECK(CalledOnValidThread()); | 1070 DCHECK(CalledOnValidThread()); |
907 DCHECK(db_.get()); | 1071 DCHECK(db_.get()); |
908 | 1072 |
909 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); | 1073 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
910 | 1074 |
911 // Get batch sync origins from the DB. | 1075 // Get batch sync origins from the DB. |
912 for (itr->Seek(kDriveBatchSyncOriginKeyPrefix); | 1076 for (itr->Seek(kDriveBatchSyncOriginKeyPrefix); |
913 itr->Valid(); itr->Next()) { | 1077 itr->Valid(); itr->Next()) { |
914 std::string key = itr->key().ToString(); | 1078 std::string key = itr->key().ToString(); |
915 if (!StartsWithASCII(key, kDriveBatchSyncOriginKeyPrefix, true)) | 1079 if (!StartsWithASCII(key, kDriveBatchSyncOriginKeyPrefix, true)) |
(...skipping 15 matching lines...) Expand all Loading... |
931 break; | 1095 break; |
932 GURL origin(std::string( | 1096 GURL origin(std::string( |
933 key.begin() + arraysize(kDriveIncrementalSyncOriginKeyPrefix) - 1, | 1097 key.begin() + arraysize(kDriveIncrementalSyncOriginKeyPrefix) - 1, |
934 key.end())); | 1098 key.end())); |
935 DCHECK(origin.is_valid()); | 1099 DCHECK(origin.is_valid()); |
936 bool result = incremental_sync_origins->insert( | 1100 bool result = incremental_sync_origins->insert( |
937 std::make_pair(origin, itr->value().ToString())).second; | 1101 std::make_pair(origin, itr->value().ToString())).second; |
938 DCHECK(result); | 1102 DCHECK(result); |
939 } | 1103 } |
940 | 1104 |
| 1105 // Get disabled origins from the DB. |
| 1106 for (itr->Seek(kDriveDisabledOriginKeyPrefix); |
| 1107 itr->Valid(); itr->Next()) { |
| 1108 std::string key = itr->key().ToString(); |
| 1109 if (!StartsWithASCII(key, kDriveDisabledOriginKeyPrefix, true)) |
| 1110 break; |
| 1111 GURL origin(std::string( |
| 1112 key.begin() + arraysize(kDriveDisabledOriginKeyPrefix) - 1, |
| 1113 key.end())); |
| 1114 DCHECK(origin.is_valid()); |
| 1115 bool result = disabled_origins->insert( |
| 1116 std::make_pair(origin, itr->value().ToString())).second; |
| 1117 DCHECK(result); |
| 1118 } |
| 1119 |
941 return SYNC_STATUS_OK; | 1120 return SYNC_STATUS_OK; |
942 } | 1121 } |
943 | 1122 |
944 } // namespace sync_file_system | 1123 } // namespace sync_file_system |
OLD | NEW |