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 a35ff68f3f89ba507e337364c9acf248c85a4368..ba75f0d56363dee93df38b0147ba5fc638a8e832 100644 |
| --- a/chrome/browser/extensions/api/file_system/file_system_api.cc |
| +++ b/chrome/browser/extensions/api/file_system/file_system_api.cc |
| @@ -67,6 +67,7 @@ |
| #include "chrome/browser/chromeos/file_manager/app_id.h" |
| #include "chrome/browser/chromeos/file_manager/filesystem_api_util.h" |
| #include "chrome/browser/extensions/api/file_system/request_file_system_dialog_view.h" |
| +#include "chrome/browser/extensions/api/file_system/request_file_system_notification.h" |
| #include "chrome/browser/ui/simple_message_box.h" |
| #include "components/user_manager/user_manager.h" |
| #include "extensions/common/constants.h" |
| @@ -280,9 +281,10 @@ std::vector<base::FilePath> GetGrayListedDirectories() { |
| } |
| #if defined(OS_CHROMEOS) |
| -ConsentProvider::ConsentProvider( |
| - const UserConsentRequestCallback& user_consent_request_callback) |
| - : user_consent_request_callback_(user_consent_request_callback), |
| +ConsentProvider::ConsentProvider(const AskUserCallback& ask_user_callback, |
| + const NotifyUserCallback& notify_user_callback) |
| + : ask_user_callback_(ask_user_callback), |
| + notify_user_callback_(notify_user_callback), |
| is_auto_launched_callback_(base::Bind(&ConsentProvider::IsAutoLaunched, |
| base::Unretained(this))) { |
| for (const auto& whitelisted_id : kRequestFileSystemComponentWhitelist) |
| @@ -311,19 +313,27 @@ void ConsentProvider::RequestConsent( |
| } |
| const bool is_auto_launched = is_auto_launched_callback_.Run(extension); |
| - const bool requires_consent = |
| - !is_auto_launched && extension.location() != Manifest::COMPONENT; |
| - if (!requires_consent) { |
| - // Grant the permission without showing the dialog. |
| + if (extension.location() == Manifest::COMPONENT) { |
| + // Grant the permission without showing the dialog or notification. |
| base::ThreadTaskRunnerHandle::Get()->PostTask( |
| FROM_HERE, base::Bind(callback, CONSENT_GRANTED)); |
| - } else { |
| - DCHECK(!user_consent_request_callback_.is_null()); |
| + return; |
| + } else if (is_auto_launched) { |
|
jww
2015/03/26 20:14:59
How does this work with non-auto launched apps tha
mtomasz
2015/03/26 23:24:11
For non-auto kiosk apps, we show the confirmation
jww
2015/03/27 15:59:11
I see. So it doesn't persist, and every time the a
|
| + // Grant the permission without showing the dialog, but with a notification. |
| + DCHECK(!notify_user_callback_.is_null()); |
| + base::ThreadTaskRunnerHandle::Get()->PostTask( |
| + FROM_HERE, base::Bind(notify_user_callback_, volume_info, writable)); |
| base::ThreadTaskRunnerHandle::Get()->PostTask( |
| - FROM_HERE, base::Bind(user_consent_request_callback_, volume_info, |
| - writable, callback)); |
| + FROM_HERE, base::Bind(callback, CONSENT_GRANTED)); |
| + return; |
| } |
| + |
| + // By default ask for user consent. |
| + DCHECK(!ask_user_callback_.is_null()); |
| + base::ThreadTaskRunnerHandle::Get()->PostTask( |
| + FROM_HERE, |
| + base::Bind(ask_user_callback_, volume_info, writable, callback)); |
| } |
| bool ConsentProvider::IsGrantable(const Extension& extension) { |
| @@ -1132,8 +1142,9 @@ bool FileSystemGetObservedEntriesFunction::RunSync() { |
| FileSystemRequestFileSystemFunction::FileSystemRequestFileSystemFunction() |
| : chrome_details_(this) { |
| #if defined(OS_CHROMEOS) |
| - consent_provider_.reset(new ConsentProvider(base::Bind( |
| - &FileSystemRequestFileSystemFunction::OnUserConsentRequested, this))); |
| + consent_provider_.reset(new ConsentProvider( |
| + base::Bind(&FileSystemRequestFileSystemFunction::OnAskUser, this), |
| + base::Bind(&FileSystemRequestFileSystemFunction::OnNotifyUser, this))); |
| #endif |
| } |
| @@ -1210,7 +1221,7 @@ void FileSystemRequestFileSystemFunction::SetAutoDialogButtonForTesting( |
| FileSystemRequestFileSystemFunction::auto_dialog_button_for_testing_ = button; |
| } |
| -void FileSystemRequestFileSystemFunction::OnUserConsentRequested( |
| +void FileSystemRequestFileSystemFunction::OnAskUser( |
| const file_manager::VolumeInfo& volume_info, |
| bool writable, |
| const ConsentProvider::ConsentCallback& callback) { |
| @@ -1248,6 +1259,13 @@ void FileSystemRequestFileSystemFunction::OnUserConsentRequested( |
| callback)); |
| } |
| +void FileSystemRequestFileSystemFunction::OnNotifyUser( |
| + const file_manager::VolumeInfo& volume_info, |
| + bool writable) { |
| + RequestFileSystemNotification::ShowAutoGrantedNotification( |
| + chrome_details_.GetProfile(), *extension(), volume_info, writable); |
| +} |
| + |
| void FileSystemRequestFileSystemFunction::OnUserConsentDialogClosed( |
| const ConsentProvider::ConsentCallback& callback, |
| ui::DialogButton result) { |