| 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/chromeos/drive/resource_metadata.h" | 5 #include "chrome/browser/chromeos/drive/resource_metadata.h" |
| 6 | 6 |
| 7 #include "base/strings/string_number_conversions.h" | 7 #include "base/strings/string_number_conversions.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "base/sys_info.h" | 9 #include "base/sys_info.h" |
| 10 #include "chrome/browser/chromeos/drive/drive.pb.h" | 10 #include "chrome/browser/chromeos/drive/drive.pb.h" |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 storage_(new ResourceMetadataStorage(data_directory_path)), | 132 storage_(new ResourceMetadataStorage(data_directory_path)), |
| 133 weak_ptr_factory_(this) { | 133 weak_ptr_factory_(this) { |
| 134 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 134 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 135 } | 135 } |
| 136 | 136 |
| 137 void ResourceMetadata::Initialize(const FileOperationCallback& callback) { | 137 void ResourceMetadata::Initialize(const FileOperationCallback& callback) { |
| 138 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 138 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 139 DCHECK(!callback.is_null()); | 139 DCHECK(!callback.is_null()); |
| 140 | 140 |
| 141 base::PostTaskAndReplyWithResult( | 141 base::PostTaskAndReplyWithResult( |
| 142 blocking_task_runner_, | 142 blocking_task_runner_.get(), |
| 143 FROM_HERE, | 143 FROM_HERE, |
| 144 base::Bind(&ResourceMetadata::InitializeOnBlockingPool, | 144 base::Bind(&ResourceMetadata::InitializeOnBlockingPool, |
| 145 base::Unretained(this)), | 145 base::Unretained(this)), |
| 146 callback); | 146 callback); |
| 147 } | 147 } |
| 148 | 148 |
| 149 void ResourceMetadata::Destroy() { | 149 void ResourceMetadata::Destroy() { |
| 150 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 150 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 151 | 151 |
| 152 weak_ptr_factory_.InvalidateWeakPtrs(); | 152 weak_ptr_factory_.InvalidateWeakPtrs(); |
| 153 blocking_task_runner_->PostTask( | 153 blocking_task_runner_->PostTask( |
| 154 FROM_HERE, | 154 FROM_HERE, |
| 155 base::Bind(&ResourceMetadata::DestroyOnBlockingPool, | 155 base::Bind(&ResourceMetadata::DestroyOnBlockingPool, |
| 156 base::Unretained(this))); | 156 base::Unretained(this))); |
| 157 } | 157 } |
| 158 | 158 |
| 159 void ResourceMetadata::ResetOnUIThread(const FileOperationCallback& callback) { | 159 void ResourceMetadata::ResetOnUIThread(const FileOperationCallback& callback) { |
| 160 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 160 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 161 DCHECK(!callback.is_null()); | 161 DCHECK(!callback.is_null()); |
| 162 | 162 |
| 163 base::PostTaskAndReplyWithResult( | 163 base::PostTaskAndReplyWithResult( |
| 164 blocking_task_runner_, | 164 blocking_task_runner_.get(), |
| 165 FROM_HERE, | 165 FROM_HERE, |
| 166 base::Bind(&ResourceMetadata::Reset, | 166 base::Bind(&ResourceMetadata::Reset, base::Unretained(this)), |
| 167 base::Unretained(this)), | |
| 168 callback); | 167 callback); |
| 169 } | 168 } |
| 170 | 169 |
| 171 FileError ResourceMetadata::Reset() { | 170 FileError ResourceMetadata::Reset() { |
| 172 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); | 171 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
| 173 | 172 |
| 174 if (!EnoughDiskSpaceIsAvailableForDBOperation(data_directory_path_)) | 173 if (!EnoughDiskSpaceIsAvailableForDBOperation(data_directory_path_)) |
| 175 return FILE_ERROR_NO_SPACE; | 174 return FILE_ERROR_NO_SPACE; |
| 176 | 175 |
| 177 if (!storage_->SetLargestChangestamp(0) || | 176 if (!storage_->SetLargestChangestamp(0) || |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 225 void ResourceMetadata::DestroyOnBlockingPool() { | 224 void ResourceMetadata::DestroyOnBlockingPool() { |
| 226 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); | 225 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
| 227 delete this; | 226 delete this; |
| 228 } | 227 } |
| 229 | 228 |
| 230 void ResourceMetadata::GetLargestChangestampOnUIThread( | 229 void ResourceMetadata::GetLargestChangestampOnUIThread( |
| 231 const GetChangestampCallback& callback) { | 230 const GetChangestampCallback& callback) { |
| 232 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 231 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 233 DCHECK(!callback.is_null()); | 232 DCHECK(!callback.is_null()); |
| 234 base::PostTaskAndReplyWithResult( | 233 base::PostTaskAndReplyWithResult( |
| 235 blocking_task_runner_, | 234 blocking_task_runner_.get(), |
| 236 FROM_HERE, | 235 FROM_HERE, |
| 237 base::Bind(&ResourceMetadata::GetLargestChangestamp, | 236 base::Bind(&ResourceMetadata::GetLargestChangestamp, |
| 238 base::Unretained(this)), | 237 base::Unretained(this)), |
| 239 callback); | 238 callback); |
| 240 } | 239 } |
| 241 | 240 |
| 242 void ResourceMetadata::SetLargestChangestampOnUIThread( | 241 void ResourceMetadata::SetLargestChangestampOnUIThread( |
| 243 int64 value, | 242 int64 value, |
| 244 const FileOperationCallback& callback) { | 243 const FileOperationCallback& callback) { |
| 245 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 244 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 246 DCHECK(!callback.is_null()); | 245 DCHECK(!callback.is_null()); |
| 247 base::PostTaskAndReplyWithResult( | 246 base::PostTaskAndReplyWithResult( |
| 248 blocking_task_runner_, | 247 blocking_task_runner_.get(), |
| 249 FROM_HERE, | 248 FROM_HERE, |
| 250 base::Bind(&ResourceMetadata::SetLargestChangestamp, | 249 base::Bind(&ResourceMetadata::SetLargestChangestamp, |
| 251 base::Unretained(this), | 250 base::Unretained(this), |
| 252 value), | 251 value), |
| 253 callback); | 252 callback); |
| 254 } | 253 } |
| 255 | 254 |
| 256 int64 ResourceMetadata::GetLargestChangestamp() { | 255 int64 ResourceMetadata::GetLargestChangestamp() { |
| 257 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); | 256 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
| 258 return storage_->GetLargestChangestamp(); | 257 return storage_->GetLargestChangestamp(); |
| 259 } | 258 } |
| 260 | 259 |
| 261 FileError ResourceMetadata::SetLargestChangestamp(int64 value) { | 260 FileError ResourceMetadata::SetLargestChangestamp(int64 value) { |
| 262 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); | 261 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
| 263 | 262 |
| 264 if (!EnoughDiskSpaceIsAvailableForDBOperation(data_directory_path_)) | 263 if (!EnoughDiskSpaceIsAvailableForDBOperation(data_directory_path_)) |
| 265 return FILE_ERROR_NO_SPACE; | 264 return FILE_ERROR_NO_SPACE; |
| 266 | 265 |
| 267 storage_->SetLargestChangestamp(value); | 266 storage_->SetLargestChangestamp(value); |
| 268 return FILE_ERROR_OK; | 267 return FILE_ERROR_OK; |
| 269 } | 268 } |
| 270 | 269 |
| 271 void ResourceMetadata::AddEntryOnUIThread(const ResourceEntry& entry, | 270 void ResourceMetadata::AddEntryOnUIThread(const ResourceEntry& entry, |
| 272 const FileMoveCallback& callback) { | 271 const FileMoveCallback& callback) { |
| 273 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 272 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 274 DCHECK(!callback.is_null()); | 273 DCHECK(!callback.is_null()); |
| 275 | 274 |
| 276 PostFileMoveTask(blocking_task_runner_, | 275 PostFileMoveTask( |
| 277 base::Bind(&AddEntryWithFilePath, | 276 blocking_task_runner_.get(), |
| 278 base::Unretained(this), | 277 base::Bind(&AddEntryWithFilePath, base::Unretained(this), entry), |
| 279 entry), | 278 callback); |
| 280 callback); | |
| 281 } | 279 } |
| 282 | 280 |
| 283 FileError ResourceMetadata::AddEntry(const ResourceEntry& entry) { | 281 FileError ResourceMetadata::AddEntry(const ResourceEntry& entry) { |
| 284 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); | 282 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
| 285 | 283 |
| 286 if (!EnoughDiskSpaceIsAvailableForDBOperation(data_directory_path_)) | 284 if (!EnoughDiskSpaceIsAvailableForDBOperation(data_directory_path_)) |
| 287 return FILE_ERROR_NO_SPACE; | 285 return FILE_ERROR_NO_SPACE; |
| 288 | 286 |
| 289 scoped_ptr<ResourceEntry> existing_entry = | 287 scoped_ptr<ResourceEntry> existing_entry = |
| 290 storage_->GetEntry(entry.resource_id()); | 288 storage_->GetEntry(entry.resource_id()); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 302 return FILE_ERROR_OK; | 300 return FILE_ERROR_OK; |
| 303 } | 301 } |
| 304 | 302 |
| 305 void ResourceMetadata::MoveEntryToDirectoryOnUIThread( | 303 void ResourceMetadata::MoveEntryToDirectoryOnUIThread( |
| 306 const base::FilePath& file_path, | 304 const base::FilePath& file_path, |
| 307 const base::FilePath& directory_path, | 305 const base::FilePath& directory_path, |
| 308 const FileMoveCallback& callback) { | 306 const FileMoveCallback& callback) { |
| 309 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 307 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 310 DCHECK(!callback.is_null()); | 308 DCHECK(!callback.is_null()); |
| 311 | 309 |
| 312 PostFileMoveTask(blocking_task_runner_, | 310 PostFileMoveTask(blocking_task_runner_.get(), |
| 313 base::Bind(&ResourceMetadata::MoveEntryToDirectory, | 311 base::Bind(&ResourceMetadata::MoveEntryToDirectory, |
| 314 base::Unretained(this), | 312 base::Unretained(this), |
| 315 file_path, | 313 file_path, |
| 316 directory_path), | 314 directory_path), |
| 317 callback); | 315 callback); |
| 318 } | 316 } |
| 319 | 317 |
| 320 void ResourceMetadata::RenameEntryOnUIThread(const base::FilePath& file_path, | 318 void ResourceMetadata::RenameEntryOnUIThread(const base::FilePath& file_path, |
| 321 const std::string& new_name, | 319 const std::string& new_name, |
| 322 const FileMoveCallback& callback) { | 320 const FileMoveCallback& callback) { |
| 323 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 321 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 324 DCHECK(!callback.is_null()); | 322 DCHECK(!callback.is_null()); |
| 325 | 323 |
| 326 PostFileMoveTask(blocking_task_runner_, | 324 PostFileMoveTask(blocking_task_runner_.get(), |
| 327 base::Bind(&ResourceMetadata::RenameEntry, | 325 base::Bind(&ResourceMetadata::RenameEntry, |
| 328 base::Unretained(this), | 326 base::Unretained(this), |
| 329 file_path, | 327 file_path, |
| 330 new_name), | 328 new_name), |
| 331 callback); | 329 callback); |
| 332 } | 330 } |
| 333 | 331 |
| 334 FileError ResourceMetadata::RemoveEntry(const std::string& resource_id) { | 332 FileError ResourceMetadata::RemoveEntry(const std::string& resource_id) { |
| 335 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); | 333 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
| 336 | 334 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 352 | 350 |
| 353 void ResourceMetadata::GetResourceEntryByIdOnUIThread( | 351 void ResourceMetadata::GetResourceEntryByIdOnUIThread( |
| 354 const std::string& resource_id, | 352 const std::string& resource_id, |
| 355 const GetResourceEntryCallback& callback) { | 353 const GetResourceEntryCallback& callback) { |
| 356 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 354 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 357 DCHECK(!callback.is_null()); | 355 DCHECK(!callback.is_null()); |
| 358 | 356 |
| 359 scoped_ptr<ResourceEntry> entry(new ResourceEntry); | 357 scoped_ptr<ResourceEntry> entry(new ResourceEntry); |
| 360 ResourceEntry* entry_ptr = entry.get(); | 358 ResourceEntry* entry_ptr = entry.get(); |
| 361 base::PostTaskAndReplyWithResult( | 359 base::PostTaskAndReplyWithResult( |
| 362 blocking_task_runner_, | 360 blocking_task_runner_.get(), |
| 363 FROM_HERE, | 361 FROM_HERE, |
| 364 base::Bind(&ResourceMetadata::GetResourceEntryById, | 362 base::Bind(&ResourceMetadata::GetResourceEntryById, |
| 365 base::Unretained(this), | 363 base::Unretained(this), |
| 366 resource_id, | 364 resource_id, |
| 367 entry_ptr), | 365 entry_ptr), |
| 368 base::Bind(&RunGetResourceEntryCallback, | 366 base::Bind(&RunGetResourceEntryCallback, callback, base::Passed(&entry))); |
| 369 callback, | |
| 370 base::Passed(&entry))); | |
| 371 } | 367 } |
| 372 | 368 |
| 373 FileError ResourceMetadata::GetResourceEntryById( | 369 FileError ResourceMetadata::GetResourceEntryById( |
| 374 const std::string& resource_id, | 370 const std::string& resource_id, |
| 375 ResourceEntry* out_entry) { | 371 ResourceEntry* out_entry) { |
| 376 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); | 372 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
| 377 DCHECK(!resource_id.empty()); | 373 DCHECK(!resource_id.empty()); |
| 378 DCHECK(out_entry); | 374 DCHECK(out_entry); |
| 379 | 375 |
| 380 scoped_ptr<ResourceEntry> entry = storage_->GetEntry(resource_id); | 376 scoped_ptr<ResourceEntry> entry = storage_->GetEntry(resource_id); |
| 381 if (!entry) | 377 if (!entry) |
| 382 return FILE_ERROR_NOT_FOUND; | 378 return FILE_ERROR_NOT_FOUND; |
| 383 | 379 |
| 384 out_entry->Swap(entry.get()); | 380 out_entry->Swap(entry.get()); |
| 385 return FILE_ERROR_OK; | 381 return FILE_ERROR_OK; |
| 386 } | 382 } |
| 387 | 383 |
| 388 void ResourceMetadata::GetResourceEntryByPathOnUIThread( | 384 void ResourceMetadata::GetResourceEntryByPathOnUIThread( |
| 389 const base::FilePath& file_path, | 385 const base::FilePath& file_path, |
| 390 const GetResourceEntryCallback& callback) { | 386 const GetResourceEntryCallback& callback) { |
| 391 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 387 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 392 DCHECK(!callback.is_null()); | 388 DCHECK(!callback.is_null()); |
| 393 | 389 |
| 394 scoped_ptr<ResourceEntry> entry(new ResourceEntry); | 390 scoped_ptr<ResourceEntry> entry(new ResourceEntry); |
| 395 ResourceEntry* entry_ptr = entry.get(); | 391 ResourceEntry* entry_ptr = entry.get(); |
| 396 base::PostTaskAndReplyWithResult( | 392 base::PostTaskAndReplyWithResult( |
| 397 blocking_task_runner_, | 393 blocking_task_runner_.get(), |
| 398 FROM_HERE, | 394 FROM_HERE, |
| 399 base::Bind(&ResourceMetadata::GetResourceEntryByPath, | 395 base::Bind(&ResourceMetadata::GetResourceEntryByPath, |
| 400 base::Unretained(this), | 396 base::Unretained(this), |
| 401 file_path, | 397 file_path, |
| 402 entry_ptr), | 398 entry_ptr), |
| 403 base::Bind(&RunGetResourceEntryCallback, | 399 base::Bind(&RunGetResourceEntryCallback, callback, base::Passed(&entry))); |
| 404 callback, | |
| 405 base::Passed(&entry))); | |
| 406 } | 400 } |
| 407 | 401 |
| 408 FileError ResourceMetadata::GetResourceEntryByPath(const base::FilePath& path, | 402 FileError ResourceMetadata::GetResourceEntryByPath(const base::FilePath& path, |
| 409 ResourceEntry* out_entry) { | 403 ResourceEntry* out_entry) { |
| 410 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); | 404 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
| 411 DCHECK(out_entry); | 405 DCHECK(out_entry); |
| 412 | 406 |
| 413 scoped_ptr<ResourceEntry> entry = FindEntryByPathSync(path); | 407 scoped_ptr<ResourceEntry> entry = FindEntryByPathSync(path); |
| 414 if (!entry) | 408 if (!entry) |
| 415 return FILE_ERROR_NOT_FOUND; | 409 return FILE_ERROR_NOT_FOUND; |
| 416 | 410 |
| 417 *out_entry = *entry; | 411 *out_entry = *entry; |
| 418 return FILE_ERROR_OK; | 412 return FILE_ERROR_OK; |
| 419 } | 413 } |
| 420 | 414 |
| 421 void ResourceMetadata::ReadDirectoryByPathOnUIThread( | 415 void ResourceMetadata::ReadDirectoryByPathOnUIThread( |
| 422 const base::FilePath& file_path, | 416 const base::FilePath& file_path, |
| 423 const ReadDirectoryCallback& callback) { | 417 const ReadDirectoryCallback& callback) { |
| 424 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 418 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 425 DCHECK(!callback.is_null()); | 419 DCHECK(!callback.is_null()); |
| 426 | 420 |
| 427 scoped_ptr<ResourceEntryVector> entries(new ResourceEntryVector); | 421 scoped_ptr<ResourceEntryVector> entries(new ResourceEntryVector); |
| 428 ResourceEntryVector* entries_ptr = entries.get(); | 422 ResourceEntryVector* entries_ptr = entries.get(); |
| 429 base::PostTaskAndReplyWithResult( | 423 base::PostTaskAndReplyWithResult( |
| 430 blocking_task_runner_, | 424 blocking_task_runner_.get(), |
| 431 FROM_HERE, | 425 FROM_HERE, |
| 432 base::Bind(&ResourceMetadata::ReadDirectoryByPath, | 426 base::Bind(&ResourceMetadata::ReadDirectoryByPath, |
| 433 base::Unretained(this), | 427 base::Unretained(this), |
| 434 file_path, | 428 file_path, |
| 435 entries_ptr), | 429 entries_ptr), |
| 436 base::Bind(&RunReadDirectoryCallback, | 430 base::Bind(&RunReadDirectoryCallback, callback, base::Passed(&entries))); |
| 437 callback, | |
| 438 base::Passed(&entries))); | |
| 439 } | 431 } |
| 440 | 432 |
| 441 FileError ResourceMetadata::ReadDirectoryByPath( | 433 FileError ResourceMetadata::ReadDirectoryByPath( |
| 442 const base::FilePath& path, | 434 const base::FilePath& path, |
| 443 ResourceEntryVector* out_entries) { | 435 ResourceEntryVector* out_entries) { |
| 444 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); | 436 DCHECK(blocking_task_runner_->RunsTasksOnCurrentThread()); |
| 445 DCHECK(out_entries); | 437 DCHECK(out_entries); |
| 446 | 438 |
| 447 scoped_ptr<ResourceEntry> entry = FindEntryByPathSync(path); | 439 scoped_ptr<ResourceEntry> entry = FindEntryByPathSync(path); |
| 448 if (!entry) | 440 if (!entry) |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 return FILE_ERROR_OK; | 486 return FILE_ERROR_OK; |
| 495 } | 487 } |
| 496 | 488 |
| 497 void ResourceMetadata::RefreshDirectoryOnUIThread( | 489 void ResourceMetadata::RefreshDirectoryOnUIThread( |
| 498 const DirectoryFetchInfo& directory_fetch_info, | 490 const DirectoryFetchInfo& directory_fetch_info, |
| 499 const ResourceEntryMap& entry_map, | 491 const ResourceEntryMap& entry_map, |
| 500 const FileMoveCallback& callback) { | 492 const FileMoveCallback& callback) { |
| 501 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 493 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 502 DCHECK(!callback.is_null()); | 494 DCHECK(!callback.is_null()); |
| 503 | 495 |
| 504 PostFileMoveTask(blocking_task_runner_, | 496 PostFileMoveTask(blocking_task_runner_.get(), |
| 505 base::Bind(&ResourceMetadata::RefreshDirectory, | 497 base::Bind(&ResourceMetadata::RefreshDirectory, |
| 506 base::Unretained(this), | 498 base::Unretained(this), |
| 507 directory_fetch_info, | 499 directory_fetch_info, |
| 508 entry_map), | 500 entry_map), |
| 509 callback); | 501 callback); |
| 510 } | 502 } |
| 511 | 503 |
| 512 void ResourceMetadata::GetChildDirectories( | 504 void ResourceMetadata::GetChildDirectories( |
| 513 const std::string& resource_id, | 505 const std::string& resource_id, |
| 514 std::set<base::FilePath>* child_directories) { | 506 std::set<base::FilePath>* child_directories) { |
| (...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 831 for (size_t i = 0; i < children.size(); ++i) { | 823 for (size_t i = 0; i < children.size(); ++i) { |
| 832 if (!RemoveEntryRecursively(children[i])) | 824 if (!RemoveEntryRecursively(children[i])) |
| 833 return false; | 825 return false; |
| 834 } | 826 } |
| 835 } | 827 } |
| 836 return storage_->RemoveEntry(resource_id); | 828 return storage_->RemoveEntry(resource_id); |
| 837 } | 829 } |
| 838 | 830 |
| 839 } // namespace internal | 831 } // namespace internal |
| 840 } // namespace drive | 832 } // namespace drive |
| OLD | NEW |