| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_LACROS_LACROS_FILE_SYSTEM_PROVIDER_H_ |
| #define CHROME_BROWSER_LACROS_LACROS_FILE_SYSTEM_PROVIDER_H_ |
| |
| #include "base/memory/weak_ptr.h" |
| #include "base/scoped_observation.h" |
| #include "chromeos/crosapi/mojom/file_system_provider.mojom.h" |
| #include "extensions/browser/extension_registry.h" |
| #include "extensions/browser/extension_registry_observer.h" |
| #include "mojo/public/cpp/bindings/receiver.h" |
| |
| // This class has two responsibilities: |
| // (1) It receives file system provider events from Ash. These are forwarded |
| // to the corresponding main profile file system provider extension. |
| // (2) It detects extension loading/unloading in the main profile and forwards |
| // events to ash. |
| class LacrosFileSystemProvider : public crosapi::mojom::FileSystemProvider, |
| public extensions::ExtensionRegistryObserver { |
| public: |
| LacrosFileSystemProvider(); |
| ~LacrosFileSystemProvider() override; |
| LacrosFileSystemProvider(const LacrosFileSystemProvider&) = delete; |
| LacrosFileSystemProvider& operator=(const LacrosFileSystemProvider&) = delete; |
| |
| // crosapi::mojom::FileSystemProvider |
| void DeprecatedDeprecatedForwardOperation( |
| const std::string& provider, |
| int32_t histogram_value, |
| const std::string& event_name, |
| std::vector<base::Value> args) override; |
| void DeprecatedForwardOperation(const std::string& provider, |
| int32_t histogram_value, |
| const std::string& event_name, |
| std::vector<base::Value> args, |
| ForwardOperationCallback callback) override; |
| void ForwardOperation(const std::string& provider, |
| int32_t histogram_value, |
| const std::string& event_name, |
| base::Value::List args, |
| ForwardOperationCallback callback) override; |
| void ForwardRequest(const std::string& provider, |
| const std::optional<std::string>& file_system_id, |
| int64_t request_id, |
| int32_t histogram_value, |
| const std::string& event_name, |
| base::Value::List args, |
| ForwardRequestCallback callback) override; |
| void CancelRequest(const std::string& provider, |
| const std::optional<std::string>& file_system_id, |
| int64_t request_id) override; |
| |
| // extensions::ExtensionRegistryObserver overrides. |
| void OnExtensionLoaded(content::BrowserContext* browser_context, |
| const extensions::Extension* extension) override; |
| void OnExtensionUnloaded(content::BrowserContext* browser_context, |
| const extensions::Extension* extension, |
| extensions::UnloadedExtensionReason reason) override; |
| void OnShutdown(extensions::ExtensionRegistry* registry) override; |
| |
| private: |
| // Mojo endpoint that's responsible for receiving messages from Ash. |
| mojo::Receiver<crosapi::mojom::FileSystemProvider> receiver_; |
| |
| base::ScopedObservation<extensions::ExtensionRegistry, |
| extensions::ExtensionRegistryObserver> |
| extension_observation_{this}; |
| |
| base::WeakPtrFactory<LacrosFileSystemProvider> weak_factory_{this}; |
| }; |
| |
| #endif // CHROME_BROWSER_LACROS_LACROS_FILE_SYSTEM_PROVIDER_H_ |