Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(434)

Side by Side Diff: webkit/fileapi/obfuscated_file_system_file_util.cc

Issue 7717020: Adding Size() to AbstractFileEnumerator (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "webkit/fileapi/obfuscated_file_system_file_util.h" 5 #include "webkit/fileapi/obfuscated_file_system_file_util.h"
6 6
7 #include <queue> 7 #include <queue>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 646 matching lines...) Expand 10 before | Expand all | Expand 10 after
657 // TODO(ericu): This could easily be made faster with help from the database. 657 // TODO(ericu): This could easily be made faster with help from the database.
658 if (!db->ListChildren(file_id, &children)) 658 if (!db->ListChildren(file_id, &children))
659 return true; 659 return true;
660 return children.empty(); 660 return children.empty();
661 } 661 }
662 662
663 class ObfuscatedFileSystemFileEnumerator 663 class ObfuscatedFileSystemFileEnumerator
664 : public FileSystemFileUtil::AbstractFileEnumerator { 664 : public FileSystemFileUtil::AbstractFileEnumerator {
665 public: 665 public:
666 ObfuscatedFileSystemFileEnumerator( 666 ObfuscatedFileSystemFileEnumerator(
667 FileSystemDirectoryDatabase* db, const FilePath& virtual_root_path) 667 const FilePath& base_path,
668 : db_(db) { 668 FileSystemDirectoryDatabase* db,
669 FileSystemOperationContext* context,
ericu 2011/08/25 18:29:30 You're assuming that this context will remain vali
tzik 2011/08/26 02:41:53 Make sense. I added a comment there.
670 FileSystemFileUtil* underlying_file_util,
671 const FilePath& virtual_root_path)
672 : base_path_(base_path),
673 db_(db),
674 context_(context),
675 underlying_file_util_(underlying_file_util) {
kinuko 2011/08/25 09:28:49 DCHECK() for pointers? (db, context, underlying_fu
tzik 2011/08/26 02:41:53 Done.
669 FileId file_id; 676 FileId file_id;
670 FileInfo file_info; 677 FileInfo file_info;
671 if (!db_->GetFileWithPath(virtual_root_path, &file_id)) 678 if (!db_->GetFileWithPath(virtual_root_path, &file_id))
672 return; 679 return;
673 if (!db_->GetFileInfo(file_id, &file_info)) 680 if (!db_->GetFileInfo(file_id, &file_info))
674 return; 681 return;
675 if (!file_info.is_directory()) 682 if (!file_info.is_directory())
676 return; 683 return;
677 FileRecord record = { file_id, file_info, virtual_root_path }; 684 FileRecord record = { file_id, file_info, virtual_root_path };
678 display_queue_.push(record); 685 display_queue_.push(record);
679 Next(); // Enumerators don't include the directory itself. 686 Next(); // Enumerators don't include the directory itself.
680 } 687 }
681 688
682 ~ObfuscatedFileSystemFileEnumerator() {} 689 ~ObfuscatedFileSystemFileEnumerator() {}
683 690
684 virtual FilePath Next() { 691 virtual FilePath Next() OVERRIDE {
685 ProcessRecurseQueue(); 692 ProcessRecurseQueue();
686 if (display_queue_.empty()) 693 if (display_queue_.empty())
687 return FilePath(); 694 return FilePath();
688 current_ = display_queue_.front(); 695 current_ = display_queue_.front();
689 display_queue_.pop(); 696 display_queue_.pop();
690 if (current_.file_info.is_directory()) 697 if (current_.file_info.is_directory())
691 recurse_queue_.push(current_); 698 recurse_queue_.push(current_);
692 return current_.file_path; 699 return current_.file_path;
693 } 700 }
694 701
695 virtual bool IsDirectory() { 702 virtual int64 Size() OVERRIDE {
703 if (IsDirectory())
704 return 0;
705 FileSystemOperationContext context(*context_);
ericu 2011/08/25 18:29:30 There's no need to copy the context here; just pas
tzik 2011/08/26 02:41:53 I see. Done.
706
707 base::PlatformFileInfo file_info;
708 FilePath platform_file_path;
709
710 FilePath local_path = base_path_.Append(current_.file_info.data_path);
711 base::PlatformFileError error = underlying_file_util_->GetFileInfo(
712 &context, local_path, &file_info, &platform_file_path);
713 if (error != base::PLATFORM_FILE_OK) {
714 LOG(WARNING) << "Lost a backing file.";
715 return 0;
716 }
717 return file_info.size;
718 }
719
720 virtual bool IsDirectory() OVERRIDE {
696 return current_.file_info.is_directory(); 721 return current_.file_info.is_directory();
697 } 722 }
698 723
699 private: 724 private:
700 typedef FileSystemDirectoryDatabase::FileId FileId; 725 typedef FileSystemDirectoryDatabase::FileId FileId;
701 typedef FileSystemDirectoryDatabase::FileInfo FileInfo; 726 typedef FileSystemDirectoryDatabase::FileInfo FileInfo;
702 727
703 struct FileRecord { 728 struct FileRecord {
704 FileId file_id; 729 FileId file_id;
705 FileInfo file_info; 730 FileInfo file_info;
(...skipping 15 matching lines...) Expand all
721 return; 746 return;
722 child.file_path = directory.file_path.Append(child.file_info.name); 747 child.file_path = directory.file_path.Append(child.file_info.name);
723 display_queue_.push(child); 748 display_queue_.push(child);
724 } 749 }
725 } 750 }
726 } 751 }
727 752
728 std::queue<FileRecord> display_queue_; 753 std::queue<FileRecord> display_queue_;
729 std::queue<FileRecord> recurse_queue_; 754 std::queue<FileRecord> recurse_queue_;
730 FileRecord current_; 755 FileRecord current_;
756 FilePath base_path_;
731 FileSystemDirectoryDatabase* db_; 757 FileSystemDirectoryDatabase* db_;
758 FileSystemOperationContext* context_;
759 FileSystemFileUtil* underlying_file_util_;
732 }; 760 };
733 761
734 class ObfuscatedFileSystemOriginEnumerator 762 class ObfuscatedFileSystemOriginEnumerator
735 : public ObfuscatedFileSystemFileUtil::AbstractOriginEnumerator { 763 : public ObfuscatedFileSystemFileUtil::AbstractOriginEnumerator {
736 public: 764 public:
737 typedef FileSystemOriginDatabase::OriginRecord OriginRecord; 765 typedef FileSystemOriginDatabase::OriginRecord OriginRecord;
738 ObfuscatedFileSystemOriginEnumerator( 766 ObfuscatedFileSystemOriginEnumerator(
739 FileSystemOriginDatabase* origin_database, 767 FileSystemOriginDatabase* origin_database,
740 const FilePath& base_path) 768 const FilePath& base_path)
741 : base_path_(base_path) { 769 : base_path_(base_path) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 } 814 }
787 815
788 FileSystemFileUtil::AbstractFileEnumerator* 816 FileSystemFileUtil::AbstractFileEnumerator*
789 ObfuscatedFileSystemFileUtil::CreateFileEnumerator( 817 ObfuscatedFileSystemFileUtil::CreateFileEnumerator(
790 FileSystemOperationContext* context, 818 FileSystemOperationContext* context,
791 const FilePath& root_path) { 819 const FilePath& root_path) {
792 FileSystemDirectoryDatabase* db = GetDirectoryDatabase( 820 FileSystemDirectoryDatabase* db = GetDirectoryDatabase(
793 context->src_origin_url(), context->src_type(), false); 821 context->src_origin_url(), context->src_type(), false);
794 if (!db) 822 if (!db)
795 return new FileSystemFileUtil::EmptyFileEnumerator(); 823 return new FileSystemFileUtil::EmptyFileEnumerator();
796 return new ObfuscatedFileSystemFileEnumerator(db, root_path); 824 return new ObfuscatedFileSystemFileEnumerator(
825 GetDirectoryForOriginAndType(context->src_origin_url(),
826 context->src_type(), false),
827 db,
828 context,
829 underlying_file_util_.get(),
830 root_path);
797 } 831 }
798 832
799 PlatformFileError ObfuscatedFileSystemFileUtil::GetFileInfoInternal( 833 PlatformFileError ObfuscatedFileSystemFileUtil::GetFileInfoInternal(
800 FileSystemDirectoryDatabase* db, 834 FileSystemDirectoryDatabase* db,
801 FileSystemOperationContext* context, 835 FileSystemOperationContext* context,
802 FileId file_id, 836 FileId file_id,
803 FileInfo* local_info, 837 FileInfo* local_info,
804 base::PlatformFileInfo* file_info, 838 base::PlatformFileInfo* file_info,
805 FilePath* platform_file_path) { 839 FilePath* platform_file_path) {
806 DCHECK(db); 840 DCHECK(db);
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
1177 return false; 1211 return false;
1178 } 1212 }
1179 origin_database_.reset( 1213 origin_database_.reset(
1180 new FileSystemOriginDatabase( 1214 new FileSystemOriginDatabase(
1181 file_system_directory_.AppendASCII(kOriginDatabaseName))); 1215 file_system_directory_.AppendASCII(kOriginDatabaseName)));
1182 } 1216 }
1183 return true; 1217 return true;
1184 } 1218 }
1185 1219
1186 } // namespace fileapi 1220 } // namespace fileapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698