| 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/file_system.h" | 5 #include "chrome/browser/chromeos/drive/file_system.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
| 9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
| 10 #include "chrome/browser/chromeos/drive/change_list_loader.h" | 10 #include "chrome/browser/chromeos/drive/change_list_loader.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 return FILE_ERROR_NOT_FOUND; | 83 return FILE_ERROR_NOT_FOUND; |
| 84 | 84 |
| 85 entry->mutable_file_info()->set_size(file_info.size); | 85 entry->mutable_file_info()->set_size(file_info.size); |
| 86 return FILE_ERROR_OK; | 86 return FILE_ERROR_OK; |
| 87 } | 87 } |
| 88 | 88 |
| 89 // Runs the callback with parameters. | 89 // Runs the callback with parameters. |
| 90 void RunGetResourceEntryCallback(const GetResourceEntryCallback& callback, | 90 void RunGetResourceEntryCallback(const GetResourceEntryCallback& callback, |
| 91 scoped_ptr<ResourceEntry> entry, | 91 scoped_ptr<ResourceEntry> entry, |
| 92 FileError error) { | 92 FileError error) { |
| 93 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 93 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 94 DCHECK(!callback.is_null()); | 94 DCHECK(!callback.is_null()); |
| 95 | 95 |
| 96 if (error != FILE_ERROR_OK) | 96 if (error != FILE_ERROR_OK) |
| 97 entry.reset(); | 97 entry.reset(); |
| 98 callback.Run(error, entry.Pass()); | 98 callback.Run(error, entry.Pass()); |
| 99 } | 99 } |
| 100 | 100 |
| 101 // Used to implement Pin(). | 101 // Used to implement Pin(). |
| 102 FileError PinInternal(internal::ResourceMetadata* resource_metadata, | 102 FileError PinInternal(internal::ResourceMetadata* resource_metadata, |
| 103 internal::FileCache* cache, | 103 internal::FileCache* cache, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 153 callback.Run(error, *cache_file_path); | 153 callback.Run(error, *cache_file_path); |
| 154 } | 154 } |
| 155 | 155 |
| 156 // Callback for ResourceMetadata::GetLargestChangestamp. | 156 // Callback for ResourceMetadata::GetLargestChangestamp. |
| 157 // |callback| must not be null. | 157 // |callback| must not be null. |
| 158 void OnGetLargestChangestamp( | 158 void OnGetLargestChangestamp( |
| 159 FileSystemMetadata metadata, // Will be modified. | 159 FileSystemMetadata metadata, // Will be modified. |
| 160 const GetFilesystemMetadataCallback& callback, | 160 const GetFilesystemMetadataCallback& callback, |
| 161 const int64* largest_changestamp, | 161 const int64* largest_changestamp, |
| 162 FileError error) { | 162 FileError error) { |
| 163 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 163 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 164 DCHECK(!callback.is_null()); | 164 DCHECK(!callback.is_null()); |
| 165 | 165 |
| 166 metadata.largest_changestamp = *largest_changestamp; | 166 metadata.largest_changestamp = *largest_changestamp; |
| 167 callback.Run(metadata); | 167 callback.Run(metadata); |
| 168 } | 168 } |
| 169 | 169 |
| 170 // Thin adapter to map GetFileCallback to FileOperationCallback. | 170 // Thin adapter to map GetFileCallback to FileOperationCallback. |
| 171 void GetFileCallbackToFileOperationCallbackAdapter( | 171 void GetFileCallbackToFileOperationCallbackAdapter( |
| 172 const FileOperationCallback& callback, | 172 const FileOperationCallback& callback, |
| 173 FileError error, | 173 FileError error, |
| (...skipping 24 matching lines...) Expand all Loading... |
| 198 if (error != FILE_ERROR_OK) | 198 if (error != FILE_ERROR_OK) |
| 199 return error; | 199 return error; |
| 200 return resource_metadata->GetFilePath(local_id, file_path); | 200 return resource_metadata->GetFilePath(local_id, file_path); |
| 201 } | 201 } |
| 202 | 202 |
| 203 // Part of GetPathFromResourceId(). | 203 // Part of GetPathFromResourceId(). |
| 204 // Called when GetPathFromResourceIdInBlockingPool is complete. | 204 // Called when GetPathFromResourceIdInBlockingPool is complete. |
| 205 void GetPathFromResourceIdAfterGetPath(base::FilePath* file_path, | 205 void GetPathFromResourceIdAfterGetPath(base::FilePath* file_path, |
| 206 const GetFilePathCallback& callback, | 206 const GetFilePathCallback& callback, |
| 207 FileError error) { | 207 FileError error) { |
| 208 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 208 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 209 callback.Run(error, *file_path); | 209 callback.Run(error, *file_path); |
| 210 } | 210 } |
| 211 | 211 |
| 212 bool FreeDiskSpaceIfNeededForOnBlockingPool(internal::FileCache* cache, | 212 bool FreeDiskSpaceIfNeededForOnBlockingPool(internal::FileCache* cache, |
| 213 int64 num_bytes) { | 213 int64 num_bytes) { |
| 214 return cache->FreeDiskSpaceIfNeededFor(num_bytes); | 214 return cache->FreeDiskSpaceIfNeededFor(num_bytes); |
| 215 } | 215 } |
| 216 | 216 |
| 217 // Excludes hosted documents from the given entries. | 217 // Excludes hosted documents from the given entries. |
| 218 // Used to implement ReadDirectory(). | 218 // Used to implement ReadDirectory(). |
| 219 void FilterHostedDocuments(const ReadDirectoryEntriesCallback& callback, | 219 void FilterHostedDocuments(const ReadDirectoryEntriesCallback& callback, |
| 220 scoped_ptr<ResourceEntryVector> entries) { | 220 scoped_ptr<ResourceEntryVector> entries) { |
| 221 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 221 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 222 DCHECK(!callback.is_null()); | 222 DCHECK(!callback.is_null()); |
| 223 | 223 |
| 224 if (entries) { | 224 if (entries) { |
| 225 // TODO(kinaba): Stop handling hide_hosted_docs here. crbug.com/256520. | 225 // TODO(kinaba): Stop handling hide_hosted_docs here. crbug.com/256520. |
| 226 scoped_ptr<ResourceEntryVector> filtered(new ResourceEntryVector); | 226 scoped_ptr<ResourceEntryVector> filtered(new ResourceEntryVector); |
| 227 for (size_t i = 0; i < entries->size(); ++i) { | 227 for (size_t i = 0; i < entries->size(); ++i) { |
| 228 if (entries->at(i).file_specific_info().is_hosted_document()) { | 228 if (entries->at(i).file_specific_info().is_hosted_document()) { |
| 229 continue; | 229 continue; |
| 230 } | 230 } |
| 231 filtered->push_back(entries->at(i)); | 231 filtered->push_back(entries->at(i)); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 const base::FilePath& temporary_file_directory) | 287 const base::FilePath& temporary_file_directory) |
| 288 : pref_service_(pref_service), | 288 : pref_service_(pref_service), |
| 289 logger_(logger), | 289 logger_(logger), |
| 290 cache_(cache), | 290 cache_(cache), |
| 291 scheduler_(scheduler), | 291 scheduler_(scheduler), |
| 292 resource_metadata_(resource_metadata), | 292 resource_metadata_(resource_metadata), |
| 293 last_update_check_error_(FILE_ERROR_OK), | 293 last_update_check_error_(FILE_ERROR_OK), |
| 294 blocking_task_runner_(blocking_task_runner), | 294 blocking_task_runner_(blocking_task_runner), |
| 295 temporary_file_directory_(temporary_file_directory), | 295 temporary_file_directory_(temporary_file_directory), |
| 296 weak_ptr_factory_(this) { | 296 weak_ptr_factory_(this) { |
| 297 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 297 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 298 | 298 |
| 299 ResetComponents(); | 299 ResetComponents(); |
| 300 } | 300 } |
| 301 | 301 |
| 302 FileSystem::~FileSystem() { | 302 FileSystem::~FileSystem() { |
| 303 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 303 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 304 | 304 |
| 305 directory_loader_->RemoveObserver(this); | 305 directory_loader_->RemoveObserver(this); |
| 306 change_list_loader_->RemoveObserver(this); | 306 change_list_loader_->RemoveObserver(this); |
| 307 } | 307 } |
| 308 | 308 |
| 309 void FileSystem::Reset(const FileOperationCallback& callback) { | 309 void FileSystem::Reset(const FileOperationCallback& callback) { |
| 310 // Discard the current loader and operation objects and renew them. This is to | 310 // Discard the current loader and operation objects and renew them. This is to |
| 311 // avoid that changes initiated before the metadata reset is applied after the | 311 // avoid that changes initiated before the metadata reset is applied after the |
| 312 // reset, which may cause an inconsistent state. | 312 // reset, which may cause an inconsistent state. |
| 313 // TODO(kinaba): callbacks held in the subcomponents are discarded. We might | 313 // TODO(kinaba): callbacks held in the subcomponents are discarded. We might |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 404 delegate, | 404 delegate, |
| 405 scheduler_, | 405 scheduler_, |
| 406 resource_metadata_, | 406 resource_metadata_, |
| 407 cache_, | 407 cache_, |
| 408 temporary_file_directory_)); | 408 temporary_file_directory_)); |
| 409 set_property_operation_.reset(new file_system::SetPropertyOperation( | 409 set_property_operation_.reset(new file_system::SetPropertyOperation( |
| 410 blocking_task_runner_.get(), delegate, resource_metadata_)); | 410 blocking_task_runner_.get(), delegate, resource_metadata_)); |
| 411 } | 411 } |
| 412 | 412 |
| 413 void FileSystem::CheckForUpdates() { | 413 void FileSystem::CheckForUpdates() { |
| 414 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 414 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 415 DVLOG(1) << "CheckForUpdates"; | 415 DVLOG(1) << "CheckForUpdates"; |
| 416 | 416 |
| 417 change_list_loader_->CheckForUpdates( | 417 change_list_loader_->CheckForUpdates( |
| 418 base::Bind(&FileSystem::OnUpdateChecked, weak_ptr_factory_.GetWeakPtr())); | 418 base::Bind(&FileSystem::OnUpdateChecked, weak_ptr_factory_.GetWeakPtr())); |
| 419 } | 419 } |
| 420 | 420 |
| 421 void FileSystem::OnUpdateChecked(FileError error) { | 421 void FileSystem::OnUpdateChecked(FileError error) { |
| 422 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 422 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 423 DVLOG(1) << "CheckForUpdates finished: " << FileErrorToString(error); | 423 DVLOG(1) << "CheckForUpdates finished: " << FileErrorToString(error); |
| 424 last_update_check_time_ = base::Time::Now(); | 424 last_update_check_time_ = base::Time::Now(); |
| 425 last_update_check_error_ = error; | 425 last_update_check_error_ = error; |
| 426 } | 426 } |
| 427 | 427 |
| 428 void FileSystem::AddObserver(FileSystemObserver* observer) { | 428 void FileSystem::AddObserver(FileSystemObserver* observer) { |
| 429 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 429 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 430 observers_.AddObserver(observer); | 430 observers_.AddObserver(observer); |
| 431 } | 431 } |
| 432 | 432 |
| 433 void FileSystem::RemoveObserver(FileSystemObserver* observer) { | 433 void FileSystem::RemoveObserver(FileSystemObserver* observer) { |
| 434 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 434 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 435 observers_.RemoveObserver(observer); | 435 observers_.RemoveObserver(observer); |
| 436 } | 436 } |
| 437 | 437 |
| 438 void FileSystem::TransferFileFromLocalToRemote( | 438 void FileSystem::TransferFileFromLocalToRemote( |
| 439 const base::FilePath& local_src_file_path, | 439 const base::FilePath& local_src_file_path, |
| 440 const base::FilePath& remote_dest_file_path, | 440 const base::FilePath& remote_dest_file_path, |
| 441 const FileOperationCallback& callback) { | 441 const FileOperationCallback& callback) { |
| 442 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 442 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 443 DCHECK(!callback.is_null()); | 443 DCHECK(!callback.is_null()); |
| 444 copy_operation_->TransferFileFromLocalToRemote(local_src_file_path, | 444 copy_operation_->TransferFileFromLocalToRemote(local_src_file_path, |
| 445 remote_dest_file_path, | 445 remote_dest_file_path, |
| 446 callback); | 446 callback); |
| 447 } | 447 } |
| 448 | 448 |
| 449 void FileSystem::Copy(const base::FilePath& src_file_path, | 449 void FileSystem::Copy(const base::FilePath& src_file_path, |
| 450 const base::FilePath& dest_file_path, | 450 const base::FilePath& dest_file_path, |
| 451 bool preserve_last_modified, | 451 bool preserve_last_modified, |
| 452 const FileOperationCallback& callback) { | 452 const FileOperationCallback& callback) { |
| 453 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 453 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 454 DCHECK(!callback.is_null()); | 454 DCHECK(!callback.is_null()); |
| 455 copy_operation_->Copy( | 455 copy_operation_->Copy( |
| 456 src_file_path, dest_file_path, preserve_last_modified, callback); | 456 src_file_path, dest_file_path, preserve_last_modified, callback); |
| 457 } | 457 } |
| 458 | 458 |
| 459 void FileSystem::Move(const base::FilePath& src_file_path, | 459 void FileSystem::Move(const base::FilePath& src_file_path, |
| 460 const base::FilePath& dest_file_path, | 460 const base::FilePath& dest_file_path, |
| 461 const FileOperationCallback& callback) { | 461 const FileOperationCallback& callback) { |
| 462 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 462 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 463 DCHECK(!callback.is_null()); | 463 DCHECK(!callback.is_null()); |
| 464 move_operation_->Move(src_file_path, dest_file_path, callback); | 464 move_operation_->Move(src_file_path, dest_file_path, callback); |
| 465 } | 465 } |
| 466 | 466 |
| 467 void FileSystem::Remove(const base::FilePath& file_path, | 467 void FileSystem::Remove(const base::FilePath& file_path, |
| 468 bool is_recursive, | 468 bool is_recursive, |
| 469 const FileOperationCallback& callback) { | 469 const FileOperationCallback& callback) { |
| 470 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 470 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 471 DCHECK(!callback.is_null()); | 471 DCHECK(!callback.is_null()); |
| 472 remove_operation_->Remove(file_path, is_recursive, callback); | 472 remove_operation_->Remove(file_path, is_recursive, callback); |
| 473 } | 473 } |
| 474 | 474 |
| 475 void FileSystem::CreateDirectory( | 475 void FileSystem::CreateDirectory( |
| 476 const base::FilePath& directory_path, | 476 const base::FilePath& directory_path, |
| 477 bool is_exclusive, | 477 bool is_exclusive, |
| 478 bool is_recursive, | 478 bool is_recursive, |
| 479 const FileOperationCallback& callback) { | 479 const FileOperationCallback& callback) { |
| 480 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 480 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 481 DCHECK(!callback.is_null()); | 481 DCHECK(!callback.is_null()); |
| 482 | 482 |
| 483 CreateDirectoryParams params; | 483 CreateDirectoryParams params; |
| 484 params.directory_path = directory_path; | 484 params.directory_path = directory_path; |
| 485 params.is_exclusive = is_exclusive; | 485 params.is_exclusive = is_exclusive; |
| 486 params.is_recursive = is_recursive; | 486 params.is_recursive = is_recursive; |
| 487 params.callback = callback; | 487 params.callback = callback; |
| 488 | 488 |
| 489 // Ensure its parent directory is loaded to the local metadata. | 489 // Ensure its parent directory is loaded to the local metadata. |
| 490 ReadDirectory(directory_path.DirName(), | 490 ReadDirectory(directory_path.DirName(), |
| 491 ReadDirectoryEntriesCallback(), | 491 ReadDirectoryEntriesCallback(), |
| 492 base::Bind(&FileSystem::CreateDirectoryAfterRead, | 492 base::Bind(&FileSystem::CreateDirectoryAfterRead, |
| 493 weak_ptr_factory_.GetWeakPtr(), params)); | 493 weak_ptr_factory_.GetWeakPtr(), params)); |
| 494 } | 494 } |
| 495 | 495 |
| 496 void FileSystem::CreateDirectoryAfterRead(const CreateDirectoryParams& params, | 496 void FileSystem::CreateDirectoryAfterRead(const CreateDirectoryParams& params, |
| 497 FileError error) { | 497 FileError error) { |
| 498 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 498 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 499 DCHECK(!params.callback.is_null()); | 499 DCHECK(!params.callback.is_null()); |
| 500 | 500 |
| 501 DVLOG_IF(1, error != FILE_ERROR_OK) << "ReadDirectory failed. " | 501 DVLOG_IF(1, error != FILE_ERROR_OK) << "ReadDirectory failed. " |
| 502 << FileErrorToString(error); | 502 << FileErrorToString(error); |
| 503 | 503 |
| 504 create_directory_operation_->CreateDirectory( | 504 create_directory_operation_->CreateDirectory( |
| 505 params.directory_path, params.is_exclusive, params.is_recursive, | 505 params.directory_path, params.is_exclusive, params.is_recursive, |
| 506 params.callback); | 506 params.callback); |
| 507 } | 507 } |
| 508 | 508 |
| 509 void FileSystem::CreateFile(const base::FilePath& file_path, | 509 void FileSystem::CreateFile(const base::FilePath& file_path, |
| 510 bool is_exclusive, | 510 bool is_exclusive, |
| 511 const std::string& mime_type, | 511 const std::string& mime_type, |
| 512 const FileOperationCallback& callback) { | 512 const FileOperationCallback& callback) { |
| 513 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 513 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 514 DCHECK(!callback.is_null()); | 514 DCHECK(!callback.is_null()); |
| 515 create_file_operation_->CreateFile( | 515 create_file_operation_->CreateFile( |
| 516 file_path, is_exclusive, mime_type, callback); | 516 file_path, is_exclusive, mime_type, callback); |
| 517 } | 517 } |
| 518 | 518 |
| 519 void FileSystem::TouchFile(const base::FilePath& file_path, | 519 void FileSystem::TouchFile(const base::FilePath& file_path, |
| 520 const base::Time& last_access_time, | 520 const base::Time& last_access_time, |
| 521 const base::Time& last_modified_time, | 521 const base::Time& last_modified_time, |
| 522 const FileOperationCallback& callback) { | 522 const FileOperationCallback& callback) { |
| 523 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 523 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 524 DCHECK(!callback.is_null()); | 524 DCHECK(!callback.is_null()); |
| 525 touch_operation_->TouchFile( | 525 touch_operation_->TouchFile( |
| 526 file_path, last_access_time, last_modified_time, callback); | 526 file_path, last_access_time, last_modified_time, callback); |
| 527 } | 527 } |
| 528 | 528 |
| 529 void FileSystem::TruncateFile(const base::FilePath& file_path, | 529 void FileSystem::TruncateFile(const base::FilePath& file_path, |
| 530 int64 length, | 530 int64 length, |
| 531 const FileOperationCallback& callback) { | 531 const FileOperationCallback& callback) { |
| 532 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 532 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 533 DCHECK(!callback.is_null()); | 533 DCHECK(!callback.is_null()); |
| 534 truncate_operation_->Truncate(file_path, length, callback); | 534 truncate_operation_->Truncate(file_path, length, callback); |
| 535 } | 535 } |
| 536 | 536 |
| 537 void FileSystem::Pin(const base::FilePath& file_path, | 537 void FileSystem::Pin(const base::FilePath& file_path, |
| 538 const FileOperationCallback& callback) { | 538 const FileOperationCallback& callback) { |
| 539 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 539 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 540 DCHECK(!callback.is_null()); | 540 DCHECK(!callback.is_null()); |
| 541 | 541 |
| 542 std::string* local_id = new std::string; | 542 std::string* local_id = new std::string; |
| 543 base::PostTaskAndReplyWithResult( | 543 base::PostTaskAndReplyWithResult( |
| 544 blocking_task_runner_.get(), | 544 blocking_task_runner_.get(), |
| 545 FROM_HERE, | 545 FROM_HERE, |
| 546 base::Bind(&PinInternal, resource_metadata_, cache_, file_path, local_id), | 546 base::Bind(&PinInternal, resource_metadata_, cache_, file_path, local_id), |
| 547 base::Bind(&FileSystem::FinishPin, | 547 base::Bind(&FileSystem::FinishPin, |
| 548 weak_ptr_factory_.GetWeakPtr(), | 548 weak_ptr_factory_.GetWeakPtr(), |
| 549 callback, | 549 callback, |
| 550 base::Owned(local_id))); | 550 base::Owned(local_id))); |
| 551 } | 551 } |
| 552 | 552 |
| 553 void FileSystem::FinishPin(const FileOperationCallback& callback, | 553 void FileSystem::FinishPin(const FileOperationCallback& callback, |
| 554 const std::string* local_id, | 554 const std::string* local_id, |
| 555 FileError error) { | 555 FileError error) { |
| 556 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 556 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 557 DCHECK(!callback.is_null()); | 557 DCHECK(!callback.is_null()); |
| 558 | 558 |
| 559 if (error == FILE_ERROR_OK) | 559 if (error == FILE_ERROR_OK) |
| 560 sync_client_->AddFetchTask(*local_id); | 560 sync_client_->AddFetchTask(*local_id); |
| 561 callback.Run(error); | 561 callback.Run(error); |
| 562 } | 562 } |
| 563 | 563 |
| 564 void FileSystem::Unpin(const base::FilePath& file_path, | 564 void FileSystem::Unpin(const base::FilePath& file_path, |
| 565 const FileOperationCallback& callback) { | 565 const FileOperationCallback& callback) { |
| 566 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 566 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 567 DCHECK(!callback.is_null()); | 567 DCHECK(!callback.is_null()); |
| 568 | 568 |
| 569 std::string* local_id = new std::string; | 569 std::string* local_id = new std::string; |
| 570 base::PostTaskAndReplyWithResult( | 570 base::PostTaskAndReplyWithResult( |
| 571 blocking_task_runner_.get(), | 571 blocking_task_runner_.get(), |
| 572 FROM_HERE, | 572 FROM_HERE, |
| 573 base::Bind( | 573 base::Bind( |
| 574 &UnpinInternal, resource_metadata_, cache_, file_path, local_id), | 574 &UnpinInternal, resource_metadata_, cache_, file_path, local_id), |
| 575 base::Bind(&FileSystem::FinishUnpin, | 575 base::Bind(&FileSystem::FinishUnpin, |
| 576 weak_ptr_factory_.GetWeakPtr(), | 576 weak_ptr_factory_.GetWeakPtr(), |
| 577 callback, | 577 callback, |
| 578 base::Owned(local_id))); | 578 base::Owned(local_id))); |
| 579 } | 579 } |
| 580 | 580 |
| 581 void FileSystem::FinishUnpin(const FileOperationCallback& callback, | 581 void FileSystem::FinishUnpin(const FileOperationCallback& callback, |
| 582 const std::string* local_id, | 582 const std::string* local_id, |
| 583 FileError error) { | 583 FileError error) { |
| 584 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 584 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 585 DCHECK(!callback.is_null()); | 585 DCHECK(!callback.is_null()); |
| 586 | 586 |
| 587 if (error == FILE_ERROR_OK) | 587 if (error == FILE_ERROR_OK) |
| 588 sync_client_->RemoveFetchTask(*local_id); | 588 sync_client_->RemoveFetchTask(*local_id); |
| 589 callback.Run(error); | 589 callback.Run(error); |
| 590 } | 590 } |
| 591 | 591 |
| 592 void FileSystem::GetFile(const base::FilePath& file_path, | 592 void FileSystem::GetFile(const base::FilePath& file_path, |
| 593 const GetFileCallback& callback) { | 593 const GetFileCallback& callback) { |
| 594 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 594 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 595 DCHECK(!callback.is_null()); | 595 DCHECK(!callback.is_null()); |
| 596 | 596 |
| 597 download_operation_->EnsureFileDownloadedByPath( | 597 download_operation_->EnsureFileDownloadedByPath( |
| 598 file_path, | 598 file_path, |
| 599 ClientContext(USER_INITIATED), | 599 ClientContext(USER_INITIATED), |
| 600 GetFileContentInitializedCallback(), | 600 GetFileContentInitializedCallback(), |
| 601 google_apis::GetContentCallback(), | 601 google_apis::GetContentCallback(), |
| 602 callback); | 602 callback); |
| 603 } | 603 } |
| 604 | 604 |
| 605 void FileSystem::GetFileForSaving(const base::FilePath& file_path, | 605 void FileSystem::GetFileForSaving(const base::FilePath& file_path, |
| 606 const GetFileCallback& callback) { | 606 const GetFileCallback& callback) { |
| 607 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 607 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 608 DCHECK(!callback.is_null()); | 608 DCHECK(!callback.is_null()); |
| 609 | 609 |
| 610 get_file_for_saving_operation_->GetFileForSaving(file_path, callback); | 610 get_file_for_saving_operation_->GetFileForSaving(file_path, callback); |
| 611 } | 611 } |
| 612 | 612 |
| 613 base::Closure FileSystem::GetFileContent( | 613 base::Closure FileSystem::GetFileContent( |
| 614 const base::FilePath& file_path, | 614 const base::FilePath& file_path, |
| 615 const GetFileContentInitializedCallback& initialized_callback, | 615 const GetFileContentInitializedCallback& initialized_callback, |
| 616 const google_apis::GetContentCallback& get_content_callback, | 616 const google_apis::GetContentCallback& get_content_callback, |
| 617 const FileOperationCallback& completion_callback) { | 617 const FileOperationCallback& completion_callback) { |
| 618 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 618 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 619 DCHECK(!initialized_callback.is_null()); | 619 DCHECK(!initialized_callback.is_null()); |
| 620 DCHECK(!get_content_callback.is_null()); | 620 DCHECK(!get_content_callback.is_null()); |
| 621 DCHECK(!completion_callback.is_null()); | 621 DCHECK(!completion_callback.is_null()); |
| 622 | 622 |
| 623 return download_operation_->EnsureFileDownloadedByPath( | 623 return download_operation_->EnsureFileDownloadedByPath( |
| 624 file_path, | 624 file_path, |
| 625 ClientContext(USER_INITIATED), | 625 ClientContext(USER_INITIATED), |
| 626 initialized_callback, | 626 initialized_callback, |
| 627 get_content_callback, | 627 get_content_callback, |
| 628 base::Bind(&GetFileCallbackToFileOperationCallbackAdapter, | 628 base::Bind(&GetFileCallbackToFileOperationCallbackAdapter, |
| 629 completion_callback)); | 629 completion_callback)); |
| 630 } | 630 } |
| 631 | 631 |
| 632 void FileSystem::GetResourceEntry( | 632 void FileSystem::GetResourceEntry( |
| 633 const base::FilePath& file_path, | 633 const base::FilePath& file_path, |
| 634 const GetResourceEntryCallback& callback) { | 634 const GetResourceEntryCallback& callback) { |
| 635 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 635 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 636 DCHECK(!callback.is_null()); | 636 DCHECK(!callback.is_null()); |
| 637 | 637 |
| 638 ReadDirectory(file_path.DirName(), | 638 ReadDirectory(file_path.DirName(), |
| 639 ReadDirectoryEntriesCallback(), | 639 ReadDirectoryEntriesCallback(), |
| 640 base::Bind(&FileSystem::GetResourceEntryAfterRead, | 640 base::Bind(&FileSystem::GetResourceEntryAfterRead, |
| 641 weak_ptr_factory_.GetWeakPtr(), | 641 weak_ptr_factory_.GetWeakPtr(), |
| 642 file_path, | 642 file_path, |
| 643 callback)); | 643 callback)); |
| 644 } | 644 } |
| 645 | 645 |
| 646 void FileSystem::GetResourceEntryAfterRead( | 646 void FileSystem::GetResourceEntryAfterRead( |
| 647 const base::FilePath& file_path, | 647 const base::FilePath& file_path, |
| 648 const GetResourceEntryCallback& callback, | 648 const GetResourceEntryCallback& callback, |
| 649 FileError error) { | 649 FileError error) { |
| 650 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 650 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 651 DCHECK(!callback.is_null()); | 651 DCHECK(!callback.is_null()); |
| 652 | 652 |
| 653 DVLOG_IF(1, error != FILE_ERROR_OK) << "ReadDirectory failed. " | 653 DVLOG_IF(1, error != FILE_ERROR_OK) << "ReadDirectory failed. " |
| 654 << FileErrorToString(error); | 654 << FileErrorToString(error); |
| 655 | 655 |
| 656 scoped_ptr<ResourceEntry> entry(new ResourceEntry); | 656 scoped_ptr<ResourceEntry> entry(new ResourceEntry); |
| 657 ResourceEntry* entry_ptr = entry.get(); | 657 ResourceEntry* entry_ptr = entry.get(); |
| 658 base::PostTaskAndReplyWithResult( | 658 base::PostTaskAndReplyWithResult( |
| 659 blocking_task_runner_.get(), | 659 blocking_task_runner_.get(), |
| 660 FROM_HERE, | 660 FROM_HERE, |
| 661 base::Bind(&GetLocallyStoredResourceEntry, | 661 base::Bind(&GetLocallyStoredResourceEntry, |
| 662 resource_metadata_, | 662 resource_metadata_, |
| 663 cache_, | 663 cache_, |
| 664 file_path, | 664 file_path, |
| 665 entry_ptr), | 665 entry_ptr), |
| 666 base::Bind(&RunGetResourceEntryCallback, callback, base::Passed(&entry))); | 666 base::Bind(&RunGetResourceEntryCallback, callback, base::Passed(&entry))); |
| 667 } | 667 } |
| 668 | 668 |
| 669 void FileSystem::ReadDirectory( | 669 void FileSystem::ReadDirectory( |
| 670 const base::FilePath& directory_path, | 670 const base::FilePath& directory_path, |
| 671 const ReadDirectoryEntriesCallback& entries_callback_in, | 671 const ReadDirectoryEntriesCallback& entries_callback_in, |
| 672 const FileOperationCallback& completion_callback) { | 672 const FileOperationCallback& completion_callback) { |
| 673 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 673 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 674 DCHECK(!completion_callback.is_null()); | 674 DCHECK(!completion_callback.is_null()); |
| 675 | 675 |
| 676 const bool hide_hosted_docs = | 676 const bool hide_hosted_docs = |
| 677 pref_service_->GetBoolean(prefs::kDisableDriveHostedFiles); | 677 pref_service_->GetBoolean(prefs::kDisableDriveHostedFiles); |
| 678 ReadDirectoryEntriesCallback entries_callback = entries_callback_in; | 678 ReadDirectoryEntriesCallback entries_callback = entries_callback_in; |
| 679 if (!entries_callback.is_null() && hide_hosted_docs) | 679 if (!entries_callback.is_null() && hide_hosted_docs) |
| 680 entries_callback = base::Bind(&FilterHostedDocuments, entries_callback); | 680 entries_callback = base::Bind(&FilterHostedDocuments, entries_callback); |
| 681 | 681 |
| 682 directory_loader_->ReadDirectory( | 682 directory_loader_->ReadDirectory( |
| 683 directory_path, entries_callback, completion_callback); | 683 directory_path, entries_callback, completion_callback); |
| 684 | 684 |
| 685 // Also start loading all of the user's contents. | 685 // Also start loading all of the user's contents. |
| 686 change_list_loader_->LoadIfNeeded( | 686 change_list_loader_->LoadIfNeeded( |
| 687 base::Bind(&util::EmptyFileOperationCallback)); | 687 base::Bind(&util::EmptyFileOperationCallback)); |
| 688 } | 688 } |
| 689 | 689 |
| 690 void FileSystem::GetAvailableSpace( | 690 void FileSystem::GetAvailableSpace( |
| 691 const GetAvailableSpaceCallback& callback) { | 691 const GetAvailableSpaceCallback& callback) { |
| 692 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 692 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 693 DCHECK(!callback.is_null()); | 693 DCHECK(!callback.is_null()); |
| 694 | 694 |
| 695 about_resource_loader_->GetAboutResource( | 695 about_resource_loader_->GetAboutResource( |
| 696 base::Bind(&FileSystem::OnGetAboutResource, | 696 base::Bind(&FileSystem::OnGetAboutResource, |
| 697 weak_ptr_factory_.GetWeakPtr(), | 697 weak_ptr_factory_.GetWeakPtr(), |
| 698 callback)); | 698 callback)); |
| 699 } | 699 } |
| 700 | 700 |
| 701 void FileSystem::OnGetAboutResource( | 701 void FileSystem::OnGetAboutResource( |
| 702 const GetAvailableSpaceCallback& callback, | 702 const GetAvailableSpaceCallback& callback, |
| 703 google_apis::DriveApiErrorCode status, | 703 google_apis::DriveApiErrorCode status, |
| 704 scoped_ptr<google_apis::AboutResource> about_resource) { | 704 scoped_ptr<google_apis::AboutResource> about_resource) { |
| 705 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 705 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 706 DCHECK(!callback.is_null()); | 706 DCHECK(!callback.is_null()); |
| 707 | 707 |
| 708 FileError error = GDataToFileError(status); | 708 FileError error = GDataToFileError(status); |
| 709 if (error != FILE_ERROR_OK) { | 709 if (error != FILE_ERROR_OK) { |
| 710 callback.Run(error, -1, -1); | 710 callback.Run(error, -1, -1); |
| 711 return; | 711 return; |
| 712 } | 712 } |
| 713 DCHECK(about_resource); | 713 DCHECK(about_resource); |
| 714 | 714 |
| 715 callback.Run(FILE_ERROR_OK, | 715 callback.Run(FILE_ERROR_OK, |
| 716 about_resource->quota_bytes_total(), | 716 about_resource->quota_bytes_total(), |
| 717 about_resource->quota_bytes_used()); | 717 about_resource->quota_bytes_used()); |
| 718 } | 718 } |
| 719 | 719 |
| 720 void FileSystem::GetShareUrl(const base::FilePath& file_path, | 720 void FileSystem::GetShareUrl(const base::FilePath& file_path, |
| 721 const GURL& embed_origin, | 721 const GURL& embed_origin, |
| 722 const GetShareUrlCallback& callback) { | 722 const GetShareUrlCallback& callback) { |
| 723 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 723 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 724 DCHECK(!callback.is_null()); | 724 DCHECK(!callback.is_null()); |
| 725 | 725 |
| 726 // Resolve the resource id. | 726 // Resolve the resource id. |
| 727 ResourceEntry* entry = new ResourceEntry; | 727 ResourceEntry* entry = new ResourceEntry; |
| 728 base::PostTaskAndReplyWithResult( | 728 base::PostTaskAndReplyWithResult( |
| 729 blocking_task_runner_.get(), | 729 blocking_task_runner_.get(), |
| 730 FROM_HERE, | 730 FROM_HERE, |
| 731 base::Bind(&internal::ResourceMetadata::GetResourceEntryByPath, | 731 base::Bind(&internal::ResourceMetadata::GetResourceEntryByPath, |
| 732 base::Unretained(resource_metadata_), | 732 base::Unretained(resource_metadata_), |
| 733 file_path, | 733 file_path, |
| 734 entry), | 734 entry), |
| 735 base::Bind(&FileSystem::GetShareUrlAfterGetResourceEntry, | 735 base::Bind(&FileSystem::GetShareUrlAfterGetResourceEntry, |
| 736 weak_ptr_factory_.GetWeakPtr(), | 736 weak_ptr_factory_.GetWeakPtr(), |
| 737 file_path, | 737 file_path, |
| 738 embed_origin, | 738 embed_origin, |
| 739 callback, | 739 callback, |
| 740 base::Owned(entry))); | 740 base::Owned(entry))); |
| 741 } | 741 } |
| 742 | 742 |
| 743 void FileSystem::GetShareUrlAfterGetResourceEntry( | 743 void FileSystem::GetShareUrlAfterGetResourceEntry( |
| 744 const base::FilePath& file_path, | 744 const base::FilePath& file_path, |
| 745 const GURL& embed_origin, | 745 const GURL& embed_origin, |
| 746 const GetShareUrlCallback& callback, | 746 const GetShareUrlCallback& callback, |
| 747 ResourceEntry* entry, | 747 ResourceEntry* entry, |
| 748 FileError error) { | 748 FileError error) { |
| 749 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 749 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 750 DCHECK(!callback.is_null()); | 750 DCHECK(!callback.is_null()); |
| 751 | 751 |
| 752 if (error != FILE_ERROR_OK) { | 752 if (error != FILE_ERROR_OK) { |
| 753 callback.Run(error, GURL()); | 753 callback.Run(error, GURL()); |
| 754 return; | 754 return; |
| 755 } | 755 } |
| 756 if (entry->resource_id().empty()) { | 756 if (entry->resource_id().empty()) { |
| 757 // This entry does not exist on the server. Just return. | 757 // This entry does not exist on the server. Just return. |
| 758 callback.Run(FILE_ERROR_FAILED, GURL()); | 758 callback.Run(FILE_ERROR_FAILED, GURL()); |
| 759 return; | 759 return; |
| 760 } | 760 } |
| 761 | 761 |
| 762 scheduler_->GetShareUrl( | 762 scheduler_->GetShareUrl( |
| 763 entry->resource_id(), | 763 entry->resource_id(), |
| 764 embed_origin, | 764 embed_origin, |
| 765 ClientContext(USER_INITIATED), | 765 ClientContext(USER_INITIATED), |
| 766 base::Bind(&FileSystem::OnGetResourceEntryForGetShareUrl, | 766 base::Bind(&FileSystem::OnGetResourceEntryForGetShareUrl, |
| 767 weak_ptr_factory_.GetWeakPtr(), | 767 weak_ptr_factory_.GetWeakPtr(), |
| 768 callback)); | 768 callback)); |
| 769 } | 769 } |
| 770 | 770 |
| 771 void FileSystem::OnGetResourceEntryForGetShareUrl( | 771 void FileSystem::OnGetResourceEntryForGetShareUrl( |
| 772 const GetShareUrlCallback& callback, | 772 const GetShareUrlCallback& callback, |
| 773 google_apis::DriveApiErrorCode status, | 773 google_apis::DriveApiErrorCode status, |
| 774 const GURL& share_url) { | 774 const GURL& share_url) { |
| 775 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 775 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 776 DCHECK(!callback.is_null()); | 776 DCHECK(!callback.is_null()); |
| 777 | 777 |
| 778 FileError error = GDataToFileError(status); | 778 FileError error = GDataToFileError(status); |
| 779 if (error != FILE_ERROR_OK) { | 779 if (error != FILE_ERROR_OK) { |
| 780 callback.Run(error, GURL()); | 780 callback.Run(error, GURL()); |
| 781 return; | 781 return; |
| 782 } | 782 } |
| 783 | 783 |
| 784 if (share_url.is_empty()) { | 784 if (share_url.is_empty()) { |
| 785 callback.Run(FILE_ERROR_FAILED, GURL()); | 785 callback.Run(FILE_ERROR_FAILED, GURL()); |
| 786 return; | 786 return; |
| 787 } | 787 } |
| 788 | 788 |
| 789 callback.Run(FILE_ERROR_OK, share_url); | 789 callback.Run(FILE_ERROR_OK, share_url); |
| 790 } | 790 } |
| 791 | 791 |
| 792 void FileSystem::Search(const std::string& search_query, | 792 void FileSystem::Search(const std::string& search_query, |
| 793 const GURL& next_link, | 793 const GURL& next_link, |
| 794 const SearchCallback& callback) { | 794 const SearchCallback& callback) { |
| 795 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 795 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 796 DCHECK(!callback.is_null()); | 796 DCHECK(!callback.is_null()); |
| 797 search_operation_->Search(search_query, next_link, callback); | 797 search_operation_->Search(search_query, next_link, callback); |
| 798 } | 798 } |
| 799 | 799 |
| 800 void FileSystem::SearchMetadata(const std::string& query, | 800 void FileSystem::SearchMetadata(const std::string& query, |
| 801 int options, | 801 int options, |
| 802 int at_most_num_matches, | 802 int at_most_num_matches, |
| 803 const SearchMetadataCallback& callback) { | 803 const SearchMetadataCallback& callback) { |
| 804 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 804 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 805 | 805 |
| 806 // TODO(satorux): Stop handling hide_hosted_docs here. crbug.com/256520. | 806 // TODO(satorux): Stop handling hide_hosted_docs here. crbug.com/256520. |
| 807 if (pref_service_->GetBoolean(prefs::kDisableDriveHostedFiles)) | 807 if (pref_service_->GetBoolean(prefs::kDisableDriveHostedFiles)) |
| 808 options |= SEARCH_METADATA_EXCLUDE_HOSTED_DOCUMENTS; | 808 options |= SEARCH_METADATA_EXCLUDE_HOSTED_DOCUMENTS; |
| 809 | 809 |
| 810 drive::internal::SearchMetadata( | 810 drive::internal::SearchMetadata( |
| 811 blocking_task_runner_, resource_metadata_, query, | 811 blocking_task_runner_, resource_metadata_, query, |
| 812 base::Bind(&drive::internal::MatchesType, options), at_most_num_matches, | 812 base::Bind(&drive::internal::MatchesType, options), at_most_num_matches, |
| 813 callback); | 813 callback); |
| 814 } | 814 } |
| 815 | 815 |
| 816 void FileSystem::SearchByHashes(const std::set<std::string>& hashes, | 816 void FileSystem::SearchByHashes(const std::set<std::string>& hashes, |
| 817 const SearchByHashesCallback& callback) { | 817 const SearchByHashesCallback& callback) { |
| 818 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 818 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 819 drive::internal::SearchMetadata( | 819 drive::internal::SearchMetadata( |
| 820 blocking_task_runner_, resource_metadata_, | 820 blocking_task_runner_, resource_metadata_, |
| 821 /* any file name */ "", base::Bind(&CheckHashes, hashes), | 821 /* any file name */ "", base::Bind(&CheckHashes, hashes), |
| 822 std::numeric_limits<size_t>::max(), | 822 std::numeric_limits<size_t>::max(), |
| 823 base::Bind(&RunSearchByHashesCallback, callback)); | 823 base::Bind(&RunSearchByHashesCallback, callback)); |
| 824 } | 824 } |
| 825 | 825 |
| 826 void FileSystem::OnFileChangedByOperation(const FileChange& changed_files) { | 826 void FileSystem::OnFileChangedByOperation(const FileChange& changed_files) { |
| 827 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 827 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 828 | 828 |
| 829 FOR_EACH_OBSERVER( | 829 FOR_EACH_OBSERVER( |
| 830 FileSystemObserver, observers_, OnFileChanged(changed_files)); | 830 FileSystemObserver, observers_, OnFileChanged(changed_files)); |
| 831 } | 831 } |
| 832 | 832 |
| 833 void FileSystem::OnEntryUpdatedByOperation(const ClientContext& context, | 833 void FileSystem::OnEntryUpdatedByOperation(const ClientContext& context, |
| 834 const std::string& local_id) { | 834 const std::string& local_id) { |
| 835 sync_client_->AddUpdateTask(context, local_id); | 835 sync_client_->AddUpdateTask(context, local_id); |
| 836 } | 836 } |
| 837 | 837 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 861 observers_, | 861 observers_, |
| 862 OnDriveSyncError(type, *file_path)); | 862 OnDriveSyncError(type, *file_path)); |
| 863 } | 863 } |
| 864 | 864 |
| 865 bool FileSystem::WaitForSyncComplete(const std::string& local_id, | 865 bool FileSystem::WaitForSyncComplete(const std::string& local_id, |
| 866 const FileOperationCallback& callback) { | 866 const FileOperationCallback& callback) { |
| 867 return sync_client_->WaitForUpdateTaskToComplete(local_id, callback); | 867 return sync_client_->WaitForUpdateTaskToComplete(local_id, callback); |
| 868 } | 868 } |
| 869 | 869 |
| 870 void FileSystem::OnDirectoryReloaded(const base::FilePath& directory_path) { | 870 void FileSystem::OnDirectoryReloaded(const base::FilePath& directory_path) { |
| 871 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 871 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 872 | 872 |
| 873 FOR_EACH_OBSERVER( | 873 FOR_EACH_OBSERVER( |
| 874 FileSystemObserver, observers_, OnDirectoryChanged(directory_path)); | 874 FileSystemObserver, observers_, OnDirectoryChanged(directory_path)); |
| 875 } | 875 } |
| 876 | 876 |
| 877 void FileSystem::OnFileChanged(const FileChange& changed_files) { | 877 void FileSystem::OnFileChanged(const FileChange& changed_files) { |
| 878 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 878 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 879 | 879 |
| 880 FOR_EACH_OBSERVER( | 880 FOR_EACH_OBSERVER( |
| 881 FileSystemObserver, observers_, OnFileChanged(changed_files)); | 881 FileSystemObserver, observers_, OnFileChanged(changed_files)); |
| 882 } | 882 } |
| 883 | 883 |
| 884 void FileSystem::OnLoadFromServerComplete() { | 884 void FileSystem::OnLoadFromServerComplete() { |
| 885 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 885 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 886 | 886 |
| 887 sync_client_->StartCheckingExistingPinnedFiles(); | 887 sync_client_->StartCheckingExistingPinnedFiles(); |
| 888 } | 888 } |
| 889 | 889 |
| 890 void FileSystem::OnInitialLoadComplete() { | 890 void FileSystem::OnInitialLoadComplete() { |
| 891 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 891 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 892 | 892 |
| 893 blocking_task_runner_->PostTask(FROM_HERE, | 893 blocking_task_runner_->PostTask(FROM_HERE, |
| 894 base::Bind(&internal::RemoveStaleCacheFiles, | 894 base::Bind(&internal::RemoveStaleCacheFiles, |
| 895 cache_, | 895 cache_, |
| 896 resource_metadata_)); | 896 resource_metadata_)); |
| 897 sync_client_->StartProcessingBacklog(); | 897 sync_client_->StartProcessingBacklog(); |
| 898 } | 898 } |
| 899 | 899 |
| 900 void FileSystem::GetMetadata( | 900 void FileSystem::GetMetadata( |
| 901 const GetFilesystemMetadataCallback& callback) { | 901 const GetFilesystemMetadataCallback& callback) { |
| 902 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 902 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 903 DCHECK(!callback.is_null()); | 903 DCHECK(!callback.is_null()); |
| 904 | 904 |
| 905 FileSystemMetadata metadata; | 905 FileSystemMetadata metadata; |
| 906 metadata.refreshing = change_list_loader_->IsRefreshing(); | 906 metadata.refreshing = change_list_loader_->IsRefreshing(); |
| 907 | 907 |
| 908 // Metadata related to delta update. | 908 // Metadata related to delta update. |
| 909 metadata.last_update_check_time = last_update_check_time_; | 909 metadata.last_update_check_time = last_update_check_time_; |
| 910 metadata.last_update_check_error = last_update_check_error_; | 910 metadata.last_update_check_error = last_update_check_error_; |
| 911 | 911 |
| 912 int64* largest_changestamp = new int64(0); | 912 int64* largest_changestamp = new int64(0); |
| 913 base::PostTaskAndReplyWithResult( | 913 base::PostTaskAndReplyWithResult( |
| 914 blocking_task_runner_.get(), | 914 blocking_task_runner_.get(), |
| 915 FROM_HERE, | 915 FROM_HERE, |
| 916 base::Bind(&internal::ResourceMetadata::GetLargestChangestamp, | 916 base::Bind(&internal::ResourceMetadata::GetLargestChangestamp, |
| 917 base::Unretained(resource_metadata_), | 917 base::Unretained(resource_metadata_), |
| 918 largest_changestamp), | 918 largest_changestamp), |
| 919 base::Bind(&OnGetLargestChangestamp, | 919 base::Bind(&OnGetLargestChangestamp, |
| 920 metadata, | 920 metadata, |
| 921 callback, | 921 callback, |
| 922 base::Owned(largest_changestamp))); | 922 base::Owned(largest_changestamp))); |
| 923 } | 923 } |
| 924 | 924 |
| 925 void FileSystem::MarkCacheFileAsMounted( | 925 void FileSystem::MarkCacheFileAsMounted( |
| 926 const base::FilePath& drive_file_path, | 926 const base::FilePath& drive_file_path, |
| 927 const MarkMountedCallback& callback) { | 927 const MarkMountedCallback& callback) { |
| 928 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 928 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 929 DCHECK(!callback.is_null()); | 929 DCHECK(!callback.is_null()); |
| 930 | 930 |
| 931 base::FilePath* cache_file_path = new base::FilePath; | 931 base::FilePath* cache_file_path = new base::FilePath; |
| 932 base::PostTaskAndReplyWithResult( | 932 base::PostTaskAndReplyWithResult( |
| 933 blocking_task_runner_.get(), | 933 blocking_task_runner_.get(), |
| 934 FROM_HERE, | 934 FROM_HERE, |
| 935 base::Bind(&MarkCacheFileAsMountedInternal, | 935 base::Bind(&MarkCacheFileAsMountedInternal, |
| 936 resource_metadata_, | 936 resource_metadata_, |
| 937 cache_, | 937 cache_, |
| 938 drive_file_path, | 938 drive_file_path, |
| 939 cache_file_path), | 939 cache_file_path), |
| 940 base::Bind( | 940 base::Bind( |
| 941 &RunMarkMountedCallback, callback, base::Owned(cache_file_path))); | 941 &RunMarkMountedCallback, callback, base::Owned(cache_file_path))); |
| 942 } | 942 } |
| 943 | 943 |
| 944 void FileSystem::MarkCacheFileAsUnmounted( | 944 void FileSystem::MarkCacheFileAsUnmounted( |
| 945 const base::FilePath& cache_file_path, | 945 const base::FilePath& cache_file_path, |
| 946 const FileOperationCallback& callback) { | 946 const FileOperationCallback& callback) { |
| 947 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 947 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 948 DCHECK(!callback.is_null()); | 948 DCHECK(!callback.is_null()); |
| 949 | 949 |
| 950 if (!cache_->IsUnderFileCacheDirectory(cache_file_path)) { | 950 if (!cache_->IsUnderFileCacheDirectory(cache_file_path)) { |
| 951 callback.Run(FILE_ERROR_FAILED); | 951 callback.Run(FILE_ERROR_FAILED); |
| 952 return; | 952 return; |
| 953 } | 953 } |
| 954 | 954 |
| 955 base::PostTaskAndReplyWithResult( | 955 base::PostTaskAndReplyWithResult( |
| 956 blocking_task_runner_.get(), | 956 blocking_task_runner_.get(), |
| 957 FROM_HERE, | 957 FROM_HERE, |
| 958 base::Bind(&internal::FileCache::MarkAsUnmounted, | 958 base::Bind(&internal::FileCache::MarkAsUnmounted, |
| 959 base::Unretained(cache_), | 959 base::Unretained(cache_), |
| 960 cache_file_path), | 960 cache_file_path), |
| 961 callback); | 961 callback); |
| 962 } | 962 } |
| 963 | 963 |
| 964 void FileSystem::AddPermission(const base::FilePath& drive_file_path, | 964 void FileSystem::AddPermission(const base::FilePath& drive_file_path, |
| 965 const std::string& email, | 965 const std::string& email, |
| 966 google_apis::drive::PermissionRole role, | 966 google_apis::drive::PermissionRole role, |
| 967 const FileOperationCallback& callback) { | 967 const FileOperationCallback& callback) { |
| 968 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 968 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 969 DCHECK(!callback.is_null()); | 969 DCHECK(!callback.is_null()); |
| 970 | 970 |
| 971 // Resolve the resource id. | 971 // Resolve the resource id. |
| 972 ResourceEntry* const entry = new ResourceEntry; | 972 ResourceEntry* const entry = new ResourceEntry; |
| 973 base::PostTaskAndReplyWithResult( | 973 base::PostTaskAndReplyWithResult( |
| 974 blocking_task_runner_.get(), | 974 blocking_task_runner_.get(), |
| 975 FROM_HERE, | 975 FROM_HERE, |
| 976 base::Bind(&internal::ResourceMetadata::GetResourceEntryByPath, | 976 base::Bind(&internal::ResourceMetadata::GetResourceEntryByPath, |
| 977 base::Unretained(resource_metadata_), | 977 base::Unretained(resource_metadata_), |
| 978 drive_file_path, | 978 drive_file_path, |
| 979 entry), | 979 entry), |
| 980 base::Bind(&FileSystem::AddPermissionAfterGetResourceEntry, | 980 base::Bind(&FileSystem::AddPermissionAfterGetResourceEntry, |
| 981 weak_ptr_factory_.GetWeakPtr(), | 981 weak_ptr_factory_.GetWeakPtr(), |
| 982 email, | 982 email, |
| 983 role, | 983 role, |
| 984 callback, | 984 callback, |
| 985 base::Owned(entry))); | 985 base::Owned(entry))); |
| 986 } | 986 } |
| 987 | 987 |
| 988 void FileSystem::AddPermissionAfterGetResourceEntry( | 988 void FileSystem::AddPermissionAfterGetResourceEntry( |
| 989 const std::string& email, | 989 const std::string& email, |
| 990 google_apis::drive::PermissionRole role, | 990 google_apis::drive::PermissionRole role, |
| 991 const FileOperationCallback& callback, | 991 const FileOperationCallback& callback, |
| 992 ResourceEntry* entry, | 992 ResourceEntry* entry, |
| 993 FileError error) { | 993 FileError error) { |
| 994 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 994 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 995 | 995 |
| 996 if (error != FILE_ERROR_OK) { | 996 if (error != FILE_ERROR_OK) { |
| 997 callback.Run(error); | 997 callback.Run(error); |
| 998 return; | 998 return; |
| 999 } | 999 } |
| 1000 | 1000 |
| 1001 scheduler_->AddPermission( | 1001 scheduler_->AddPermission( |
| 1002 entry->resource_id(), | 1002 entry->resource_id(), |
| 1003 email, | 1003 email, |
| 1004 role, | 1004 role, |
| 1005 base::Bind(&RunFileOperationCallbackAsEntryActionCallback, callback)); | 1005 base::Bind(&RunFileOperationCallbackAsEntryActionCallback, callback)); |
| 1006 } | 1006 } |
| 1007 | 1007 |
| 1008 void FileSystem::SetProperty( | 1008 void FileSystem::SetProperty( |
| 1009 const base::FilePath& drive_file_path, | 1009 const base::FilePath& drive_file_path, |
| 1010 google_apis::drive::Property::Visibility visibility, | 1010 google_apis::drive::Property::Visibility visibility, |
| 1011 const std::string& key, | 1011 const std::string& key, |
| 1012 const std::string& value, | 1012 const std::string& value, |
| 1013 const FileOperationCallback& callback) { | 1013 const FileOperationCallback& callback) { |
| 1014 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1014 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1015 DCHECK(!callback.is_null()); | 1015 DCHECK(!callback.is_null()); |
| 1016 | 1016 |
| 1017 set_property_operation_->SetProperty(drive_file_path, visibility, key, value, | 1017 set_property_operation_->SetProperty(drive_file_path, visibility, key, value, |
| 1018 callback); | 1018 callback); |
| 1019 } | 1019 } |
| 1020 | 1020 |
| 1021 void FileSystem::OpenFile(const base::FilePath& file_path, | 1021 void FileSystem::OpenFile(const base::FilePath& file_path, |
| 1022 OpenMode open_mode, | 1022 OpenMode open_mode, |
| 1023 const std::string& mime_type, | 1023 const std::string& mime_type, |
| 1024 const OpenFileCallback& callback) { | 1024 const OpenFileCallback& callback) { |
| 1025 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1025 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1026 DCHECK(!callback.is_null()); | 1026 DCHECK(!callback.is_null()); |
| 1027 | 1027 |
| 1028 open_file_operation_->OpenFile(file_path, open_mode, mime_type, callback); | 1028 open_file_operation_->OpenFile(file_path, open_mode, mime_type, callback); |
| 1029 } | 1029 } |
| 1030 | 1030 |
| 1031 void FileSystem::GetPathFromResourceId(const std::string& resource_id, | 1031 void FileSystem::GetPathFromResourceId(const std::string& resource_id, |
| 1032 const GetFilePathCallback& callback) { | 1032 const GetFilePathCallback& callback) { |
| 1033 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1033 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1034 DCHECK(!callback.is_null()); | 1034 DCHECK(!callback.is_null()); |
| 1035 | 1035 |
| 1036 base::FilePath* const file_path = new base::FilePath(); | 1036 base::FilePath* const file_path = new base::FilePath(); |
| 1037 base::PostTaskAndReplyWithResult( | 1037 base::PostTaskAndReplyWithResult( |
| 1038 blocking_task_runner_.get(), | 1038 blocking_task_runner_.get(), |
| 1039 FROM_HERE, | 1039 FROM_HERE, |
| 1040 base::Bind(&GetPathFromResourceIdOnBlockingPool, | 1040 base::Bind(&GetPathFromResourceIdOnBlockingPool, |
| 1041 resource_metadata_, | 1041 resource_metadata_, |
| 1042 resource_id, | 1042 resource_id, |
| 1043 file_path), | 1043 file_path), |
| 1044 base::Bind(&GetPathFromResourceIdAfterGetPath, | 1044 base::Bind(&GetPathFromResourceIdAfterGetPath, |
| 1045 base::Owned(file_path), | 1045 base::Owned(file_path), |
| 1046 callback)); | 1046 callback)); |
| 1047 } | 1047 } |
| 1048 | 1048 |
| 1049 void FileSystem::FreeDiskSpaceIfNeededFor( | 1049 void FileSystem::FreeDiskSpaceIfNeededFor( |
| 1050 int64 num_bytes, | 1050 int64 num_bytes, |
| 1051 const FreeDiskSpaceCallback& callback) { | 1051 const FreeDiskSpaceCallback& callback) { |
| 1052 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1052 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 1053 DCHECK(!callback.is_null()); | 1053 DCHECK(!callback.is_null()); |
| 1054 base::PostTaskAndReplyWithResult( | 1054 base::PostTaskAndReplyWithResult( |
| 1055 blocking_task_runner_.get(), FROM_HERE, | 1055 blocking_task_runner_.get(), FROM_HERE, |
| 1056 base::Bind(&FreeDiskSpaceIfNeededForOnBlockingPool, cache_, num_bytes), | 1056 base::Bind(&FreeDiskSpaceIfNeededForOnBlockingPool, cache_, num_bytes), |
| 1057 callback); | 1057 callback); |
| 1058 } | 1058 } |
| 1059 } // namespace drive | 1059 } // namespace drive |
| OLD | NEW |