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

Unified Diff: chrome/browser/extensions/api/file_system/chrome_file_system_delegate.h

Issue 2934143002: Move chrome.fileSystem implementation to //extensions (Closed)
Patch Set: devlin Created 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/file_system/chrome_file_system_delegate.h
diff --git a/chrome/browser/extensions/api/file_system/consent_provider.h b/chrome/browser/extensions/api/file_system/chrome_file_system_delegate.h
similarity index 10%
copy from chrome/browser/extensions/api/file_system/consent_provider.h
copy to chrome/browser/extensions/api/file_system/chrome_file_system_delegate.h
index 3a517b6f68d8296547812c32ab50f57d2c7d023f..938ec2ba74971b25ff198c561ac8e826d21e1a3e 100644
--- a/chrome/browser/extensions/api/file_system/consent_provider.h
+++ b/chrome/browser/extensions/api/file_system/chrome_file_system_delegate.h
@@ -2,116 +2,94 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_EXTENSIONS_API_FILE_SYSTEM_CONSENT_PROVIDER_H_
-#define CHROME_BROWSER_EXTENSIONS_API_FILE_SYSTEM_CONSENT_PROVIDER_H_
+#ifndef CHROME_BROWSER_EXTENSIONS_API_FILE_SYSTEM_CHROME_FILE_SYSTEM_DELEGATE_H_
+#define CHROME_BROWSER_EXTENSIONS_API_FILE_SYSTEM_CHROME_FILE_SYSTEM_DELEGATE_H_
+
+#include "extensions/browser/api/file_system/file_system_delegate.h"
-#include "base/callback_forward.h"
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "build/build_config.h"
-#include "ui/base/ui_base_types.h"
-
-class Profile;
-namespace content {
-class RenderFrameHost;
-} // content
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/extensions/api/file_system/consent_provider.h"
+#endif
namespace file_manager {
class Volume;
-} // namespace file_manager
+}
namespace extensions {
-class Extension;
-class ScopedSkipRequestFileSystemDialog;
+#if defined(OS_CHROMEOS)
namespace file_system_api {
-// Requests consent for the chrome.fileSystem.requestFileSystem() method.
-// Interaction with UI and environmental checks (kiosk mode, whitelist) are
-// provided by a delegate: ConsentProviderDelegate. For testing, it is
-// TestingConsentProviderDelegate.
-class ConsentProvider {
- public:
- enum Consent { CONSENT_GRANTED, CONSENT_REJECTED, CONSENT_IMPOSSIBLE };
- typedef base::Callback<void(Consent)> ConsentCallback;
- typedef base::Callback<void(ui::DialogButton)> ShowDialogCallback;
-
- // Interface for delegating user interaction for granting permissions.
- class DelegateInterface {
- public:
- // Shows a dialog for granting permissions.
- virtual void ShowDialog(const Extension& extension,
- const base::WeakPtr<file_manager::Volume>& volume,
- bool writable,
- const ShowDialogCallback& callback) = 0;
-
- // Shows a notification about permissions automatically granted access.
- virtual void ShowNotification(
- const Extension& extension,
- const base::WeakPtr<file_manager::Volume>& volume,
- bool writable) = 0;
-
- // Checks if the extension was launched in auto-launch kiosk mode.
- virtual bool IsAutoLaunched(const Extension& extension) = 0;
-
- // Checks if the extension is a whitelisted component extension or app.
- virtual bool IsWhitelistedComponent(const Extension& extension) = 0;
- };
-
- explicit ConsentProvider(DelegateInterface* delegate);
- ~ConsentProvider();
-
- // Requests consent for granting |writable| permissions to the |volume|
- // volume by the |extension|. Must be called only if the extension is
- // grantable, which can be checked with IsGrantable().
- void RequestConsent(const Extension& extension,
- const base::WeakPtr<file_manager::Volume>& volume,
- bool writable,
- const ConsentCallback& callback);
-
- // Checks whether the |extension| can be granted access.
- bool IsGrantable(const Extension& extension);
+// Dispatches an event about a mounted or unmounted volume in the system to
+// each extension which can request it.
+void DispatchVolumeListChangeEvent(content::BrowserContext* browser_context);
- private:
- DelegateInterface* const delegate_;
-
- DISALLOW_COPY_AND_ASSIGN(ConsentProvider);
-};
+} // namespace file_system_api
+#endif // defined(OS_CHROMEOS)
-// Handles interaction with user as well as environment checks (whitelists,
-// context of running extensions) for ConsentProvider.
-class ConsentProviderDelegate : public ConsentProvider::DelegateInterface {
+class ChromeFileSystemDelegate : public FileSystemDelegate {
public:
- ConsentProviderDelegate(Profile* profile, content::RenderFrameHost* host);
- ~ConsentProviderDelegate();
+ ChromeFileSystemDelegate();
+ ~ChromeFileSystemDelegate() override;
+
+ // FileSystemDelegate:
+ base::FilePath GetDefaultDirectory() override;
+ std::unique_ptr<ui::SelectFilePolicy> CreateSelectFilePolicy(
+ content::WebContents* web_contents) override;
+ scoped_refptr<ui::SelectFileDialog> CreateSelectFileDialog(
+ ui::SelectFileDialog::Listener* listener,
+ std::unique_ptr<ui::SelectFilePolicy> policy) override;
+ void ShowSelectFileDialogForWebContents(
+ scoped_refptr<ui::SelectFileDialog> dialog,
+ content::WebContents* web_contents,
+ ui::SelectFileDialog::Type type,
+ const base::FilePath& default_path,
+ const ui::SelectFileDialog::FileTypeInfo* file_types) override;
+ void ConfirmSensitiveDirectoryAccess(bool has_write_permission,
+ const base::string16& app_name,
+ content::WebContents* web_contents,
+ const base::Closure& on_accept,
+ const base::Closure& on_cancel) override;
+ bool GetDescriptionIdForAcceptType(const std::string& accept_type,
+ int* description_id) override;
+#if defined(OS_CHROMEOS)
+ bool IsGrantable(content::BrowserContext* browser_context,
+ content::RenderFrameHost* render_frame_host,
+ const Extension& extension) override;
+ void RequestFileSystem(content::BrowserContext* browser_context,
+ scoped_refptr<UIThreadExtensionFunction> requester,
+ const Extension& extension,
+ std::string volume_id,
+ bool writable,
+ const FileSystemCallback& success_callback,
+ const ErrorCallback& error_callback) override;
+ void GetVolumeList(content::BrowserContext* browser_context,
+ const VolumeListCallback& success_callback,
+ const ErrorCallback& error_callback) override;
+#endif // defined(OS_CHROMEOS)
+ std::unique_ptr<file_system_api::SavedFilesServiceDelegate>
+ CreateSavedFilesServiceDelegate(
+ content::BrowserContext* browser_context) override;
private:
- friend ScopedSkipRequestFileSystemDialog;
-
- // Sets a fake result for the user consent dialog. If ui::DIALOG_BUTTON_NONE
- // then disabled.
- static void SetAutoDialogButtonForTest(ui::DialogButton button);
-
- // ConsentProvider::DelegateInterface overrides:
- void ShowDialog(const Extension& extension,
- const base::WeakPtr<file_manager::Volume>& volume,
- bool writable,
- const file_system_api::ConsentProvider::ShowDialogCallback&
- callback) override;
- void ShowNotification(const Extension& extension,
- const base::WeakPtr<file_manager::Volume>& volume,
- bool writable) override;
- bool IsAutoLaunched(const Extension& extension) override;
- bool IsWhitelistedComponent(const Extension& extension) override;
-
- Profile* const profile_;
- content::RenderFrameHost* const host_;
-
- DISALLOW_COPY_AND_ASSIGN(ConsentProviderDelegate);
+#if defined(OS_CHROMEOS)
+ void OnConsentReceived(content::BrowserContext* browser_context,
+ scoped_refptr<UIThreadExtensionFunction> requester,
+ const FileSystemCallback& success_callback,
+ const ErrorCallback& error_callback,
+ const std::string& extension,
+ const base::WeakPtr<file_manager::Volume>& volume,
+ bool writable,
+ file_system_api::ConsentProvider::Consent result);
+#endif // defined(OS_CHROMEOS)
+
+ DISALLOW_COPY_AND_ASSIGN(ChromeFileSystemDelegate);
};
-} // namespace file_system_api
} // namespace extensions
-#endif // CHROME_BROWSER_EXTENSIONS_API_FILE_SYSTEM_CONSENT_PROVIDER_H_
+#endif // CHROME_BROWSER_EXTENSIONS_API_FILE_SYSTEM_CHROME_FILE_SYSTEM_DELEGATE_H_

Powered by Google App Engine
This is Rietveld 408576698