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

Side by Side Diff: chrome/browser/extensions/api/developer_private/developer_private_api.cc

Issue 16402016: Copy folder recursively for syncfsToLocalfs export. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 7 years, 6 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
OLDNEW
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/extensions/api/developer_private/developer_private_api. h" 5 #include "chrome/browser/extensions/api/developer_private/developer_private_api. h"
6 6
7 #include "apps/app_load_service.h" 7 #include "apps/app_load_service.h"
8 #include "apps/app_restore_service.h" 8 #include "apps/app_restore_service.h"
9 #include "apps/saved_files_service.h" 9 #include "apps/saved_files_service.h"
10 #include "base/base64.h" 10 #include "base/base64.h"
(...skipping 816 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 if (!file_util::Delete(project_path, true/*recursive*/)) { 827 if (!file_util::Delete(project_path, true/*recursive*/)) {
828 SetError("Error in copying files from sync filesystem."); 828 SetError("Error in copying files from sync filesystem.");
829 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 829 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
830 base::Bind(&DeveloperPrivateExportSyncfsFolderToLocalfsFunction:: 830 base::Bind(&DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
831 SendResponse, 831 SendResponse,
832 this, 832 this,
833 false)); 833 false));
834 return; 834 return;
835 } 835 }
836 836
837 pendingCallbacksCount_ = 1;
838
837 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE, 839 content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
838 base::Bind(&DeveloperPrivateExportSyncfsFolderToLocalfsFunction:: 840 base::Bind(&DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
839 ReadSyncFileSystemDirectory, 841 ReadSyncFileSystemDirectory,
840 this, project_path)); 842 this, project_path, project_path.BaseName()));
841 } 843 }
842 844
843 void DeveloperPrivateExportSyncfsFolderToLocalfsFunction:: 845 void DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
844 ReadSyncFileSystemDirectory(const base::FilePath& project_path) { 846 ReadSyncFileSystemDirectory(const base::FilePath& project_path,
847 const base::FilePath& current_path) {
845 std::string origin_url( 848 std::string origin_url(
846 Extension::GetBaseURLFromExtensionId(extension_id()).spec()); 849 Extension::GetBaseURLFromExtensionId(extension_id()).spec());
847 fileapi::FileSystemURL url(sync_file_system::CreateSyncableFileSystemURL( 850 fileapi::FileSystemURL url(sync_file_system::CreateSyncableFileSystemURL(
848 GURL(origin_url), 851 GURL(origin_url),
849 project_path.BaseName())); 852 current_path));
850 853
851 context_->operation_runner()->ReadDirectory( 854 context_->operation_runner()->ReadDirectory(
852 url, base::Bind(&DeveloperPrivateExportSyncfsFolderToLocalfsFunction:: 855 url, base::Bind(&DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
853 ReadSyncFileSystemDirectoryCb, this, project_path)); 856 ReadSyncFileSystemDirectoryCb,
857 this, project_path, current_path));
854 } 858 }
855 859
856 void DeveloperPrivateExportSyncfsFolderToLocalfsFunction:: 860 void DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
857 ReadSyncFileSystemDirectoryCb( 861 ReadSyncFileSystemDirectoryCb(
858 const base::FilePath& project_path, 862 const base::FilePath& project_path,
863 const base::FilePath& current_path,
859 base::PlatformFileError status, 864 base::PlatformFileError status,
860 const fileapi::FileSystemOperation::FileEntryList& file_list, 865 const fileapi::FileSystemOperation::FileEntryList& file_list,
861 bool has_more) { 866 bool has_more) {
862 867
863 if (status != base::PLATFORM_FILE_OK) { 868 if (status != base::PLATFORM_FILE_OK) {
864 DLOG(ERROR) << "Error in copying files from sync filesystem."; 869 DLOG(ERROR) << "Error in copying files from sync filesystem.";
865 return; 870 return;
866 } 871 }
867 872
868 // Create an empty project folder if there are no files. 873 pendingCallbacksCount_ += file_list.size();
miket_OOO 2013/06/12 19:39:24 This is pretty confusing. You're adding N to pendi
Gaurav 2013/06/21 22:11:00 Done.
869 if (!file_list.size()) {
870 content::BrowserThread::PostTask(content::BrowserThread::FILE, FROM_HERE,
871 base::Bind(&DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
872 CreateFolderAndSendResponse,
873 this,
874 project_path));
875 return;
876 }
877
878 pendingCallbacksCount_ = file_list.size();
879 874
880 for (size_t i = 0; i < file_list.size(); ++i) { 875 for (size_t i = 0; i < file_list.size(); ++i) {
876 if (file_list[i].is_directory) {
877 ReadSyncFileSystemDirectory(project_path.Append(file_list[i].name),
878 current_path.Append(file_list[i].name));
879 continue;
miket_OOO 2013/06/12 19:39:24 This is a good example of why it's confusing. It s
Gaurav 2013/06/21 22:11:00 Done.
880 }
881
881 std::string origin_url( 882 std::string origin_url(
882 Extension::GetBaseURLFromExtensionId(extension_id()).spec()); 883 Extension::GetBaseURLFromExtensionId(extension_id()).spec());
883 fileapi::FileSystemURL url(sync_file_system::CreateSyncableFileSystemURL( 884 fileapi::FileSystemURL url(sync_file_system::CreateSyncableFileSystemURL(
884 GURL(origin_url), 885 GURL(origin_url),
885 project_path.BaseName().Append(file_list[i].name))); 886 current_path.Append(file_list[i].name)));
886 base::FilePath target_path = project_path; 887 base::FilePath target_path = project_path;
887 target_path = target_path.Append(file_list[i].name); 888 target_path = target_path.Append(file_list[i].name);
888 889
889 context_->operation_runner()->CreateSnapshotFile( 890 context_->operation_runner()->CreateSnapshotFile(
890 url, 891 url,
891 base::Bind( 892 base::Bind(
892 &DeveloperPrivateExportSyncfsFolderToLocalfsFunction:: 893 &DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
893 SnapshotFileCallback, 894 SnapshotFileCallback,
894 this, 895 this,
895 target_path)); 896 target_path));
897
898 }
899 pendingCallbacksCount_--;
900 if (!pendingCallbacksCount_) {
901 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
902 base::Bind(&DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
903 SendResponse,
904 this,
905 success_));
896 } 906 }
897 } 907 }
898 908
899 void DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
900 CreateFolderAndSendResponse(const base::FilePath& project_path) {
901 if (!(success_ = file_util::CreateDirectory(project_path))) {
902 SetError("Error in copying files from sync filesystem.");
903 }
904 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
905 base::Bind(&DeveloperPrivateExportSyncfsFolderToLocalfsFunction::
906 SendResponse,
907 this,
908 success_));
909 }
910
911 void DeveloperPrivateExportSyncfsFolderToLocalfsFunction::SnapshotFileCallback( 909 void DeveloperPrivateExportSyncfsFolderToLocalfsFunction::SnapshotFileCallback(
912 const base::FilePath& target_path, 910 const base::FilePath& target_path,
913 base::PlatformFileError result, 911 base::PlatformFileError result,
914 const base::PlatformFileInfo& file_info, 912 const base::PlatformFileInfo& file_info,
915 const base::FilePath& src_path, 913 const base::FilePath& src_path,
916 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) { 914 const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref) {
917 if (result != base::PLATFORM_FILE_OK) { 915 if (result != base::PLATFORM_FILE_OK) {
918 SetError("Error in copying files from sync filesystem."); 916 SetError("Error in copying files from sync filesystem.");
919 success_ = false; 917 success_ = false;
920 return; 918 return;
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
1138 1136
1139 #undef SET_STRING 1137 #undef SET_STRING
1140 return true; 1138 return true;
1141 } 1139 }
1142 1140
1143 DeveloperPrivateGetStringsFunction::~DeveloperPrivateGetStringsFunction() {} 1141 DeveloperPrivateGetStringsFunction::~DeveloperPrivateGetStringsFunction() {}
1144 1142
1145 } // namespace api 1143 } // namespace api
1146 1144
1147 } // namespace extensions 1145 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698