| // 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/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 absl::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 absl::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_ |