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

Side by Side Diff: chrome/browser/extensions/api/file_system/file_system_api.cc

Issue 2825963003: Rewrite base::Bind to base::BindOnce with base_bind_rewriters in //chrome/browser/extensions (Closed)
Patch Set: Created 3 years, 8 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/file_system/file_system_api.h" 5 #include "chrome/browser/extensions/api/file_system/file_system_api.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <set> 10 #include <set>
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 FileInfoOptCallback; 218 FileInfoOptCallback;
219 219
220 // Passes optional file info to the UI thread depending on |result| and |info|. 220 // Passes optional file info to the UI thread depending on |result| and |info|.
221 void PassFileInfoToUIThread(const FileInfoOptCallback& callback, 221 void PassFileInfoToUIThread(const FileInfoOptCallback& callback,
222 base::File::Error result, 222 base::File::Error result,
223 const base::File::Info& info) { 223 const base::File::Info& info) {
224 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); 224 DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
225 std::unique_ptr<base::File::Info> file_info( 225 std::unique_ptr<base::File::Info> file_info(
226 result == base::File::FILE_OK ? new base::File::Info(info) : NULL); 226 result == base::File::FILE_OK ? new base::File::Info(info) : NULL);
227 content::BrowserThread::PostTask( 227 content::BrowserThread::PostTask(
228 content::BrowserThread::UI, 228 content::BrowserThread::UI, FROM_HERE,
229 FROM_HERE, 229 base::BindOnce(callback, base::Passed(&file_info)));
230 base::Bind(callback, base::Passed(&file_info)));
231 } 230 }
232 231
233 // Gets a WebContents instance handle for a platform app hosted in 232 // Gets a WebContents instance handle for a platform app hosted in
234 // |render_frame_host|. If not found, then returns NULL. 233 // |render_frame_host|. If not found, then returns NULL.
235 content::WebContents* GetWebContentsForRenderFrameHost( 234 content::WebContents* GetWebContentsForRenderFrameHost(
236 Profile* profile, 235 Profile* profile,
237 content::RenderFrameHost* render_frame_host) { 236 content::RenderFrameHost* render_frame_host) {
238 content::WebContents* web_contents = 237 content::WebContents* web_contents =
239 content::WebContents::FromRenderFrameHost(render_frame_host); 238 content::WebContents::FromRenderFrameHost(render_frame_host);
240 // Check if there is an app window associated with the web contents; if not, 239 // Check if there is an app window associated with the web contents; if not,
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 error_ = kRequiresFileSystemWriteError; 573 error_ = kRequiresFileSystemWriteError;
575 return false; 574 return false;
576 } 575 }
577 576
578 if (!app_file_handler_util::ValidateFileEntryAndGetPath( 577 if (!app_file_handler_util::ValidateFileEntryAndGetPath(
579 filesystem_name, filesystem_path, 578 filesystem_name, filesystem_path,
580 render_frame_host()->GetProcess()->GetID(), &path_, &error_)) 579 render_frame_host()->GetProcess()->GetID(), &path_, &error_))
581 return false; 580 return false;
582 581
583 content::BrowserThread::PostTaskAndReply( 582 content::BrowserThread::PostTaskAndReply(
584 content::BrowserThread::FILE, 583 content::BrowserThread::FILE, FROM_HERE,
585 FROM_HERE, 584 base::BindOnce(
586 base::Bind(
587 &FileSystemGetWritableEntryFunction::SetIsDirectoryOnFileThread, 585 &FileSystemGetWritableEntryFunction::SetIsDirectoryOnFileThread,
588 this), 586 this),
589 base::Bind( 587 base::BindOnce(
590 &FileSystemGetWritableEntryFunction::CheckPermissionAndSendResponse, 588 &FileSystemGetWritableEntryFunction::CheckPermissionAndSendResponse,
591 this)); 589 this));
592 return true; 590 return true;
593 } 591 }
594 592
595 void FileSystemGetWritableEntryFunction::CheckPermissionAndSendResponse() { 593 void FileSystemGetWritableEntryFunction::CheckPermissionAndSendResponse() {
596 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 594 DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
597 if (is_directory_ && 595 if (is_directory_ &&
598 !extension_->permissions_data()->HasAPIPermission( 596 !extension_->permissions_data()->HasAPIPermission(
599 APIPermission::kFileSystemDirectory)) { 597 APIPermission::kFileSystemDirectory)) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 ui::SelectFileDialog::Type picker_type) 641 ui::SelectFileDialog::Type picker_type)
644 : function_(function) { 642 : function_(function) {
645 select_file_dialog_ = ui::SelectFileDialog::Create( 643 select_file_dialog_ = ui::SelectFileDialog::Create(
646 this, new ChromeSelectFilePolicy(web_contents)); 644 this, new ChromeSelectFilePolicy(web_contents));
647 gfx::NativeWindow owning_window = web_contents ? 645 gfx::NativeWindow owning_window = web_contents ?
648 platform_util::GetTopLevel(web_contents->GetNativeView()) : 646 platform_util::GetTopLevel(web_contents->GetNativeView()) :
649 NULL; 647 NULL;
650 648
651 if (g_skip_picker_for_test) { 649 if (g_skip_picker_for_test) {
652 if (g_use_suggested_path_for_test) { 650 if (g_use_suggested_path_for_test) {
653 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 651 content::BrowserThread::PostTask(
654 base::Bind( 652 content::BrowserThread::UI, FROM_HERE,
653 base::BindOnce(
655 &FileSystemChooseEntryFunction::FilePicker::FileSelected, 654 &FileSystemChooseEntryFunction::FilePicker::FileSelected,
656 base::Unretained(this), suggested_name, 1, 655 base::Unretained(this), suggested_name, 1,
657 static_cast<void*>(NULL))); 656 static_cast<void*>(NULL)));
658 } else if (g_path_to_be_picked_for_test) { 657 } else if (g_path_to_be_picked_for_test) {
659 content::BrowserThread::PostTask( 658 content::BrowserThread::PostTask(
660 content::BrowserThread::UI, FROM_HERE, 659 content::BrowserThread::UI, FROM_HERE,
661 base::Bind( 660 base::BindOnce(
662 &FileSystemChooseEntryFunction::FilePicker::FileSelected, 661 &FileSystemChooseEntryFunction::FilePicker::FileSelected,
663 base::Unretained(this), *g_path_to_be_picked_for_test, 1, 662 base::Unretained(this), *g_path_to_be_picked_for_test, 1,
664 static_cast<void*>(NULL))); 663 static_cast<void*>(NULL)));
665 } else if (g_paths_to_be_picked_for_test) { 664 } else if (g_paths_to_be_picked_for_test) {
666 content::BrowserThread::PostTask( 665 content::BrowserThread::PostTask(
667 content::BrowserThread::UI, 666 content::BrowserThread::UI, FROM_HERE,
668 FROM_HERE, 667 base::BindOnce(
669 base::Bind(
670 &FileSystemChooseEntryFunction::FilePicker::MultiFilesSelected, 668 &FileSystemChooseEntryFunction::FilePicker::MultiFilesSelected,
671 base::Unretained(this), 669 base::Unretained(this), *g_paths_to_be_picked_for_test,
672 *g_paths_to_be_picked_for_test,
673 static_cast<void*>(NULL))); 670 static_cast<void*>(NULL)));
674 } else { 671 } else {
675 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE, 672 content::BrowserThread::PostTask(
676 base::Bind( 673 content::BrowserThread::UI, FROM_HERE,
677 &FileSystemChooseEntryFunction::FilePicker:: 674 base::BindOnce(&FileSystemChooseEntryFunction::FilePicker::
678 FileSelectionCanceled, 675 FileSelectionCanceled,
679 base::Unretained(this), static_cast<void*>(NULL))); 676 base::Unretained(this), static_cast<void*>(NULL)));
680 } 677 }
681 return; 678 return;
682 } 679 }
683 680
684 select_file_dialog_->SelectFile(picker_type, 681 select_file_dialog_->SelectFile(picker_type,
685 base::string16(), 682 base::string16(),
686 suggested_name, 683 suggested_name,
687 &file_type_info, 684 &file_type_info,
688 0, 685 0,
689 base::FilePath::StringType(), 686 base::FilePath::StringType(),
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 } 860 }
864 861
865 DCHECK_EQ(paths.size(), 1u); 862 DCHECK_EQ(paths.size(), 1u);
866 bool non_native_path = false; 863 bool non_native_path = false;
867 #if defined(OS_CHROMEOS) 864 #if defined(OS_CHROMEOS)
868 non_native_path = 865 non_native_path =
869 file_manager::util::IsUnderNonNativeLocalPath(GetProfile(), paths[0]); 866 file_manager::util::IsUnderNonNativeLocalPath(GetProfile(), paths[0]);
870 #endif 867 #endif
871 868
872 content::BrowserThread::PostTask( 869 content::BrowserThread::PostTask(
873 content::BrowserThread::FILE, 870 content::BrowserThread::FILE, FROM_HERE,
874 FROM_HERE, 871 base::BindOnce(
875 base::Bind(
876 &FileSystemChooseEntryFunction::ConfirmDirectoryAccessOnFileThread, 872 &FileSystemChooseEntryFunction::ConfirmDirectoryAccessOnFileThread,
877 this, 873 this, non_native_path, paths, web_contents));
878 non_native_path,
879 paths,
880 web_contents));
881 return; 874 return;
882 } 875 }
883 876
884 OnDirectoryAccessConfirmed(paths); 877 OnDirectoryAccessConfirmed(paths);
885 } 878 }
886 879
887 void FileSystemChooseEntryFunction::FileSelectionCanceled() { 880 void FileSystemChooseEntryFunction::FileSelectionCanceled() {
888 error_ = kUserCancelled; 881 error_ = kUserCancelled;
889 SendResponse(false); 882 SendResponse(false);
890 } 883 }
891 884
892 void FileSystemChooseEntryFunction::ConfirmDirectoryAccessOnFileThread( 885 void FileSystemChooseEntryFunction::ConfirmDirectoryAccessOnFileThread(
893 bool non_native_path, 886 bool non_native_path,
894 const std::vector<base::FilePath>& paths, 887 const std::vector<base::FilePath>& paths,
895 content::WebContents* web_contents) { 888 content::WebContents* web_contents) {
896 const base::FilePath check_path = 889 const base::FilePath check_path =
897 non_native_path ? paths[0] : base::MakeAbsoluteFilePath(paths[0]); 890 non_native_path ? paths[0] : base::MakeAbsoluteFilePath(paths[0]);
898 if (check_path.empty()) { 891 if (check_path.empty()) {
899 content::BrowserThread::PostTask( 892 content::BrowserThread::PostTask(
900 content::BrowserThread::UI, 893 content::BrowserThread::UI, FROM_HERE,
901 FROM_HERE, 894 base::BindOnce(&FileSystemChooseEntryFunction::FileSelectionCanceled,
902 base::Bind(&FileSystemChooseEntryFunction::FileSelectionCanceled, 895 this));
903 this));
904 return; 896 return;
905 } 897 }
906 898
907 for (size_t i = 0; i < arraysize(kGraylistedPaths); i++) { 899 for (size_t i = 0; i < arraysize(kGraylistedPaths); i++) {
908 base::FilePath graylisted_path; 900 base::FilePath graylisted_path;
909 if (PathService::Get(kGraylistedPaths[i], &graylisted_path) && 901 if (PathService::Get(kGraylistedPaths[i], &graylisted_path) &&
910 (check_path == graylisted_path || 902 (check_path == graylisted_path ||
911 check_path.IsParent(graylisted_path))) { 903 check_path.IsParent(graylisted_path))) {
912 if (g_skip_directory_confirmation_for_test) { 904 if (g_skip_directory_confirmation_for_test) {
913 if (g_allow_directory_access_for_test) { 905 if (g_allow_directory_access_for_test) {
914 break; 906 break;
915 } else { 907 } else {
916 content::BrowserThread::PostTask( 908 content::BrowserThread::PostTask(
917 content::BrowserThread::UI, 909 content::BrowserThread::UI, FROM_HERE,
918 FROM_HERE, 910 base::BindOnce(
919 base::Bind(&FileSystemChooseEntryFunction::FileSelectionCanceled, 911 &FileSystemChooseEntryFunction::FileSelectionCanceled, this));
920 this));
921 } 912 }
922 return; 913 return;
923 } 914 }
924 915
925 content::BrowserThread::PostTask( 916 content::BrowserThread::PostTask(
926 content::BrowserThread::UI, 917 content::BrowserThread::UI, FROM_HERE,
927 FROM_HERE, 918 base::BindOnce(
928 base::Bind(
929 CreateDirectoryAccessConfirmationDialog, 919 CreateDirectoryAccessConfirmationDialog,
930 app_file_handler_util::HasFileSystemWritePermission( 920 app_file_handler_util::HasFileSystemWritePermission(
931 extension_.get()), 921 extension_.get()),
932 base::UTF8ToUTF16(extension_->name()), 922 base::UTF8ToUTF16(extension_->name()), web_contents,
933 web_contents,
934 base::Bind( 923 base::Bind(
935 &FileSystemChooseEntryFunction::OnDirectoryAccessConfirmed, 924 &FileSystemChooseEntryFunction::OnDirectoryAccessConfirmed,
936 this, 925 this, paths),
937 paths),
938 base::Bind(&FileSystemChooseEntryFunction::FileSelectionCanceled, 926 base::Bind(&FileSystemChooseEntryFunction::FileSelectionCanceled,
939 this))); 927 this)));
940 return; 928 return;
941 } 929 }
942 } 930 }
943 931
944 content::BrowserThread::PostTask( 932 content::BrowserThread::PostTask(
945 content::BrowserThread::UI, 933 content::BrowserThread::UI, FROM_HERE,
946 FROM_HERE, 934 base::BindOnce(&FileSystemChooseEntryFunction::OnDirectoryAccessConfirmed,
947 base::Bind(&FileSystemChooseEntryFunction::OnDirectoryAccessConfirmed, 935 this, paths));
948 this, paths));
949 } 936 }
950 937
951 void FileSystemChooseEntryFunction::OnDirectoryAccessConfirmed( 938 void FileSystemChooseEntryFunction::OnDirectoryAccessConfirmed(
952 const std::vector<base::FilePath>& paths) { 939 const std::vector<base::FilePath>& paths) {
953 if (app_file_handler_util::HasFileSystemWritePermission(extension_.get())) { 940 if (app_file_handler_util::HasFileSystemWritePermission(extension_.get())) {
954 PrepareFilesForWritableApp(paths); 941 PrepareFilesForWritableApp(paths);
955 return; 942 return;
956 } 943 }
957 944
958 // Don't need to check the file, it's for reading. 945 // Don't need to check the file, it's for reading.
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 ->GetFileSystemContext(); 1137 ->GetFileSystemContext();
1151 const storage::FileSystemURL url = context->CreateCrackedFileSystemURL( 1138 const storage::FileSystemURL url = context->CreateCrackedFileSystemURL(
1152 site, 1139 site,
1153 storage::kFileSystemTypeIsolated, 1140 storage::kFileSystemTypeIsolated,
1154 IsolatedContext::GetInstance() 1141 IsolatedContext::GetInstance()
1155 ->CreateVirtualRootPath(filesystem_id) 1142 ->CreateVirtualRootPath(filesystem_id)
1156 .Append(base::FilePath::FromUTF8Unsafe(filesystem_path))); 1143 .Append(base::FilePath::FromUTF8Unsafe(filesystem_path)));
1157 1144
1158 content::BrowserThread::PostTask( 1145 content::BrowserThread::PostTask(
1159 content::BrowserThread::IO, FROM_HERE, 1146 content::BrowserThread::IO, FROM_HERE,
1160 base::Bind( 1147 base::BindOnce(
1161 base::IgnoreResult( 1148 base::IgnoreResult(
1162 &storage::FileSystemOperationRunner::GetMetadata), 1149 &storage::FileSystemOperationRunner::GetMetadata),
1163 context->operation_runner()->AsWeakPtr(), url, 1150 context->operation_runner()->AsWeakPtr(), url,
1164 storage::FileSystemOperation::GET_METADATA_FIELD_IS_DIRECTORY, 1151 storage::FileSystemOperation::GET_METADATA_FIELD_IS_DIRECTORY,
1165 base::Bind( 1152 base::Bind(
1166 &PassFileInfoToUIThread, 1153 &PassFileInfoToUIThread,
1167 base::Bind(&FileSystemRetainEntryFunction::RetainFileEntry, 1154 base::Bind(&FileSystemRetainEntryFunction::RetainFileEntry,
1168 this, entry_id, path)))); 1155 this, entry_id, path))));
1169 return true; 1156 return true;
1170 } 1157 }
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1434 return RespondNow(Error(kNotSupportedOnNonKioskSessionError)); 1421 return RespondNow(Error(kNotSupportedOnNonKioskSessionError));
1435 std::vector<api::file_system::Volume> result_volume_list; 1422 std::vector<api::file_system::Volume> result_volume_list;
1436 FillVolumeList(chrome_details_.GetProfile(), &result_volume_list); 1423 FillVolumeList(chrome_details_.GetProfile(), &result_volume_list);
1437 1424
1438 return RespondNow(ArgumentList( 1425 return RespondNow(ArgumentList(
1439 api::file_system::GetVolumeList::Results::Create(result_volume_list))); 1426 api::file_system::GetVolumeList::Results::Create(result_volume_list)));
1440 } 1427 }
1441 #endif 1428 #endif
1442 1429
1443 } // namespace extensions 1430 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698