| // Copyright 2021 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_ASH_CROSTINI_CROSTINI_MOUNT_PROVIDER_H_ |
| #define CHROME_BROWSER_ASH_CROSTINI_CROSTINI_MOUNT_PROVIDER_H_ |
| |
| #include "base/callback_list.h" |
| #include "base/memory/raw_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/scoped_observation.h" |
| #include "chrome/browser/ash/crostini/crostini_manager.h" |
| #include "chrome/browser/ash/crostini/crostini_simple_types.h" |
| #include "chrome/browser/ash/guest_os/public/guest_os_mount_provider.h" |
| |
| namespace guest_os { |
| class GuestOsFileWatcher; |
| } // namespace guest_os |
| |
| namespace crostini { |
| |
| class CrostiniMountProvider : public guest_os::GuestOsMountProvider, |
| public ContainerShutdownObserver { |
| public: |
| explicit CrostiniMountProvider(Profile* profile, |
| guest_os::GuestId container_id); |
| |
| CrostiniMountProvider(const CrostiniMountProvider&) = delete; |
| CrostiniMountProvider& operator=(const CrostiniMountProvider&) = delete; |
| |
| ~CrostiniMountProvider() override; |
| |
| // GuestOsMountProvider overrides |
| Profile* profile() override; |
| std::string DisplayName() override; |
| guest_os::GuestId GuestId() override; |
| guest_os::VmType vm_type() override; |
| |
| std::unique_ptr<guest_os::GuestOsFileWatcher> CreateFileWatcher( |
| base::FilePath mount_path, |
| base::FilePath relative_path) override; |
| |
| // ContainerShutdownObserver override |
| void OnContainerShutdown(const guest_os::GuestId& container_id) override; |
| |
| protected: |
| // GuestOsMountProvider override. Make sure Crostini's running, then get |
| // address info e.g. cid and vsock port. |
| void Prepare(PrepareCallback callback) override; |
| |
| private: |
| void OnRestarted(PrepareCallback callback, CrostiniResult result); |
| |
| raw_ptr<Profile> profile_; |
| guest_os::GuestId container_id_; |
| base::ScopedObservation<CrostiniManager, ContainerShutdownObserver> |
| container_shutdown_observer_{this}; |
| base::CallbackListSubscription subscription_; |
| |
| // Note: This should remain the last member so it'll be destroyed and |
| // invalidate its weak pointers before any other members are destroyed. |
| base::WeakPtrFactory<CrostiniMountProvider> weak_ptr_factory_{this}; |
| }; |
| } // namespace crostini |
| |
| #endif // CHROME_BROWSER_ASH_CROSTINI_CROSTINI_MOUNT_PROVIDER_H_ |