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_cache.h" | 5 #include "chrome/browser/chromeos/drive/file_cache.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
10 #include "base/files/file_enumerator.h" | 10 #include "base/files/file_enumerator.h" |
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 } // namespace | 281 } // namespace |
282 | 282 |
283 FileCache::FileCache(const base::FilePath& cache_root_path, | 283 FileCache::FileCache(const base::FilePath& cache_root_path, |
284 base::SequencedTaskRunner* blocking_task_runner, | 284 base::SequencedTaskRunner* blocking_task_runner, |
285 FreeDiskSpaceGetterInterface* free_disk_space_getter) | 285 FreeDiskSpaceGetterInterface* free_disk_space_getter) |
286 : cache_root_path_(cache_root_path), | 286 : cache_root_path_(cache_root_path), |
287 cache_paths_(GetCachePaths(cache_root_path_)), | 287 cache_paths_(GetCachePaths(cache_root_path_)), |
288 blocking_task_runner_(blocking_task_runner), | 288 blocking_task_runner_(blocking_task_runner), |
289 free_disk_space_getter_(free_disk_space_getter), | 289 free_disk_space_getter_(free_disk_space_getter), |
290 weak_ptr_factory_(this) { | 290 weak_ptr_factory_(this) { |
291 DCHECK(blocking_task_runner_); | 291 DCHECK(blocking_task_runner_.get()); |
292 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 292 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
293 } | 293 } |
294 | 294 |
295 FileCache::~FileCache() { | 295 FileCache::~FileCache() { |
296 // Must be on the sequenced worker pool, as |metadata_| must be deleted on | 296 // Must be on the sequenced worker pool, as |metadata_| must be deleted on |
297 // the sequenced worker pool. | 297 // the sequenced worker pool. |
298 AssertOnSequencedWorkerPool(); | 298 AssertOnSequencedWorkerPool(); |
299 } | 299 } |
300 | 300 |
301 base::FilePath FileCache::GetCacheDirectoryPath( | 301 base::FilePath FileCache::GetCacheDirectoryPath( |
(...skipping 27 matching lines...) Expand all Loading... |
329 if (file_origin == CACHED_FILE_MOUNTED) { | 329 if (file_origin == CACHED_FILE_MOUNTED) { |
330 DCHECK(sub_dir_type == CACHE_TYPE_PERSISTENT); | 330 DCHECK(sub_dir_type == CACHE_TYPE_PERSISTENT); |
331 base_name += base::FilePath::kExtensionSeparator; | 331 base_name += base::FilePath::kExtensionSeparator; |
332 base_name += util::kMountedArchiveFileExtension; | 332 base_name += util::kMountedArchiveFileExtension; |
333 } | 333 } |
334 return GetCacheDirectoryPath(sub_dir_type).Append( | 334 return GetCacheDirectoryPath(sub_dir_type).Append( |
335 base::FilePath::FromUTF8Unsafe(base_name)); | 335 base::FilePath::FromUTF8Unsafe(base_name)); |
336 } | 336 } |
337 | 337 |
338 void FileCache::AssertOnSequencedWorkerPool() { | 338 void FileCache::AssertOnSequencedWorkerPool() { |
339 DCHECK(!blocking_task_runner_ || | 339 DCHECK(!blocking_task_runner_.get() || |
340 blocking_task_runner_->RunsTasksOnCurrentThread()); | 340 blocking_task_runner_->RunsTasksOnCurrentThread()); |
341 } | 341 } |
342 | 342 |
343 bool FileCache::IsUnderFileCacheDirectory(const base::FilePath& path) const { | 343 bool FileCache::IsUnderFileCacheDirectory(const base::FilePath& path) const { |
344 return cache_root_path_ == path || cache_root_path_.IsParent(path); | 344 return cache_root_path_ == path || cache_root_path_.IsParent(path); |
345 } | 345 } |
346 | 346 |
347 void FileCache::GetCacheEntryOnUIThread(const std::string& resource_id, | 347 void FileCache::GetCacheEntryOnUIThread(const std::string& resource_id, |
348 const std::string& md5, | 348 const std::string& md5, |
349 const GetCacheEntryCallback& callback) { | 349 const GetCacheEntryCallback& callback) { |
350 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 350 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
351 DCHECK(!callback.is_null()); | 351 DCHECK(!callback.is_null()); |
352 | 352 |
353 FileCacheEntry* cache_entry = new FileCacheEntry; | 353 FileCacheEntry* cache_entry = new FileCacheEntry; |
354 base::PostTaskAndReplyWithResult( | 354 base::PostTaskAndReplyWithResult( |
355 blocking_task_runner_, | 355 blocking_task_runner_.get(), |
356 FROM_HERE, | 356 FROM_HERE, |
357 base::Bind(&FileCache::GetCacheEntry, | 357 base::Bind(&FileCache::GetCacheEntry, |
358 base::Unretained(this), resource_id, md5, cache_entry), | 358 base::Unretained(this), |
359 base::Bind(&RunGetCacheEntryCallback, | 359 resource_id, |
360 callback, base::Owned(cache_entry))); | 360 md5, |
| 361 cache_entry), |
| 362 base::Bind( |
| 363 &RunGetCacheEntryCallback, callback, base::Owned(cache_entry))); |
361 } | 364 } |
362 | 365 |
363 bool FileCache::GetCacheEntry(const std::string& resource_id, | 366 bool FileCache::GetCacheEntry(const std::string& resource_id, |
364 const std::string& md5, | 367 const std::string& md5, |
365 FileCacheEntry* entry) { | 368 FileCacheEntry* entry) { |
366 DCHECK(entry); | 369 DCHECK(entry); |
367 AssertOnSequencedWorkerPool(); | 370 AssertOnSequencedWorkerPool(); |
368 return metadata_->GetCacheEntry(resource_id, entry) && | 371 return metadata_->GetCacheEntry(resource_id, entry) && |
369 CheckIfMd5Matches(md5, *entry); | 372 CheckIfMd5Matches(md5, *entry); |
370 } | 373 } |
(...skipping 23 matching lines...) Expand all Loading... |
394 DCHECK(!it->HasError()); | 397 DCHECK(!it->HasError()); |
395 } | 398 } |
396 | 399 |
397 void FileCache::FreeDiskSpaceIfNeededForOnUIThread( | 400 void FileCache::FreeDiskSpaceIfNeededForOnUIThread( |
398 int64 num_bytes, | 401 int64 num_bytes, |
399 const InitializeCacheCallback& callback) { | 402 const InitializeCacheCallback& callback) { |
400 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 403 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
401 DCHECK(!callback.is_null()); | 404 DCHECK(!callback.is_null()); |
402 | 405 |
403 base::PostTaskAndReplyWithResult( | 406 base::PostTaskAndReplyWithResult( |
404 blocking_task_runner_, | 407 blocking_task_runner_.get(), |
405 FROM_HERE, | 408 FROM_HERE, |
406 base::Bind(&FileCache::FreeDiskSpaceIfNeededFor, | 409 base::Bind(&FileCache::FreeDiskSpaceIfNeededFor, |
407 base::Unretained(this), | 410 base::Unretained(this), |
408 num_bytes), | 411 num_bytes), |
409 callback); | 412 callback); |
410 } | 413 } |
411 | 414 |
412 bool FileCache::FreeDiskSpaceIfNeededFor(int64 num_bytes) { | 415 bool FileCache::FreeDiskSpaceIfNeededFor(int64 num_bytes) { |
413 AssertOnSequencedWorkerPool(); | 416 AssertOnSequencedWorkerPool(); |
414 | 417 |
(...skipping 19 matching lines...) Expand all Loading... |
434 return HasEnoughSpaceFor(num_bytes, cache_root_path_); | 437 return HasEnoughSpaceFor(num_bytes, cache_root_path_); |
435 } | 438 } |
436 | 439 |
437 void FileCache::GetFileOnUIThread(const std::string& resource_id, | 440 void FileCache::GetFileOnUIThread(const std::string& resource_id, |
438 const std::string& md5, | 441 const std::string& md5, |
439 const GetFileFromCacheCallback& callback) { | 442 const GetFileFromCacheCallback& callback) { |
440 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 443 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
441 DCHECK(!callback.is_null()); | 444 DCHECK(!callback.is_null()); |
442 | 445 |
443 base::FilePath* cache_file_path = new base::FilePath; | 446 base::FilePath* cache_file_path = new base::FilePath; |
444 base::PostTaskAndReplyWithResult( | 447 base::PostTaskAndReplyWithResult(blocking_task_runner_.get(), |
445 blocking_task_runner_, | 448 FROM_HERE, |
446 FROM_HERE, | 449 base::Bind(&FileCache::GetFile, |
447 base::Bind(&FileCache::GetFile, | 450 base::Unretained(this), |
448 base::Unretained(this), resource_id, md5, cache_file_path), | 451 resource_id, |
449 base::Bind(&RunGetFileFromCacheCallback, | 452 md5, |
450 callback, base::Owned(cache_file_path))); | 453 cache_file_path), |
| 454 base::Bind(&RunGetFileFromCacheCallback, |
| 455 callback, |
| 456 base::Owned(cache_file_path))); |
451 } | 457 } |
452 | 458 |
453 FileError FileCache::GetFile(const std::string& resource_id, | 459 FileError FileCache::GetFile(const std::string& resource_id, |
454 const std::string& md5, | 460 const std::string& md5, |
455 base::FilePath* cache_file_path) { | 461 base::FilePath* cache_file_path) { |
456 AssertOnSequencedWorkerPool(); | 462 AssertOnSequencedWorkerPool(); |
457 DCHECK(cache_file_path); | 463 DCHECK(cache_file_path); |
458 | 464 |
459 FileCacheEntry cache_entry; | 465 FileCacheEntry cache_entry; |
460 if (!GetCacheEntry(resource_id, md5, &cache_entry) || | 466 if (!GetCacheEntry(resource_id, md5, &cache_entry) || |
(...skipping 17 matching lines...) Expand all Loading... |
478 } | 484 } |
479 | 485 |
480 void FileCache::StoreOnUIThread(const std::string& resource_id, | 486 void FileCache::StoreOnUIThread(const std::string& resource_id, |
481 const std::string& md5, | 487 const std::string& md5, |
482 const base::FilePath& source_path, | 488 const base::FilePath& source_path, |
483 FileOperationType file_operation_type, | 489 FileOperationType file_operation_type, |
484 const FileOperationCallback& callback) { | 490 const FileOperationCallback& callback) { |
485 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 491 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
486 DCHECK(!callback.is_null()); | 492 DCHECK(!callback.is_null()); |
487 | 493 |
488 base::PostTaskAndReplyWithResult( | 494 base::PostTaskAndReplyWithResult(blocking_task_runner_.get(), |
489 blocking_task_runner_, | 495 FROM_HERE, |
490 FROM_HERE, | 496 base::Bind(&FileCache::Store, |
491 base::Bind(&FileCache::Store, | 497 base::Unretained(this), |
492 base::Unretained(this), | 498 resource_id, |
493 resource_id, md5, source_path, file_operation_type), | 499 md5, |
494 callback); | 500 source_path, |
| 501 file_operation_type), |
| 502 callback); |
495 } | 503 } |
496 | 504 |
497 FileError FileCache::Store(const std::string& resource_id, | 505 FileError FileCache::Store(const std::string& resource_id, |
498 const std::string& md5, | 506 const std::string& md5, |
499 const base::FilePath& source_path, | 507 const base::FilePath& source_path, |
500 FileOperationType file_operation_type) { | 508 FileOperationType file_operation_type) { |
501 AssertOnSequencedWorkerPool(); | 509 AssertOnSequencedWorkerPool(); |
502 return StoreInternal(resource_id, md5, source_path, file_operation_type); | 510 return StoreInternal(resource_id, md5, source_path, file_operation_type); |
503 } | 511 } |
504 | 512 |
505 void FileCache::PinOnUIThread(const std::string& resource_id, | 513 void FileCache::PinOnUIThread(const std::string& resource_id, |
506 const std::string& md5, | 514 const std::string& md5, |
507 const FileOperationCallback& callback) { | 515 const FileOperationCallback& callback) { |
508 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 516 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
509 DCHECK(!callback.is_null()); | 517 DCHECK(!callback.is_null()); |
510 | 518 |
511 base::PostTaskAndReplyWithResult( | 519 base::PostTaskAndReplyWithResult( |
512 blocking_task_runner_, | 520 blocking_task_runner_.get(), |
513 FROM_HERE, | 521 FROM_HERE, |
514 base::Bind(&FileCache::Pin, base::Unretained(this), resource_id, md5), | 522 base::Bind(&FileCache::Pin, base::Unretained(this), resource_id, md5), |
515 callback); | 523 callback); |
516 } | 524 } |
517 | 525 |
518 FileError FileCache::Pin(const std::string& resource_id, | 526 FileError FileCache::Pin(const std::string& resource_id, |
519 const std::string& md5) { | 527 const std::string& md5) { |
520 AssertOnSequencedWorkerPool(); | 528 AssertOnSequencedWorkerPool(); |
521 | 529 |
522 bool is_persistent = true; | 530 bool is_persistent = true; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
559 return FILE_ERROR_OK; | 567 return FILE_ERROR_OK; |
560 } | 568 } |
561 | 569 |
562 void FileCache::UnpinOnUIThread(const std::string& resource_id, | 570 void FileCache::UnpinOnUIThread(const std::string& resource_id, |
563 const std::string& md5, | 571 const std::string& md5, |
564 const FileOperationCallback& callback) { | 572 const FileOperationCallback& callback) { |
565 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 573 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
566 DCHECK(!callback.is_null()); | 574 DCHECK(!callback.is_null()); |
567 | 575 |
568 base::PostTaskAndReplyWithResult( | 576 base::PostTaskAndReplyWithResult( |
569 blocking_task_runner_, | 577 blocking_task_runner_.get(), |
570 FROM_HERE, | 578 FROM_HERE, |
571 base::Bind(&FileCache::Unpin, base::Unretained(this), resource_id, md5), | 579 base::Bind(&FileCache::Unpin, base::Unretained(this), resource_id, md5), |
572 callback); | 580 callback); |
573 } | 581 } |
574 | 582 |
575 FileError FileCache::Unpin(const std::string& resource_id, | 583 FileError FileCache::Unpin(const std::string& resource_id, |
576 const std::string& md5) { | 584 const std::string& md5) { |
577 AssertOnSequencedWorkerPool(); | 585 AssertOnSequencedWorkerPool(); |
578 | 586 |
579 // Unpinning a file means its entry must exist in cache. | 587 // Unpinning a file means its entry must exist in cache. |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
631 } | 639 } |
632 | 640 |
633 void FileCache::MarkAsMountedOnUIThread( | 641 void FileCache::MarkAsMountedOnUIThread( |
634 const std::string& resource_id, | 642 const std::string& resource_id, |
635 const GetFileFromCacheCallback& callback) { | 643 const GetFileFromCacheCallback& callback) { |
636 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 644 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
637 DCHECK(!callback.is_null()); | 645 DCHECK(!callback.is_null()); |
638 | 646 |
639 base::FilePath* cache_file_path = new base::FilePath; | 647 base::FilePath* cache_file_path = new base::FilePath; |
640 base::PostTaskAndReplyWithResult( | 648 base::PostTaskAndReplyWithResult( |
641 blocking_task_runner_, | 649 blocking_task_runner_.get(), |
642 FROM_HERE, | 650 FROM_HERE, |
643 base::Bind(&FileCache::MarkAsMounted, | 651 base::Bind(&FileCache::MarkAsMounted, |
644 base::Unretained(this), resource_id, cache_file_path), | 652 base::Unretained(this), |
645 base::Bind(RunGetFileFromCacheCallback, | 653 resource_id, |
646 callback, base::Owned(cache_file_path))); | 654 cache_file_path), |
| 655 base::Bind( |
| 656 RunGetFileFromCacheCallback, callback, base::Owned(cache_file_path))); |
647 } | 657 } |
648 | 658 |
649 void FileCache::MarkAsUnmountedOnUIThread( | 659 void FileCache::MarkAsUnmountedOnUIThread( |
650 const base::FilePath& file_path, | 660 const base::FilePath& file_path, |
651 const FileOperationCallback& callback) { | 661 const FileOperationCallback& callback) { |
652 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 662 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
653 DCHECK(!callback.is_null()); | 663 DCHECK(!callback.is_null()); |
654 | 664 |
655 base::PostTaskAndReplyWithResult( | 665 base::PostTaskAndReplyWithResult( |
656 blocking_task_runner_, | 666 blocking_task_runner_.get(), |
657 FROM_HERE, | 667 FROM_HERE, |
658 base::Bind(&FileCache::MarkAsUnmounted, | 668 base::Bind( |
659 base::Unretained(this), file_path), | 669 &FileCache::MarkAsUnmounted, base::Unretained(this), file_path), |
660 callback); | 670 callback); |
661 } | 671 } |
662 | 672 |
663 void FileCache::MarkDirtyOnUIThread(const std::string& resource_id, | 673 void FileCache::MarkDirtyOnUIThread(const std::string& resource_id, |
664 const std::string& md5, | 674 const std::string& md5, |
665 const FileOperationCallback& callback) { | 675 const FileOperationCallback& callback) { |
666 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 676 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
667 DCHECK(!callback.is_null()); | 677 DCHECK(!callback.is_null()); |
668 | 678 |
669 base::PostTaskAndReplyWithResult( | 679 base::PostTaskAndReplyWithResult( |
670 blocking_task_runner_, | 680 blocking_task_runner_.get(), |
671 FROM_HERE, | 681 FROM_HERE, |
672 base::Bind(&FileCache::MarkDirty, | 682 base::Bind( |
673 base::Unretained(this), resource_id, md5), | 683 &FileCache::MarkDirty, base::Unretained(this), resource_id, md5), |
674 callback); | 684 callback); |
675 } | 685 } |
676 | 686 |
677 FileError FileCache::MarkDirty(const std::string& resource_id, | 687 FileError FileCache::MarkDirty(const std::string& resource_id, |
678 const std::string& md5) { | 688 const std::string& md5) { |
679 AssertOnSequencedWorkerPool(); | 689 AssertOnSequencedWorkerPool(); |
680 | 690 |
681 // If file has already been marked dirty in previous instance of chrome, we | 691 // If file has already been marked dirty in previous instance of chrome, we |
682 // would have lost the md5 info during cache initialization, because the file | 692 // would have lost the md5 info during cache initialization, because the file |
683 // would have been renamed to .local extension. | 693 // would have been renamed to .local extension. |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
784 metadata_->AddOrUpdateCacheEntry(resource_id, cache_entry); | 794 metadata_->AddOrUpdateCacheEntry(resource_id, cache_entry); |
785 return FILE_ERROR_OK; | 795 return FILE_ERROR_OK; |
786 } | 796 } |
787 | 797 |
788 void FileCache::RemoveOnUIThread(const std::string& resource_id, | 798 void FileCache::RemoveOnUIThread(const std::string& resource_id, |
789 const FileOperationCallback& callback) { | 799 const FileOperationCallback& callback) { |
790 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 800 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
791 DCHECK(!callback.is_null()); | 801 DCHECK(!callback.is_null()); |
792 | 802 |
793 base::PostTaskAndReplyWithResult( | 803 base::PostTaskAndReplyWithResult( |
794 blocking_task_runner_, | 804 blocking_task_runner_.get(), |
795 FROM_HERE, | 805 FROM_HERE, |
796 base::Bind(&FileCache::Remove, | 806 base::Bind(&FileCache::Remove, base::Unretained(this), resource_id), |
797 base::Unretained(this), resource_id), | |
798 callback); | 807 callback); |
799 } | 808 } |
800 | 809 |
801 FileError FileCache::Remove(const std::string& resource_id) { | 810 FileError FileCache::Remove(const std::string& resource_id) { |
802 AssertOnSequencedWorkerPool(); | 811 AssertOnSequencedWorkerPool(); |
803 | 812 |
804 // MD5 is not passed into RemoveCacheEntry because we would delete all | 813 // MD5 is not passed into RemoveCacheEntry because we would delete all |
805 // cache files corresponding to <resource_id> regardless of the md5. | 814 // cache files corresponding to <resource_id> regardless of the md5. |
806 // So, search for entry in cache without taking md5 into account. | 815 // So, search for entry in cache without taking md5 into account. |
807 FileCacheEntry cache_entry; | 816 FileCacheEntry cache_entry; |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 metadata_->RemoveCacheEntry(resource_id); | 855 metadata_->RemoveCacheEntry(resource_id); |
847 | 856 |
848 return FILE_ERROR_OK; | 857 return FILE_ERROR_OK; |
849 } | 858 } |
850 | 859 |
851 void FileCache::ClearAllOnUIThread(const InitializeCacheCallback& callback) { | 860 void FileCache::ClearAllOnUIThread(const InitializeCacheCallback& callback) { |
852 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 861 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
853 DCHECK(!callback.is_null()); | 862 DCHECK(!callback.is_null()); |
854 | 863 |
855 base::PostTaskAndReplyWithResult( | 864 base::PostTaskAndReplyWithResult( |
856 blocking_task_runner_, | 865 blocking_task_runner_.get(), |
857 FROM_HERE, | 866 FROM_HERE, |
858 base::Bind(&FileCache::ClearAll, base::Unretained(this)), | 867 base::Bind(&FileCache::ClearAll, base::Unretained(this)), |
859 callback); | 868 callback); |
860 } | 869 } |
861 | 870 |
862 void FileCache::RequestInitialize(const InitializeCacheCallback& callback) { | 871 void FileCache::RequestInitialize(const InitializeCacheCallback& callback) { |
863 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 872 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
864 DCHECK(!callback.is_null()); | 873 DCHECK(!callback.is_null()); |
865 | 874 |
866 base::PostTaskAndReplyWithResult( | 875 base::PostTaskAndReplyWithResult( |
867 blocking_task_runner_, | 876 blocking_task_runner_.get(), |
868 FROM_HERE, | 877 FROM_HERE, |
869 base::Bind(&FileCache::InitializeOnBlockingPool, base::Unretained(this)), | 878 base::Bind(&FileCache::InitializeOnBlockingPool, base::Unretained(this)), |
870 callback); | 879 callback); |
871 } | 880 } |
872 | 881 |
873 void FileCache::Destroy() { | 882 void FileCache::Destroy() { |
874 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 883 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
875 | 884 |
876 // Invalidate the weak pointer. | 885 // Invalidate the weak pointer. |
877 weak_ptr_factory_.InvalidateWeakPtrs(); | 886 weak_ptr_factory_.InvalidateWeakPtrs(); |
878 | 887 |
879 // Destroy myself on the blocking pool. | 888 // Destroy myself on the blocking pool. |
880 // Note that base::DeletePointer<> cannot be used as the destructor of this | 889 // Note that base::DeletePointer<> cannot be used as the destructor of this |
881 // class is private. | 890 // class is private. |
882 blocking_task_runner_->PostTask( | 891 blocking_task_runner_->PostTask( |
883 FROM_HERE, | 892 FROM_HERE, |
884 base::Bind(&FileCache::DestroyOnBlockingPool, base::Unretained(this))); | 893 base::Bind(&FileCache::DestroyOnBlockingPool, base::Unretained(this))); |
885 } | 894 } |
886 | 895 |
887 bool FileCache::InitializeOnBlockingPool() { | 896 bool FileCache::InitializeOnBlockingPool() { |
888 AssertOnSequencedWorkerPool(); | 897 AssertOnSequencedWorkerPool(); |
889 | 898 |
890 if (!InitCachePaths(cache_paths_)) | 899 if (!InitCachePaths(cache_paths_)) |
891 return false; | 900 return false; |
892 | 901 |
893 metadata_.reset(new FileCacheMetadata(blocking_task_runner_)); | 902 metadata_.reset(new FileCacheMetadata(blocking_task_runner_.get())); |
894 | 903 |
895 switch (metadata_->Initialize(cache_paths_[CACHE_TYPE_META])) { | 904 switch (metadata_->Initialize(cache_paths_[CACHE_TYPE_META])) { |
896 case FileCacheMetadata::INITIALIZE_FAILED: | 905 case FileCacheMetadata::INITIALIZE_FAILED: |
897 return false; | 906 return false; |
898 | 907 |
899 case FileCacheMetadata::INITIALIZE_OPENED: // Do nothing. | 908 case FileCacheMetadata::INITIALIZE_OPENED: // Do nothing. |
900 break; | 909 break; |
901 | 910 |
902 case FileCacheMetadata::INITIALIZE_CREATED: { | 911 case FileCacheMetadata::INITIALIZE_CREATED: { |
903 CacheMap cache_map; | 912 CacheMap cache_map; |
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1149 } | 1158 } |
1150 | 1159 |
1151 // static | 1160 // static |
1152 FileCache::CacheSubDirectoryType FileCache::GetSubDirectoryType( | 1161 FileCache::CacheSubDirectoryType FileCache::GetSubDirectoryType( |
1153 const FileCacheEntry& cache_entry) { | 1162 const FileCacheEntry& cache_entry) { |
1154 return cache_entry.is_persistent() ? CACHE_TYPE_PERSISTENT : CACHE_TYPE_TMP; | 1163 return cache_entry.is_persistent() ? CACHE_TYPE_PERSISTENT : CACHE_TYPE_TMP; |
1155 } | 1164 } |
1156 | 1165 |
1157 } // namespace internal | 1166 } // namespace internal |
1158 } // namespace drive | 1167 } // namespace drive |
OLD | NEW |