| 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/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 <set> | 9 #include <set> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "apps/saved_files_service.h" | 12 #include "apps/saved_files_service.h" |
| 13 #include "base/bind.h" | 13 #include "base/bind.h" |
| 14 #include "base/files/file_path.h" | 14 #include "base/files/file_path.h" |
| 15 #include "base/files/file_util.h" | 15 #include "base/files/file_util.h" |
| 16 #include "base/logging.h" | 16 #include "base/logging.h" |
| 17 #include "base/macros.h" | 17 #include "base/macros.h" |
| 18 #include "base/memory/linked_ptr.h" | 18 #include "base/memory/linked_ptr.h" |
| 19 #include "base/memory/ptr_util.h" |
| 19 #include "base/path_service.h" | 20 #include "base/path_service.h" |
| 20 #include "base/strings/string_util.h" | 21 #include "base/strings/string_util.h" |
| 21 #include "base/strings/stringprintf.h" | 22 #include "base/strings/stringprintf.h" |
| 22 #include "base/strings/sys_string_conversions.h" | 23 #include "base/strings/sys_string_conversions.h" |
| 23 #include "base/strings/utf_string_conversions.h" | 24 #include "base/strings/utf_string_conversions.h" |
| 24 #include "base/value_conversions.h" | 25 #include "base/value_conversions.h" |
| 25 #include "base/values.h" | 26 #include "base/values.h" |
| 26 #include "build/build_config.h" | 27 #include "build/build_config.h" |
| 27 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h" | 28 #include "chrome/browser/extensions/api/file_handlers/app_file_handler_util.h" |
| 28 #include "chrome/browser/extensions/extension_service.h" | 29 #include "chrome/browser/extensions/extension_service.h" |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 | 207 |
| 207 const int kGraylistedPaths[] = { | 208 const int kGraylistedPaths[] = { |
| 208 base::DIR_HOME, | 209 base::DIR_HOME, |
| 209 #if defined(OS_WIN) | 210 #if defined(OS_WIN) |
| 210 base::DIR_PROGRAM_FILES, | 211 base::DIR_PROGRAM_FILES, |
| 211 base::DIR_PROGRAM_FILESX86, | 212 base::DIR_PROGRAM_FILESX86, |
| 212 base::DIR_WINDOWS, | 213 base::DIR_WINDOWS, |
| 213 #endif | 214 #endif |
| 214 }; | 215 }; |
| 215 | 216 |
| 216 typedef base::Callback<void(scoped_ptr<base::File::Info>)> FileInfoOptCallback; | 217 typedef base::Callback<void(std::unique_ptr<base::File::Info>)> |
| 218 FileInfoOptCallback; |
| 217 | 219 |
| 218 // 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|. |
| 219 void PassFileInfoToUIThread(const FileInfoOptCallback& callback, | 221 void PassFileInfoToUIThread(const FileInfoOptCallback& callback, |
| 220 base::File::Error result, | 222 base::File::Error result, |
| 221 const base::File::Info& info) { | 223 const base::File::Info& info) { |
| 222 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 224 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 223 scoped_ptr<base::File::Info> file_info( | 225 std::unique_ptr<base::File::Info> file_info( |
| 224 result == base::File::FILE_OK ? new base::File::Info(info) : NULL); | 226 result == base::File::FILE_OK ? new base::File::Info(info) : NULL); |
| 225 content::BrowserThread::PostTask( | 227 content::BrowserThread::PostTask( |
| 226 content::BrowserThread::UI, | 228 content::BrowserThread::UI, |
| 227 FROM_HERE, | 229 FROM_HERE, |
| 228 base::Bind(callback, base::Passed(&file_info))); | 230 base::Bind(callback, base::Passed(&file_info))); |
| 229 } | 231 } |
| 230 | 232 |
| 231 // Gets a WebContents instance handle for a platform app hosted in | 233 // Gets a WebContents instance handle for a platform app hosted in |
| 232 // |render_frame_host|. If not found, then returns NULL. | 234 // |render_frame_host|. If not found, then returns NULL. |
| 233 content::WebContents* GetWebContentsForRenderFrameHost( | 235 content::WebContents* GetWebContentsForRenderFrameHost( |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 | 311 |
| 310 ConsentProviderDelegate consent_provider_delegate(profile, nullptr); | 312 ConsentProviderDelegate consent_provider_delegate(profile, nullptr); |
| 311 ConsentProvider consent_provider(&consent_provider_delegate); | 313 ConsentProvider consent_provider(&consent_provider_delegate); |
| 312 api::file_system::VolumeListChangedEvent event_args; | 314 api::file_system::VolumeListChangedEvent event_args; |
| 313 FillVolumeList(profile, &event_args.volumes); | 315 FillVolumeList(profile, &event_args.volumes); |
| 314 for (const auto& extension : registry->enabled_extensions()) { | 316 for (const auto& extension : registry->enabled_extensions()) { |
| 315 if (!consent_provider.IsGrantable(*extension.get())) | 317 if (!consent_provider.IsGrantable(*extension.get())) |
| 316 continue; | 318 continue; |
| 317 event_router->DispatchEventToExtension( | 319 event_router->DispatchEventToExtension( |
| 318 extension->id(), | 320 extension->id(), |
| 319 make_scoped_ptr(new Event( | 321 base::WrapUnique(new Event( |
| 320 events::FILE_SYSTEM_ON_VOLUME_LIST_CHANGED, | 322 events::FILE_SYSTEM_ON_VOLUME_LIST_CHANGED, |
| 321 api::file_system::OnVolumeListChanged::kEventName, | 323 api::file_system::OnVolumeListChanged::kEventName, |
| 322 api::file_system::OnVolumeListChanged::Create(event_args)))); | 324 api::file_system::OnVolumeListChanged::Create(event_args)))); |
| 323 } | 325 } |
| 324 } | 326 } |
| 325 | 327 |
| 326 ConsentProvider::ConsentProvider(DelegateInterface* delegate) | 328 ConsentProvider::ConsentProvider(DelegateInterface* delegate) |
| 327 : delegate_(delegate) { | 329 : delegate_(delegate) { |
| 328 DCHECK(delegate_); | 330 DCHECK(delegate_); |
| 329 } | 331 } |
| (...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1037 if (PathService::Get(chrome::DIR_USER_DOCUMENTS, &documents_dir)) { | 1039 if (PathService::Get(chrome::DIR_USER_DOCUMENTS, &documents_dir)) { |
| 1038 initial_path_ = documents_dir.Append(suggested_name); | 1040 initial_path_ = documents_dir.Append(suggested_name); |
| 1039 } else { | 1041 } else { |
| 1040 initial_path_ = suggested_name; | 1042 initial_path_ = suggested_name; |
| 1041 } | 1043 } |
| 1042 } | 1044 } |
| 1043 ShowPicker(file_type_info, picker_type); | 1045 ShowPicker(file_type_info, picker_type); |
| 1044 } | 1046 } |
| 1045 | 1047 |
| 1046 bool FileSystemChooseEntryFunction::RunAsync() { | 1048 bool FileSystemChooseEntryFunction::RunAsync() { |
| 1047 scoped_ptr<ChooseEntry::Params> params(ChooseEntry::Params::Create(*args_)); | 1049 std::unique_ptr<ChooseEntry::Params> params( |
| 1050 ChooseEntry::Params::Create(*args_)); |
| 1048 EXTENSION_FUNCTION_VALIDATE(params.get()); | 1051 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 1049 | 1052 |
| 1050 base::FilePath suggested_name; | 1053 base::FilePath suggested_name; |
| 1051 ui::SelectFileDialog::FileTypeInfo file_type_info; | 1054 ui::SelectFileDialog::FileTypeInfo file_type_info; |
| 1052 ui::SelectFileDialog::Type picker_type = | 1055 ui::SelectFileDialog::Type picker_type = |
| 1053 ui::SelectFileDialog::SELECT_OPEN_FILE; | 1056 ui::SelectFileDialog::SELECT_OPEN_FILE; |
| 1054 | 1057 |
| 1055 file_system::ChooseEntryOptions* options = params->options.get(); | 1058 file_system::ChooseEntryOptions* options = params->options.get(); |
| 1056 if (options) { | 1059 if (options) { |
| 1057 multiple_ = options->accepts_multiple && *options->accepts_multiple; | 1060 multiple_ = options->accepts_multiple && *options->accepts_multiple; |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1175 } | 1178 } |
| 1176 | 1179 |
| 1177 saved_files_service->EnqueueFileEntry(extension_->id(), entry_id); | 1180 saved_files_service->EnqueueFileEntry(extension_->id(), entry_id); |
| 1178 SendResponse(true); | 1181 SendResponse(true); |
| 1179 return true; | 1182 return true; |
| 1180 } | 1183 } |
| 1181 | 1184 |
| 1182 void FileSystemRetainEntryFunction::RetainFileEntry( | 1185 void FileSystemRetainEntryFunction::RetainFileEntry( |
| 1183 const std::string& entry_id, | 1186 const std::string& entry_id, |
| 1184 const base::FilePath& path, | 1187 const base::FilePath& path, |
| 1185 scoped_ptr<base::File::Info> file_info) { | 1188 std::unique_ptr<base::File::Info> file_info) { |
| 1186 if (!file_info) { | 1189 if (!file_info) { |
| 1187 SendResponse(false); | 1190 SendResponse(false); |
| 1188 return; | 1191 return; |
| 1189 } | 1192 } |
| 1190 | 1193 |
| 1191 SavedFilesService* saved_files_service = SavedFilesService::Get(GetProfile()); | 1194 SavedFilesService* saved_files_service = SavedFilesService::Get(GetProfile()); |
| 1192 saved_files_service->RegisterFileEntry( | 1195 saved_files_service->RegisterFileEntry( |
| 1193 extension_->id(), entry_id, path, file_info->is_directory); | 1196 extension_->id(), entry_id, path, file_info->is_directory); |
| 1194 saved_files_service->EnqueueFileEntry(extension_->id(), entry_id); | 1197 saved_files_service->EnqueueFileEntry(extension_->id(), entry_id); |
| 1195 SendResponse(true); | 1198 SendResponse(true); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1244 | 1247 |
| 1245 bool FileSystemGetObservedEntriesFunction::RunSync() { | 1248 bool FileSystemGetObservedEntriesFunction::RunSync() { |
| 1246 NOTIMPLEMENTED(); | 1249 NOTIMPLEMENTED(); |
| 1247 error_ = kUnknownIdError; | 1250 error_ = kUnknownIdError; |
| 1248 return false; | 1251 return false; |
| 1249 } | 1252 } |
| 1250 | 1253 |
| 1251 #if !defined(OS_CHROMEOS) | 1254 #if !defined(OS_CHROMEOS) |
| 1252 ExtensionFunction::ResponseAction FileSystemRequestFileSystemFunction::Run() { | 1255 ExtensionFunction::ResponseAction FileSystemRequestFileSystemFunction::Run() { |
| 1253 using api::file_system::RequestFileSystem::Params; | 1256 using api::file_system::RequestFileSystem::Params; |
| 1254 const scoped_ptr<Params> params(Params::Create(*args_)); | 1257 const std::unique_ptr<Params> params(Params::Create(*args_)); |
| 1255 EXTENSION_FUNCTION_VALIDATE(params); | 1258 EXTENSION_FUNCTION_VALIDATE(params); |
| 1256 | 1259 |
| 1257 NOTIMPLEMENTED(); | 1260 NOTIMPLEMENTED(); |
| 1258 return RespondNow(Error(kNotSupportedOnCurrentPlatformError)); | 1261 return RespondNow(Error(kNotSupportedOnCurrentPlatformError)); |
| 1259 } | 1262 } |
| 1260 | 1263 |
| 1261 ExtensionFunction::ResponseAction FileSystemGetVolumeListFunction::Run() { | 1264 ExtensionFunction::ResponseAction FileSystemGetVolumeListFunction::Run() { |
| 1262 NOTIMPLEMENTED(); | 1265 NOTIMPLEMENTED(); |
| 1263 return RespondNow(Error(kNotSupportedOnCurrentPlatformError)); | 1266 return RespondNow(Error(kNotSupportedOnCurrentPlatformError)); |
| 1264 } | 1267 } |
| 1265 #else | 1268 #else |
| 1266 | 1269 |
| 1267 FileSystemRequestFileSystemFunction::FileSystemRequestFileSystemFunction() | 1270 FileSystemRequestFileSystemFunction::FileSystemRequestFileSystemFunction() |
| 1268 : chrome_details_(this) { | 1271 : chrome_details_(this) { |
| 1269 } | 1272 } |
| 1270 | 1273 |
| 1271 FileSystemRequestFileSystemFunction::~FileSystemRequestFileSystemFunction() { | 1274 FileSystemRequestFileSystemFunction::~FileSystemRequestFileSystemFunction() { |
| 1272 } | 1275 } |
| 1273 | 1276 |
| 1274 ExtensionFunction::ResponseAction FileSystemRequestFileSystemFunction::Run() { | 1277 ExtensionFunction::ResponseAction FileSystemRequestFileSystemFunction::Run() { |
| 1275 using api::file_system::RequestFileSystem::Params; | 1278 using api::file_system::RequestFileSystem::Params; |
| 1276 const scoped_ptr<Params> params(Params::Create(*args_)); | 1279 const std::unique_ptr<Params> params(Params::Create(*args_)); |
| 1277 EXTENSION_FUNCTION_VALIDATE(params); | 1280 EXTENSION_FUNCTION_VALIDATE(params); |
| 1278 | 1281 |
| 1279 // Only kiosk apps in kiosk sessions can use this API. | 1282 // Only kiosk apps in kiosk sessions can use this API. |
| 1280 // Additionally it is enabled for whitelisted component extensions and apps. | 1283 // Additionally it is enabled for whitelisted component extensions and apps. |
| 1281 file_system_api::ConsentProviderDelegate consent_provider_delegate( | 1284 file_system_api::ConsentProviderDelegate consent_provider_delegate( |
| 1282 chrome_details_.GetProfile(), render_frame_host()); | 1285 chrome_details_.GetProfile(), render_frame_host()); |
| 1283 file_system_api::ConsentProvider consent_provider(&consent_provider_delegate); | 1286 file_system_api::ConsentProvider consent_provider(&consent_provider_delegate); |
| 1284 | 1287 |
| 1285 if (!consent_provider.IsGrantable(*extension())) | 1288 if (!consent_provider.IsGrantable(*extension())) |
| 1286 return RespondNow(Error(kNotSupportedOnNonKioskSessionError)); | 1289 return RespondNow(Error(kNotSupportedOnNonKioskSessionError)); |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1447 return RespondNow(Error(kNotSupportedOnNonKioskSessionError)); | 1450 return RespondNow(Error(kNotSupportedOnNonKioskSessionError)); |
| 1448 std::vector<api::file_system::Volume> result_volume_list; | 1451 std::vector<api::file_system::Volume> result_volume_list; |
| 1449 FillVolumeList(chrome_details_.GetProfile(), &result_volume_list); | 1452 FillVolumeList(chrome_details_.GetProfile(), &result_volume_list); |
| 1450 | 1453 |
| 1451 return RespondNow(ArgumentList( | 1454 return RespondNow(ArgumentList( |
| 1452 api::file_system::GetVolumeList::Results::Create(result_volume_list))); | 1455 api::file_system::GetVolumeList::Results::Create(result_volume_list))); |
| 1453 } | 1456 } |
| 1454 #endif | 1457 #endif |
| 1455 | 1458 |
| 1456 } // namespace extensions | 1459 } // namespace extensions |
| OLD | NEW |