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 26 matching lines...) Expand all Loading... |
37 | 37 |
38 const char* const kServiceName = DriveFileSyncService::kServiceName; | 38 const char* const kServiceName = DriveFileSyncService::kServiceName; |
39 const char kDatabaseVersionKey[] = "VERSION"; | 39 const char kDatabaseVersionKey[] = "VERSION"; |
40 const int64 kCurrentDatabaseVersion = 1; | 40 const int64 kCurrentDatabaseVersion = 1; |
41 const char kChangeStampKey[] = "CHANGE_STAMP"; | 41 const char kChangeStampKey[] = "CHANGE_STAMP"; |
42 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; | 42 const char kSyncRootDirectoryKey[] = "SYNC_ROOT_DIR"; |
43 const char kDriveMetadataKeyPrefix[] = "METADATA: "; | 43 const char kDriveMetadataKeyPrefix[] = "METADATA: "; |
44 const char kMetadataKeySeparator = ' '; | 44 const char kMetadataKeySeparator = ' '; |
45 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; | 45 const char kDriveBatchSyncOriginKeyPrefix[] = "BSYNC_ORIGIN: "; |
46 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; | 46 const char kDriveIncrementalSyncOriginKeyPrefix[] = "ISYNC_ORIGIN: "; |
| 47 const char kDriveDisabledOriginKeyPrefix[] = "DISABLED_ORIGIN: "; |
47 const size_t kDriveMetadataKeyPrefixLength = arraysize(kDriveMetadataKeyPrefix); | 48 const size_t kDriveMetadataKeyPrefixLength = arraysize(kDriveMetadataKeyPrefix); |
48 | 49 |
49 const base::FilePath::CharType kV0FormatPathPrefix[] = | 50 const base::FilePath::CharType kV0FormatPathPrefix[] = |
50 FILE_PATH_LITERAL("drive/"); | 51 FILE_PATH_LITERAL("drive/"); |
51 | 52 |
52 bool ParseV0FormatFileSystemURLString(const GURL& url, | 53 bool ParseV0FormatFileSystemURLString(const GURL& url, |
53 GURL* origin, | 54 GURL* origin, |
54 base::FilePath* path) { | 55 base::FilePath* path) { |
55 fileapi::FileSystemType mount_type; | 56 fileapi::FileSystemType mount_type; |
56 base::FilePath virtual_path; | 57 base::FilePath virtual_path; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 SyncStatusCode MigrateDatabaseIfNeeded(); | 105 SyncStatusCode MigrateDatabaseIfNeeded(); |
105 SyncStatusCode MigrateFromVersion0Database(); | 106 SyncStatusCode MigrateFromVersion0Database(); |
106 | 107 |
107 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp); | 108 SyncStatusCode SetLargestChangestamp(int64 largest_changestamp); |
108 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id); | 109 SyncStatusCode SetSyncRootDirectory(const std::string& resource_id); |
109 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); | 110 SyncStatusCode GetSyncRootDirectory(std::string* resource_id); |
110 SyncStatusCode UpdateEntry(const FileSystemURL& url, | 111 SyncStatusCode UpdateEntry(const FileSystemURL& url, |
111 const DriveMetadata& metadata); | 112 const DriveMetadata& metadata); |
112 SyncStatusCode DeleteEntry(const FileSystemURL& url); | 113 SyncStatusCode DeleteEntry(const FileSystemURL& url); |
113 | 114 |
114 SyncStatusCode UpdateSyncOriginAsBatch(const GURL& origin, | 115 // TODO(calvinlo): consolidate these state transition functions for sync |
| 116 // origins like "UpdateOrigin(GURL, SyncStatusEnum)". And manage origins in |
| 117 // just one map like "Map<SyncStatusEnum, ResourceIDMap>". |
| 118 // http://crbug.com/211600 |
| 119 SyncStatusCode UpdateOriginAsBatchSync(const GURL& origin, |
115 const std::string& resource_id); | 120 const std::string& resource_id); |
116 SyncStatusCode UpdateSyncOriginAsIncremental(const GURL& origin, | 121 SyncStatusCode UpdateOriginAsIncrementalSync(const GURL& origin, |
117 const std::string& resource_id); | 122 const std::string& resource_id); |
| 123 SyncStatusCode EnableOrigin(const GURL& origin, |
| 124 const std::string& resource_id); |
| 125 SyncStatusCode DisableOrigin(const GURL& origin, |
| 126 const std::string& resource_id); |
118 SyncStatusCode RemoveOrigin(const GURL& origin); | 127 SyncStatusCode RemoveOrigin(const GURL& origin); |
119 | 128 |
120 SyncStatusCode GetSyncOrigins(ResourceIDMap* batch_sync_origins, | 129 SyncStatusCode GetOrigins(ResourceIDMap* batch_sync_origins, |
121 ResourceIDMap* incremental_sync_origins); | 130 ResourceIDMap* incremental_sync_origins, |
| 131 ResourceIDMap* disabled_origins); |
122 | 132 |
123 private: | 133 private: |
124 bool CalledOnValidThread() const { | 134 bool CalledOnValidThread() const { |
125 return task_runner_->RunsTasksOnCurrentThread(); | 135 return task_runner_->RunsTasksOnCurrentThread(); |
126 } | 136 } |
127 | 137 |
128 scoped_refptr<base::SequencedTaskRunner> task_runner_; | 138 scoped_refptr<base::SequencedTaskRunner> task_runner_; |
129 | 139 |
130 std::string db_path_; | 140 std::string db_path_; |
131 scoped_ptr<leveldb::DB> db_; | 141 scoped_ptr<leveldb::DB> db_; |
132 | 142 |
133 DISALLOW_COPY_AND_ASSIGN(DriveMetadataDB); | 143 DISALLOW_COPY_AND_ASSIGN(DriveMetadataDB); |
134 }; | 144 }; |
135 | 145 |
136 struct DriveMetadataDBContents { | 146 struct DriveMetadataDBContents { |
137 int64 largest_changestamp; | 147 int64 largest_changestamp; |
138 DriveMetadataStore::MetadataMap metadata_map; | 148 DriveMetadataStore::MetadataMap metadata_map; |
139 std::string sync_root_directory_resource_id; | 149 std::string sync_root_directory_resource_id; |
140 DriveMetadataStore::ResourceIDMap batch_sync_origins; | 150 DriveMetadataStore::ResourceIDMap batch_sync_origins; |
141 DriveMetadataStore::ResourceIDMap incremental_sync_origins; | 151 DriveMetadataStore::ResourceIDMap incremental_sync_origins; |
| 152 DriveMetadataStore::ResourceIDMap disabled_origins; |
142 }; | 153 }; |
143 | 154 |
144 namespace { | 155 namespace { |
145 | 156 |
146 SyncStatusCode InitializeDBOnFileThread(DriveMetadataDB* db, | 157 SyncStatusCode InitializeDBOnFileThread(DriveMetadataDB* db, |
147 DriveMetadataDBContents* contents) { | 158 DriveMetadataDBContents* contents) { |
148 DCHECK(db); | 159 DCHECK(db); |
149 DCHECK(contents); | 160 DCHECK(contents); |
150 | 161 |
151 contents->largest_changestamp = 0; | 162 contents->largest_changestamp = 0; |
152 contents->metadata_map.clear(); | 163 contents->metadata_map.clear(); |
153 contents->batch_sync_origins.clear(); | 164 contents->batch_sync_origins.clear(); |
154 contents->incremental_sync_origins.clear(); | 165 contents->incremental_sync_origins.clear(); |
| 166 contents->disabled_origins.clear(); |
155 | 167 |
156 bool created = false; | 168 bool created = false; |
157 SyncStatusCode status = db->Initialize(&created); | 169 SyncStatusCode status = db->Initialize(&created); |
158 if (status != SYNC_STATUS_OK) | 170 if (status != SYNC_STATUS_OK) |
159 return status; | 171 return status; |
160 | 172 |
161 if (!created) { | 173 if (!created) { |
162 status = db->MigrateDatabaseIfNeeded(); | 174 status = db->MigrateDatabaseIfNeeded(); |
163 if (status != SYNC_STATUS_OK) { | 175 if (status != SYNC_STATUS_OK) { |
164 LOG(WARNING) << "Failed to migrate DriveMetadataStore to latest version."; | 176 LOG(WARNING) << "Failed to migrate DriveMetadataStore to latest version."; |
165 return status; | 177 return status; |
166 } | 178 } |
167 } | 179 } |
168 | 180 |
169 return db->ReadContents(contents); | 181 return db->ReadContents(contents); |
170 } | 182 } |
171 | 183 |
172 // Returns a key string for the given batch sync origin. | 184 // Returns a key string for the given batch sync origin. |
173 // For example, when |origin| is "http://www.example.com", | 185 // For example, when |origin| is "http://www.example.com", |
174 // returns "BSYNC_ORIGIN: http://www.example.com". | 186 // returns "BSYNC_ORIGIN: http://www.example.com". |
| 187 // TODO(calvinlo): consolidate these CreateKeyFor* functions. |
| 188 // http://crbug.com/211600 |
175 std::string CreateKeyForBatchSyncOrigin(const GURL& origin) { | 189 std::string CreateKeyForBatchSyncOrigin(const GURL& origin) { |
176 DCHECK(origin.is_valid()); | 190 DCHECK(origin.is_valid()); |
177 return kDriveBatchSyncOriginKeyPrefix + origin.spec(); | 191 return kDriveBatchSyncOriginKeyPrefix + origin.spec(); |
178 } | 192 } |
179 | 193 |
180 // Returns a key string for the given incremental sync origin. | 194 // Returns a key string for the given incremental sync origin. |
181 // For example, when |origin| is "http://www.example.com", | 195 // For example, when |origin| is "http://www.example.com", |
182 // returns "ISYNC_ORIGIN: http://www.example.com". | 196 // returns "ISYNC_ORIGIN: http://www.example.com". |
183 std::string CreateKeyForIncrementalSyncOrigin(const GURL& origin) { | 197 std::string CreateKeyForIncrementalSyncOrigin(const GURL& origin) { |
184 DCHECK(origin.is_valid()); | 198 DCHECK(origin.is_valid()); |
185 return kDriveIncrementalSyncOriginKeyPrefix + origin.spec(); | 199 return kDriveIncrementalSyncOriginKeyPrefix + origin.spec(); |
186 } | 200 } |
187 | 201 |
| 202 // Returns a key string for the given disabled origin. |
| 203 // For example, when |origin| is "http://www.example.com", |
| 204 // returns "DISABLED_ORIGIN: http://www.example.com". |
| 205 std::string CreateKeyForDisabledOrigin(const GURL& origin) { |
| 206 DCHECK(origin.is_valid()); |
| 207 return kDriveDisabledOriginKeyPrefix + origin.spec(); |
| 208 } |
| 209 |
188 void AddOriginsToVector(std::vector<GURL>* all_origins, | 210 void AddOriginsToVector(std::vector<GURL>* all_origins, |
189 const DriveMetadataStore::ResourceIDMap& resource_map) { | 211 const DriveMetadataStore::ResourceIDMap& resource_map) { |
190 typedef DriveMetadataStore::ResourceIDMap::const_iterator itr; | 212 typedef DriveMetadataStore::ResourceIDMap::const_iterator itr; |
191 for (std::map<GURL, std::string>::const_iterator itr = resource_map.begin(); | 213 for (std::map<GURL, std::string>::const_iterator itr = resource_map.begin(); |
192 itr != resource_map.end(); | 214 itr != resource_map.end(); |
193 ++itr) { | 215 ++itr) { |
194 all_origins->push_back(itr->first); | 216 all_origins->push_back(itr->first); |
195 } | 217 } |
196 } | 218 } |
197 | 219 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 if (status != SYNC_STATUS_OK) { | 255 if (status != SYNC_STATUS_OK) { |
234 callback.Run(status, false); | 256 callback.Run(status, false); |
235 return; | 257 return; |
236 } | 258 } |
237 | 259 |
238 largest_changestamp_ = contents->largest_changestamp; | 260 largest_changestamp_ = contents->largest_changestamp; |
239 metadata_map_.swap(contents->metadata_map); | 261 metadata_map_.swap(contents->metadata_map); |
240 sync_root_directory_resource_id_ = contents->sync_root_directory_resource_id; | 262 sync_root_directory_resource_id_ = contents->sync_root_directory_resource_id; |
241 batch_sync_origins_.swap(contents->batch_sync_origins); | 263 batch_sync_origins_.swap(contents->batch_sync_origins); |
242 incremental_sync_origins_.swap(contents->incremental_sync_origins); | 264 incremental_sync_origins_.swap(contents->incremental_sync_origins); |
| 265 disabled_origins_.swap(contents->disabled_origins); |
243 // |largest_changestamp_| is set to 0 for a fresh empty database. | 266 // |largest_changestamp_| is set to 0 for a fresh empty database. |
244 callback.Run(status, largest_changestamp_ <= 0); | 267 callback.Run(status, largest_changestamp_ <= 0); |
245 } | 268 } |
246 | 269 |
247 void DriveMetadataStore::RestoreSyncRootDirectory( | 270 void DriveMetadataStore::RestoreSyncRootDirectory( |
248 const SyncStatusCallback& callback) { | 271 const SyncStatusCallback& callback) { |
249 DCHECK(CalledOnValidThread()); | 272 DCHECK(CalledOnValidThread()); |
250 std::string* sync_root_directory_resource_id = new std::string; | 273 std::string* sync_root_directory_resource_id = new std::string; |
251 base::PostTaskAndReplyWithResult( | 274 base::PostTaskAndReplyWithResult( |
252 file_task_runner_, FROM_HERE, | 275 file_task_runner_, FROM_HERE, |
(...skipping 15 matching lines...) Expand all Loading... |
268 db_status_ = status; | 291 db_status_ = status; |
269 if (status != SYNC_STATUS_OK) { | 292 if (status != SYNC_STATUS_OK) { |
270 callback.Run(status); | 293 callback.Run(status); |
271 return; | 294 return; |
272 } | 295 } |
273 | 296 |
274 sync_root_directory_resource_id_.swap(*sync_root_directory_resource_id); | 297 sync_root_directory_resource_id_.swap(*sync_root_directory_resource_id); |
275 callback.Run(status); | 298 callback.Run(status); |
276 } | 299 } |
277 | 300 |
278 void DriveMetadataStore::RestoreSyncOrigins( | 301 void DriveMetadataStore::RestoreOrigins( |
279 const SyncStatusCallback& callback) { | 302 const SyncStatusCallback& callback) { |
280 DCHECK(CalledOnValidThread()); | 303 DCHECK(CalledOnValidThread()); |
281 ResourceIDMap* batch_sync_origins = new ResourceIDMap; | 304 ResourceIDMap* batch_sync_origins = new ResourceIDMap; |
282 ResourceIDMap* incremental_sync_origins = new ResourceIDMap; | 305 ResourceIDMap* incremental_sync_origins = new ResourceIDMap; |
| 306 ResourceIDMap* disabled_origins = new ResourceIDMap; |
283 base::PostTaskAndReplyWithResult( | 307 base::PostTaskAndReplyWithResult( |
284 file_task_runner_, FROM_HERE, | 308 file_task_runner_, FROM_HERE, |
285 base::Bind(&DriveMetadataDB::GetSyncOrigins, | 309 base::Bind(&DriveMetadataDB::GetOrigins, |
286 base::Unretained(db_.get()), | 310 base::Unretained(db_.get()), |
287 batch_sync_origins, | 311 batch_sync_origins, |
288 incremental_sync_origins), | 312 incremental_sync_origins, |
289 base::Bind(&DriveMetadataStore::DidRestoreSyncOrigins, | 313 disabled_origins), |
| 314 base::Bind(&DriveMetadataStore::DidRestoreOrigins, |
290 AsWeakPtr(), callback, | 315 AsWeakPtr(), callback, |
291 base::Owned(batch_sync_origins), | 316 base::Owned(batch_sync_origins), |
292 base::Owned(incremental_sync_origins))); | 317 base::Owned(incremental_sync_origins), |
| 318 base::Owned(disabled_origins))); |
293 } | 319 } |
294 | 320 |
295 void DriveMetadataStore::DidRestoreSyncOrigins( | 321 void DriveMetadataStore::DidRestoreOrigins( |
296 const SyncStatusCallback& callback, | 322 const SyncStatusCallback& callback, |
297 ResourceIDMap* batch_sync_origins, | 323 ResourceIDMap* batch_sync_origins, |
298 ResourceIDMap* incremental_sync_origins, | 324 ResourceIDMap* incremental_sync_origins, |
| 325 ResourceIDMap* disabled_origins, |
299 SyncStatusCode status) { | 326 SyncStatusCode status) { |
300 DCHECK(CalledOnValidThread()); | 327 DCHECK(CalledOnValidThread()); |
301 DCHECK(batch_sync_origins); | 328 DCHECK(batch_sync_origins); |
302 DCHECK(incremental_sync_origins); | 329 DCHECK(incremental_sync_origins); |
| 330 DCHECK(disabled_origins); |
303 | 331 |
304 db_status_ = status; | 332 db_status_ = status; |
305 if (status != SYNC_STATUS_OK) { | 333 if (status != SYNC_STATUS_OK) { |
306 callback.Run(status); | 334 callback.Run(status); |
307 return; | 335 return; |
308 } | 336 } |
309 | 337 |
310 batch_sync_origins_.swap(*batch_sync_origins); | 338 batch_sync_origins_.swap(*batch_sync_origins); |
311 incremental_sync_origins_.swap(*incremental_sync_origins); | 339 incremental_sync_origins_.swap(*incremental_sync_origins); |
| 340 disabled_origins_.swap(*disabled_origins); |
312 callback.Run(status); | 341 callback.Run(status); |
313 } | 342 } |
314 | 343 |
315 void DriveMetadataStore::SetLargestChangeStamp( | 344 void DriveMetadataStore::SetLargestChangeStamp( |
316 int64 largest_changestamp, | 345 int64 largest_changestamp, |
317 const SyncStatusCallback& callback) { | 346 const SyncStatusCallback& callback) { |
318 DCHECK(CalledOnValidThread()); | 347 DCHECK(CalledOnValidThread()); |
319 DCHECK_EQ(SYNC_STATUS_OK, db_status_); | 348 DCHECK_EQ(SYNC_STATUS_OK, db_status_); |
320 largest_changestamp_ = largest_changestamp; | 349 largest_changestamp_ = largest_changestamp; |
321 base::PostTaskAndReplyWithResult( | 350 base::PostTaskAndReplyWithResult( |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
413 bool DriveMetadataStore::IsBatchSyncOrigin(const GURL& origin) const { | 442 bool DriveMetadataStore::IsBatchSyncOrigin(const GURL& origin) const { |
414 DCHECK(CalledOnValidThread()); | 443 DCHECK(CalledOnValidThread()); |
415 return ContainsKey(batch_sync_origins_, origin); | 444 return ContainsKey(batch_sync_origins_, origin); |
416 } | 445 } |
417 | 446 |
418 bool DriveMetadataStore::IsIncrementalSyncOrigin(const GURL& origin) const { | 447 bool DriveMetadataStore::IsIncrementalSyncOrigin(const GURL& origin) const { |
419 DCHECK(CalledOnValidThread()); | 448 DCHECK(CalledOnValidThread()); |
420 return ContainsKey(incremental_sync_origins_, origin); | 449 return ContainsKey(incremental_sync_origins_, origin); |
421 } | 450 } |
422 | 451 |
| 452 bool DriveMetadataStore::IsOriginDisabled(const GURL& origin) const { |
| 453 DCHECK(CalledOnValidThread()); |
| 454 return ContainsKey(disabled_origins_, origin); |
| 455 } |
| 456 |
423 void DriveMetadataStore::AddBatchSyncOrigin(const GURL& origin, | 457 void DriveMetadataStore::AddBatchSyncOrigin(const GURL& origin, |
424 const std::string& resource_id) { | 458 const std::string& resource_id) { |
425 DCHECK(CalledOnValidThread()); | 459 DCHECK(CalledOnValidThread()); |
426 DCHECK(!IsBatchSyncOrigin(origin)); | 460 DCHECK(!IsBatchSyncOrigin(origin)); |
427 DCHECK(!IsIncrementalSyncOrigin(origin)); | 461 DCHECK(!IsIncrementalSyncOrigin(origin)); |
| 462 DCHECK(!IsOriginDisabled(origin)); |
428 DCHECK_EQ(SYNC_STATUS_OK, db_status_); | 463 DCHECK_EQ(SYNC_STATUS_OK, db_status_); |
429 | 464 |
430 batch_sync_origins_.insert(std::make_pair(origin, resource_id)); | 465 batch_sync_origins_.insert(std::make_pair(origin, resource_id)); |
431 | 466 |
432 // Store a pair of |origin| and |resource_id| in the DB. | 467 // Store a pair of |origin| and |resource_id| in the DB. |
433 base::PostTaskAndReplyWithResult( | 468 base::PostTaskAndReplyWithResult( |
434 file_task_runner_, FROM_HERE, | 469 file_task_runner_, FROM_HERE, |
435 base::Bind(&DriveMetadataDB::UpdateSyncOriginAsBatch, | 470 base::Bind(&DriveMetadataDB::UpdateOriginAsBatchSync, |
436 base::Unretained(db_.get()), origin, resource_id), | 471 base::Unretained(db_.get()), origin, resource_id), |
437 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); | 472 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); |
438 } | 473 } |
439 | 474 |
440 void DriveMetadataStore::MoveBatchSyncOriginToIncremental(const GURL& origin) { | 475 void DriveMetadataStore::MoveBatchSyncOriginToIncremental(const GURL& origin) { |
441 DCHECK(CalledOnValidThread()); | 476 DCHECK(CalledOnValidThread()); |
442 DCHECK(IsBatchSyncOrigin(origin)); | 477 DCHECK(IsBatchSyncOrigin(origin)); |
443 DCHECK(!IsIncrementalSyncOrigin(origin)); | 478 DCHECK(!IsIncrementalSyncOrigin(origin)); |
| 479 DCHECK(!IsOriginDisabled(origin)); |
444 DCHECK_EQ(SYNC_STATUS_OK, db_status_); | 480 DCHECK_EQ(SYNC_STATUS_OK, db_status_); |
445 | 481 |
446 std::map<GURL, std::string>::iterator found = | 482 std::map<GURL, std::string>::iterator found = |
447 batch_sync_origins_.find(origin); | 483 batch_sync_origins_.find(origin); |
448 incremental_sync_origins_.insert(std::make_pair(origin, found->second)); | 484 incremental_sync_origins_.insert(std::make_pair(origin, found->second)); |
449 | 485 |
450 // Store a pair of |origin| and |resource_id| in the DB. | 486 // Store a pair of |origin| and |resource_id| in the DB. |
451 base::PostTaskAndReplyWithResult( | 487 base::PostTaskAndReplyWithResult( |
452 file_task_runner_, FROM_HERE, | 488 file_task_runner_, FROM_HERE, |
453 base::Bind(&DriveMetadataDB::UpdateSyncOriginAsIncremental, | 489 base::Bind(&DriveMetadataDB::UpdateOriginAsIncrementalSync, |
454 base::Unretained(db_.get()), origin, found->second), | 490 base::Unretained(db_.get()), origin, found->second), |
455 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); | 491 base::Bind(&DriveMetadataStore::UpdateDBStatus, AsWeakPtr())); |
456 | 492 |
457 batch_sync_origins_.erase(found); | 493 batch_sync_origins_.erase(found); |
458 } | 494 } |
459 | 495 |
| 496 void DriveMetadataStore::EnableOrigin( |
| 497 const GURL& origin, |
| 498 const SyncStatusCallback& callback) { |
| 499 DCHECK(CalledOnValidThread()); |
| 500 |
| 501 std::map<GURL, std::string>::iterator found = disabled_origins_.find(origin); |
| 502 if (found == disabled_origins_.end()) { |
| 503 // |origin| has not been registered yet. |
| 504 return; |
| 505 } |
| 506 std::string resource_id = found->second; |
| 507 disabled_origins_.erase(found); |
| 508 |
| 509 // Ensure |origin| is marked as a batch sync origin. |
| 510 batch_sync_origins_.insert(std::make_pair(origin, resource_id)); |
| 511 found = incremental_sync_origins_.find(origin); |
| 512 if (found != incremental_sync_origins_.end()) |
| 513 incremental_sync_origins_.erase(found); |
| 514 |
| 515 // Store a pair of |origin| and |resource_id| in the DB. |
| 516 base::PostTaskAndReplyWithResult( |
| 517 file_task_runner_, FROM_HERE, |
| 518 base::Bind(&DriveMetadataDB::EnableOrigin, |
| 519 base::Unretained(db_.get()), origin, resource_id), |
| 520 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); |
| 521 } |
| 522 |
| 523 void DriveMetadataStore::DisableOrigin( |
| 524 const GURL& origin, |
| 525 const SyncStatusCallback& callback) { |
| 526 DCHECK(CalledOnValidThread()); |
| 527 |
| 528 std::string resource_id; |
| 529 std::map<GURL, std::string>::iterator found = |
| 530 batch_sync_origins_.find(origin); |
| 531 if (found != batch_sync_origins_.end()) { |
| 532 resource_id = found->second; |
| 533 batch_sync_origins_.erase(found); |
| 534 } |
| 535 |
| 536 found = incremental_sync_origins_.find(origin); |
| 537 if (found != incremental_sync_origins_.end()) { |
| 538 resource_id = found->second; |
| 539 incremental_sync_origins_.erase(found); |
| 540 } |
| 541 |
| 542 if (resource_id.empty()) { |
| 543 // |origin| has not been registered yet. |
| 544 return; |
| 545 } |
| 546 |
| 547 disabled_origins_.insert(std::make_pair(origin, resource_id)); |
| 548 |
| 549 // Store a pair of |origin| and |resource_id| in the DB. |
| 550 base::PostTaskAndReplyWithResult( |
| 551 file_task_runner_, FROM_HERE, |
| 552 base::Bind(&DriveMetadataDB::DisableOrigin, |
| 553 base::Unretained(db_.get()), origin, resource_id), |
| 554 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); |
| 555 } |
| 556 |
460 void DriveMetadataStore::RemoveOrigin( | 557 void DriveMetadataStore::RemoveOrigin( |
461 const GURL& origin, | 558 const GURL& origin, |
462 const SyncStatusCallback& callback) { | 559 const SyncStatusCallback& callback) { |
463 DCHECK(CalledOnValidThread()); | 560 DCHECK(CalledOnValidThread()); |
464 | 561 |
465 metadata_map_.erase(origin); | 562 metadata_map_.erase(origin); |
466 batch_sync_origins_.erase(origin); | 563 batch_sync_origins_.erase(origin); |
467 incremental_sync_origins_.erase(origin); | 564 incremental_sync_origins_.erase(origin); |
| 565 disabled_origins_.erase(origin); |
468 | 566 |
469 base::PostTaskAndReplyWithResult( | 567 base::PostTaskAndReplyWithResult( |
470 file_task_runner_, FROM_HERE, | 568 file_task_runner_, FROM_HERE, |
471 base::Bind(&DriveMetadataDB::RemoveOrigin, | 569 base::Bind(&DriveMetadataDB::RemoveOrigin, |
472 base::Unretained(db_.get()), origin), | 570 base::Unretained(db_.get()), origin), |
473 base::Bind(&DriveMetadataStore::DidRemoveOrigin, AsWeakPtr(), callback)); | 571 base::Bind(&DriveMetadataStore::DidUpdateOrigin, AsWeakPtr(), callback)); |
474 } | 572 } |
475 | 573 |
476 void DriveMetadataStore::DidRemoveOrigin( | 574 void DriveMetadataStore::DidUpdateOrigin( |
477 const SyncStatusCallback& callback, | 575 const SyncStatusCallback& callback, |
478 SyncStatusCode status) { | 576 SyncStatusCode status) { |
479 UpdateDBStatus(status); | 577 UpdateDBStatus(status); |
480 callback.Run(status); | 578 callback.Run(status); |
481 } | 579 } |
482 | 580 |
483 void DriveMetadataStore::UpdateDBStatus(SyncStatusCode status) { | 581 void DriveMetadataStore::UpdateDBStatus(SyncStatusCode status) { |
484 DCHECK(CalledOnValidThread()); | 582 DCHECK(CalledOnValidThread()); |
485 if (db_status_ != SYNC_STATUS_OK && | 583 if (db_status_ != SYNC_STATUS_OK && |
486 db_status_ != SYNC_DATABASE_ERROR_NOT_FOUND) { | 584 db_status_ != SYNC_DATABASE_ERROR_NOT_FOUND) { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
538 list->push_back(std::make_pair(url, itr->second.resource_id())); | 636 list->push_back(std::make_pair(url, itr->second.resource_id())); |
539 } | 637 } |
540 } | 638 } |
541 } | 639 } |
542 return SYNC_STATUS_OK; | 640 return SYNC_STATUS_OK; |
543 } | 641 } |
544 | 642 |
545 std::string DriveMetadataStore::GetResourceIdForOrigin( | 643 std::string DriveMetadataStore::GetResourceIdForOrigin( |
546 const GURL& origin) const { | 644 const GURL& origin) const { |
547 DCHECK(CalledOnValidThread()); | 645 DCHECK(CalledOnValidThread()); |
548 DCHECK(IsBatchSyncOrigin(origin) || IsIncrementalSyncOrigin(origin)); | 646 DCHECK(IsBatchSyncOrigin(origin) || |
| 647 IsIncrementalSyncOrigin(origin) || |
| 648 IsOriginDisabled(origin)); |
549 | 649 |
550 ResourceIDMap::const_iterator found = incremental_sync_origins_.find(origin); | 650 ResourceIDMap::const_iterator found = incremental_sync_origins_.find(origin); |
551 if (found != incremental_sync_origins_.end()) | 651 if (found != incremental_sync_origins_.end()) |
552 return found->second; | 652 return found->second; |
553 | 653 |
554 found = batch_sync_origins_.find(origin); | 654 found = batch_sync_origins_.find(origin); |
555 if (found != batch_sync_origins_.end()) | 655 if (found != batch_sync_origins_.end()) |
556 return found->second; | 656 return found->second; |
557 | 657 |
| 658 found = disabled_origins_.find(origin); |
| 659 if (found != disabled_origins_.end()) |
| 660 return found->second; |
| 661 |
558 NOTREACHED(); | 662 NOTREACHED(); |
559 return std::string(); | 663 return std::string(); |
560 } | 664 } |
561 | 665 |
562 void DriveMetadataStore::GetAllOrigins(std::vector<GURL>* origins) { | 666 void DriveMetadataStore::GetEnabledOrigins(std::vector<GURL>* origins) { |
| 667 origins->clear(); |
563 origins->reserve(batch_sync_origins_.size() + | 668 origins->reserve(batch_sync_origins_.size() + |
564 incremental_sync_origins_.size()); | 669 incremental_sync_origins_.size()); |
565 AddOriginsToVector(origins, batch_sync_origins_); | 670 AddOriginsToVector(origins, batch_sync_origins_); |
566 AddOriginsToVector(origins, incremental_sync_origins_); | 671 AddOriginsToVector(origins, incremental_sync_origins_); |
567 } | 672 } |
568 | 673 |
| 674 void DriveMetadataStore::GetDisabledOrigins(std::vector<GURL>* origins) { |
| 675 origins->clear(); |
| 676 origins->reserve(disabled_origins_.size()); |
| 677 AddOriginsToVector(origins, disabled_origins_); |
| 678 } |
| 679 |
569 //////////////////////////////////////////////////////////////////////////////// | 680 //////////////////////////////////////////////////////////////////////////////// |
570 | 681 |
571 DriveMetadataDB::DriveMetadataDB(const base::FilePath& base_dir, | 682 DriveMetadataDB::DriveMetadataDB(const base::FilePath& base_dir, |
572 base::SequencedTaskRunner* task_runner) | 683 base::SequencedTaskRunner* task_runner) |
573 : task_runner_(task_runner), | 684 : task_runner_(task_runner), |
574 db_path_(fileapi::FilePathToString( | 685 db_path_(fileapi::FilePathToString( |
575 base_dir.Append(DriveMetadataStore::kDatabaseName))) { | 686 base_dir.Append(DriveMetadataStore::kDatabaseName))) { |
576 } | 687 } |
577 | 688 |
578 DriveMetadataDB::~DriveMetadataDB() { | 689 DriveMetadataDB::~DriveMetadataDB() { |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
638 DriveMetadata metadata; | 749 DriveMetadata metadata; |
639 bool success = metadata.ParseFromString(itr->value().ToString()); | 750 bool success = metadata.ParseFromString(itr->value().ToString()); |
640 DCHECK(success); | 751 DCHECK(success); |
641 | 752 |
642 success = contents->metadata_map[origin].insert( | 753 success = contents->metadata_map[origin].insert( |
643 std::make_pair(path, metadata)).second; | 754 std::make_pair(path, metadata)).second; |
644 DCHECK(success); | 755 DCHECK(success); |
645 } | 756 } |
646 } | 757 } |
647 | 758 |
648 SyncStatusCode status = GetSyncOrigins(&contents->batch_sync_origins, | 759 SyncStatusCode status = GetOrigins(&contents->batch_sync_origins, |
649 &contents->incremental_sync_origins); | 760 &contents->incremental_sync_origins, |
| 761 &contents->disabled_origins); |
650 if (status != SYNC_STATUS_OK && | 762 if (status != SYNC_STATUS_OK && |
651 status != SYNC_DATABASE_ERROR_NOT_FOUND) | 763 status != SYNC_DATABASE_ERROR_NOT_FOUND) |
652 return status; | 764 return status; |
653 | 765 |
654 status = GetSyncRootDirectory(&contents->sync_root_directory_resource_id); | 766 status = GetSyncRootDirectory(&contents->sync_root_directory_resource_id); |
655 if (status != SYNC_STATUS_OK && | 767 if (status != SYNC_STATUS_OK && |
656 status != SYNC_DATABASE_ERROR_NOT_FOUND) | 768 status != SYNC_DATABASE_ERROR_NOT_FOUND) |
657 return status; | 769 return status; |
658 | 770 |
659 return SYNC_STATUS_OK; | 771 return SYNC_STATUS_OK; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 // value: <Resource ID of the sync root directory> | 823 // value: <Resource ID of the sync root directory> |
712 // | 824 // |
713 // * key: "METADATA: " + <Origin and URL> (changed) | 825 // * key: "METADATA: " + <Origin and URL> (changed) |
714 // * value: <Serialized DriveMetadata> | 826 // * value: <Serialized DriveMetadata> |
715 // | 827 // |
716 // key: "BSYNC_ORIGIN: " + <URL string of a batch sync origin> | 828 // key: "BSYNC_ORIGIN: " + <URL string of a batch sync origin> |
717 // value: <Resource ID of the drive directory for the origin> | 829 // value: <Resource ID of the drive directory for the origin> |
718 // | 830 // |
719 // key: "ISYNC_ORIGIN: " + <URL string of a incremental sync origin> | 831 // key: "ISYNC_ORIGIN: " + <URL string of a incremental sync origin> |
720 // value: <Resource ID of the drive directory for the origin> | 832 // value: <Resource ID of the drive directory for the origin> |
| 833 // |
| 834 // key: "DISABLED_ORIGIN: " + <URL string of a disabled origin> |
| 835 // value: <Resource ID of the drive directory for the origin> |
721 | 836 |
722 leveldb::WriteBatch write_batch; | 837 leveldb::WriteBatch write_batch; |
723 write_batch.Put(kDatabaseVersionKey, | 838 write_batch.Put(kDatabaseVersionKey, |
724 base::Int64ToString(kCurrentDatabaseVersion)); | 839 base::Int64ToString(kCurrentDatabaseVersion)); |
725 | 840 |
726 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); | 841 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
727 for (itr->Seek(kDriveMetadataKeyPrefix); itr->Valid(); itr->Next()) { | 842 for (itr->Seek(kDriveMetadataKeyPrefix); itr->Valid(); itr->Next()) { |
728 std::string key = itr->key().ToString(); | 843 std::string key = itr->key().ToString(); |
729 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) | 844 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) |
730 break; | 845 break; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
794 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) { | 909 SyncStatusCode DriveMetadataDB::DeleteEntry(const FileSystemURL& url) { |
795 DCHECK(CalledOnValidThread()); | 910 DCHECK(CalledOnValidThread()); |
796 DCHECK(db_.get()); | 911 DCHECK(db_.get()); |
797 | 912 |
798 std::string metadata_key = FileSystemURLToMetadataKey(url); | 913 std::string metadata_key = FileSystemURLToMetadataKey(url); |
799 leveldb::Status status = db_->Delete( | 914 leveldb::Status status = db_->Delete( |
800 leveldb::WriteOptions(), metadata_key); | 915 leveldb::WriteOptions(), metadata_key); |
801 return LevelDBStatusToSyncStatusCode(status); | 916 return LevelDBStatusToSyncStatusCode(status); |
802 } | 917 } |
803 | 918 |
804 SyncStatusCode DriveMetadataDB::UpdateSyncOriginAsBatch( | 919 SyncStatusCode DriveMetadataDB::UpdateOriginAsBatchSync( |
805 const GURL& origin, const std::string& resource_id) { | 920 const GURL& origin, const std::string& resource_id) { |
806 DCHECK(CalledOnValidThread()); | 921 DCHECK(CalledOnValidThread()); |
807 DCHECK(db_.get()); | 922 DCHECK(db_.get()); |
808 | 923 |
809 leveldb::Status status = db_->Put( | 924 leveldb::Status status = db_->Put( |
810 leveldb::WriteOptions(), | 925 leveldb::WriteOptions(), |
811 CreateKeyForBatchSyncOrigin(origin), | 926 CreateKeyForBatchSyncOrigin(origin), |
812 resource_id); | 927 resource_id); |
813 return LevelDBStatusToSyncStatusCode(status); | 928 return LevelDBStatusToSyncStatusCode(status); |
814 } | 929 } |
815 | 930 |
816 SyncStatusCode DriveMetadataDB::UpdateSyncOriginAsIncremental( | 931 SyncStatusCode DriveMetadataDB::UpdateOriginAsIncrementalSync( |
817 const GURL& origin, const std::string& resource_id) { | 932 const GURL& origin, const std::string& resource_id) { |
818 DCHECK(CalledOnValidThread()); | 933 DCHECK(CalledOnValidThread()); |
819 DCHECK(db_.get()); | 934 DCHECK(db_.get()); |
820 | 935 |
821 leveldb::WriteBatch batch; | 936 leveldb::WriteBatch batch; |
822 batch.Delete(CreateKeyForBatchSyncOrigin(origin)); | 937 batch.Delete(CreateKeyForBatchSyncOrigin(origin)); |
| 938 batch.Delete(CreateKeyForDisabledOrigin(origin)); |
823 batch.Put(CreateKeyForIncrementalSyncOrigin(origin), resource_id); | 939 batch.Put(CreateKeyForIncrementalSyncOrigin(origin), resource_id); |
824 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); | 940 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
825 | 941 |
826 return LevelDBStatusToSyncStatusCode(status); | 942 return LevelDBStatusToSyncStatusCode(status); |
827 } | 943 } |
828 | 944 |
| 945 SyncStatusCode DriveMetadataDB::EnableOrigin( |
| 946 const GURL& origin, const std::string& resource_id) { |
| 947 DCHECK(CalledOnValidThread()); |
| 948 DCHECK(db_.get()); |
| 949 |
| 950 leveldb::WriteBatch batch; |
| 951 batch.Delete(CreateKeyForIncrementalSyncOrigin(origin)); |
| 952 batch.Delete(CreateKeyForDisabledOrigin(origin)); |
| 953 batch.Put(CreateKeyForBatchSyncOrigin(origin), resource_id); |
| 954 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
| 955 |
| 956 return LevelDBStatusToSyncStatusCode(status); |
| 957 } |
| 958 |
| 959 SyncStatusCode DriveMetadataDB::DisableOrigin( |
| 960 const GURL& origin_to_disable, const std::string& resource_id) { |
| 961 DCHECK(CalledOnValidThread()); |
| 962 DCHECK(db_.get()); |
| 963 |
| 964 leveldb::WriteBatch batch; |
| 965 batch.Delete(CreateKeyForBatchSyncOrigin(origin_to_disable)); |
| 966 batch.Delete(CreateKeyForIncrementalSyncOrigin(origin_to_disable)); |
| 967 batch.Put(CreateKeyForDisabledOrigin(origin_to_disable), resource_id); |
| 968 |
| 969 // Remove entries specified by |origin_to_disable|. |
| 970 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
| 971 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_disable.spec(); |
| 972 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { |
| 973 std::string key = itr->key().ToString(); |
| 974 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) |
| 975 break; |
| 976 GURL origin; |
| 977 base::FilePath path; |
| 978 MetadataKeyToOriginAndPath(key, &origin, &path); |
| 979 if (origin != origin_to_disable) |
| 980 break; |
| 981 batch.Delete(key); |
| 982 } |
| 983 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
| 984 |
| 985 return LevelDBStatusToSyncStatusCode(status); |
| 986 } |
| 987 |
829 SyncStatusCode DriveMetadataDB::RemoveOrigin(const GURL& origin_to_remove) { | 988 SyncStatusCode DriveMetadataDB::RemoveOrigin(const GURL& origin_to_remove) { |
830 DCHECK(CalledOnValidThread()); | 989 DCHECK(CalledOnValidThread()); |
831 | 990 |
832 leveldb::WriteBatch batch; | 991 leveldb::WriteBatch batch; |
833 batch.Delete(kDriveBatchSyncOriginKeyPrefix + origin_to_remove.spec()); | 992 batch.Delete(CreateKeyForBatchSyncOrigin(origin_to_remove)); |
834 batch.Delete(kDriveIncrementalSyncOriginKeyPrefix + origin_to_remove.spec()); | 993 batch.Delete(CreateKeyForIncrementalSyncOrigin(origin_to_remove)); |
| 994 batch.Delete(CreateKeyForDisabledOrigin(origin_to_remove)); |
835 | 995 |
836 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); | 996 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
837 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_remove.spec(); | 997 std::string metadata_key = kDriveMetadataKeyPrefix + origin_to_remove.spec(); |
838 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { | 998 for (itr->Seek(metadata_key); itr->Valid(); itr->Next()) { |
839 std::string key = itr->key().ToString(); | 999 std::string key = itr->key().ToString(); |
840 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) | 1000 if (!StartsWithASCII(key, kDriveMetadataKeyPrefix, true)) |
841 break; | 1001 break; |
842 GURL origin; | 1002 GURL origin; |
843 base::FilePath path; | 1003 base::FilePath path; |
844 MetadataKeyToOriginAndPath(key, &origin, &path); | 1004 MetadataKeyToOriginAndPath(key, &origin, &path); |
845 if (origin != origin_to_remove) | 1005 if (origin != origin_to_remove) |
846 break; | 1006 break; |
847 batch.Delete(key); | 1007 batch.Delete(key); |
848 } | 1008 } |
849 | 1009 |
850 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); | 1010 leveldb::Status status = db_->Write(leveldb::WriteOptions(), &batch); |
851 return LevelDBStatusToSyncStatusCode(status); | 1011 return LevelDBStatusToSyncStatusCode(status); |
852 } | 1012 } |
853 | 1013 |
854 SyncStatusCode DriveMetadataDB::GetSyncOrigins( | 1014 SyncStatusCode DriveMetadataDB::GetOrigins( |
855 ResourceIDMap* batch_sync_origins, | 1015 ResourceIDMap* batch_sync_origins, |
856 ResourceIDMap* incremental_sync_origins) { | 1016 ResourceIDMap* incremental_sync_origins, |
| 1017 ResourceIDMap* disabled_origins) { |
857 DCHECK(CalledOnValidThread()); | 1018 DCHECK(CalledOnValidThread()); |
858 DCHECK(db_.get()); | 1019 DCHECK(db_.get()); |
859 | 1020 |
860 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); | 1021 scoped_ptr<leveldb::Iterator> itr(db_->NewIterator(leveldb::ReadOptions())); |
861 | 1022 |
862 // Get batch sync origins from the DB. | 1023 // Get batch sync origins from the DB. |
863 for (itr->Seek(kDriveBatchSyncOriginKeyPrefix); | 1024 for (itr->Seek(kDriveBatchSyncOriginKeyPrefix); |
864 itr->Valid(); itr->Next()) { | 1025 itr->Valid(); itr->Next()) { |
865 std::string key = itr->key().ToString(); | 1026 std::string key = itr->key().ToString(); |
866 if (!StartsWithASCII(key, kDriveBatchSyncOriginKeyPrefix, true)) | 1027 if (!StartsWithASCII(key, kDriveBatchSyncOriginKeyPrefix, true)) |
(...skipping 15 matching lines...) Expand all Loading... |
882 break; | 1043 break; |
883 GURL origin(std::string( | 1044 GURL origin(std::string( |
884 key.begin() + arraysize(kDriveIncrementalSyncOriginKeyPrefix) - 1, | 1045 key.begin() + arraysize(kDriveIncrementalSyncOriginKeyPrefix) - 1, |
885 key.end())); | 1046 key.end())); |
886 DCHECK(origin.is_valid()); | 1047 DCHECK(origin.is_valid()); |
887 bool result = incremental_sync_origins->insert( | 1048 bool result = incremental_sync_origins->insert( |
888 std::make_pair(origin, itr->value().ToString())).second; | 1049 std::make_pair(origin, itr->value().ToString())).second; |
889 DCHECK(result); | 1050 DCHECK(result); |
890 } | 1051 } |
891 | 1052 |
| 1053 // Get disabled origins from the DB. |
| 1054 for (itr->Seek(kDriveDisabledOriginKeyPrefix); |
| 1055 itr->Valid(); itr->Next()) { |
| 1056 std::string key = itr->key().ToString(); |
| 1057 if (!StartsWithASCII(key, kDriveDisabledOriginKeyPrefix, true)) |
| 1058 break; |
| 1059 GURL origin(std::string( |
| 1060 key.begin() + arraysize(kDriveDisabledOriginKeyPrefix) - 1, |
| 1061 key.end())); |
| 1062 DCHECK(origin.is_valid()); |
| 1063 bool result = disabled_origins->insert( |
| 1064 std::make_pair(origin, itr->value().ToString())).second; |
| 1065 DCHECK(result); |
| 1066 } |
| 1067 |
892 return SYNC_STATUS_OK; | 1068 return SYNC_STATUS_OK; |
893 } | 1069 } |
894 | 1070 |
895 } // namespace sync_file_system | 1071 } // namespace sync_file_system |
OLD | NEW |