Chromium Code Reviews| Index: chrome/browser/extensions/api/file_system/file_system_api.cc |
| diff --git a/chrome/browser/extensions/api/file_system/file_system_api.cc b/chrome/browser/extensions/api/file_system/file_system_api.cc |
| index 7c12b6503e300be76808d569f90a7ef9b946f714..db812019cce2c4bc0a5e0488c2f37bab484d36a3 100644 |
| --- a/chrome/browser/extensions/api/file_system/file_system_api.cc |
| +++ b/chrome/browser/extensions/api/file_system/file_system_api.cc |
| @@ -60,6 +60,7 @@ |
| #if defined(OS_CHROMEOS) |
| #include "base/thread_task_runner_handle.h" |
| #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" |
| +#include "chrome/browser/chromeos/file_manager/app_id.h" |
| #include "chrome/browser/chromeos/file_manager/filesystem_api_util.h" |
| #include "chrome/browser/chromeos/file_manager/volume_manager.h" |
| #include "components/user_manager/user_manager.h" |
| @@ -92,6 +93,17 @@ const char kNotSupportedOnNonKioskSessionError[] = |
| "Operation only supported for kiosk apps running in a kiosk session."; |
| const char kVolumeNotFoundError[] = "Volume not found."; |
| const char kSecurityError[] = "Security error."; |
| + |
| +// List of whitelisted component apps and extensions by their ids for |
| +// chrome.fileSystem.requestFileSystem. |
| +const char* const kRequestFileSystemComponentWhitelist[] = { |
|
benwells
2015/03/23 06:34:31
Can we use the hashed ids? See https://code.google
mtomasz
2015/03/23 06:39:10
Would they be better? We already have constants wi
benwells
2015/03/23 09:30:09
We normally use the hashed IDs everywhere for cons
benwells
2015/03/23 09:31:01
Are these all component apps? I guess in that case
mtomasz
2015/03/23 09:38:51
Yes, they are all component apps. We don't have ha
|
| + file_manager::kFileManagerAppId, |
| + file_manager::kVideoPlayerAppId, |
| + file_manager::kGalleryAppId, |
| + file_manager::kAudioPlayerAppId, |
| + file_manager::kImageLoaderExtensionId, |
| + "pkplfbidichfdicaijlchgnapepdginl" // Testing extensions. |
| +}; |
| #endif |
| namespace file_system = extensions::api::file_system; |
| @@ -1024,11 +1036,20 @@ ExtensionFunction::ResponseAction FileSystemRequestFileSystemFunction::Run() { |
| return RespondNow(Error(kNotSupportedOnCurrentPlatformError)); |
| #else |
| - // Only kiosk apps in kiosk sessions can use this API. Additionally component |
| - // extensions and apps, which is not documented though. |
| + // Only kiosk apps in kiosk sessions can use this API. |
| + // Additionally whitelisted component extensions and apps. |
| + bool is_whitelisted_component = false; |
| + if (extension()->location() == Manifest::COMPONENT) { |
| + for (const auto& whitelisted_id : kRequestFileSystemComponentWhitelist) { |
| + if (extension_id().compare(whitelisted_id) == 0) { |
| + is_whitelisted_component = true; |
| + break; |
| + } |
| + } |
| + } |
| if ((!user_manager::UserManager::Get()->IsLoggedInAsKioskApp() || |
| !KioskModeInfo::IsKioskEnabled(extension())) && |
| - extension()->location() != Manifest::COMPONENT) { |
| + !is_whitelisted_component) { |
| return RespondNow(Error(kNotSupportedOnNonKioskSessionError)); |
| } |
| @@ -1071,8 +1092,7 @@ ExtensionFunction::ResponseAction FileSystemRequestFileSystemFunction::Run() { |
| const bool is_auto_launched = |
| chromeos::KioskAppManager::Get()->GetApp(extension_id(), &app_info) && |
| app_info.was_auto_launched_with_zero_delay; |
| - const bool requires_consent = |
| - !is_auto_launched && extension()->location() != Manifest::COMPONENT; |
| + const bool requires_consent = !is_auto_launched && !is_whitelisted_component; |
| if (!requires_consent) { |
| // Grant the permission without showing the dialog. |