|  | // Copyright 2014 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_FILE_MANAGER_SNAPSHOT_MANAGER_H_ | 
|  | #define CHROME_BROWSER_ASH_FILE_MANAGER_SNAPSHOT_MANAGER_H_ | 
|  |  | 
|  | #include <stdint.h> | 
|  |  | 
|  | #include "base/functional/callback_forward.h" | 
|  | #include "base/memory/raw_ptr.h" | 
|  | #include "base/memory/scoped_refptr.h" | 
|  | #include "base/memory/weak_ptr.h" | 
|  |  | 
|  | class Profile; | 
|  |  | 
|  | namespace base { | 
|  | class FilePath; | 
|  | }  // namespace base | 
|  |  | 
|  | namespace storage { | 
|  | class FileSystemURL; | 
|  | }  // namespace storage | 
|  |  | 
|  | namespace file_manager { | 
|  |  | 
|  | // Utility class for creating a snapshot of a file system file on local disk. | 
|  | // The class wraps the underlying implementation of fileapi's CreateSnapshotFile | 
|  | // and prolongs the lifetime of snapshot files so that the client code that just | 
|  | // accepts file paths works without problems. | 
|  | class SnapshotManager { | 
|  | public: | 
|  | // The callback type for CreateManagedSnapshot. | 
|  | typedef base::OnceCallback<void(const base::FilePath&)> LocalPathCallback; | 
|  |  | 
|  | explicit SnapshotManager(Profile* profile); | 
|  |  | 
|  | SnapshotManager(const SnapshotManager&) = delete; | 
|  | SnapshotManager& operator=(const SnapshotManager&) = delete; | 
|  |  | 
|  | ~SnapshotManager(); | 
|  |  | 
|  | // Creates a snapshot file copy of a file system file |absolute_file_path| and | 
|  | // returns back to |callback|. Returns empty path for failure. | 
|  | void CreateManagedSnapshot(const base::FilePath& absolute_file_path, | 
|  | LocalPathCallback callback); | 
|  |  | 
|  | private: | 
|  | class FileRefsHolder; | 
|  |  | 
|  | // Part of CreateManagedSnapshot. | 
|  | void CreateManagedSnapshotAfterSpaceComputed( | 
|  | const storage::FileSystemURL& filesystem_url, | 
|  | LocalPathCallback callback, | 
|  | int64_t needed_space); | 
|  |  | 
|  | raw_ptr<Profile, ExperimentalAsh> profile_; | 
|  | scoped_refptr<FileRefsHolder> holder_; | 
|  |  | 
|  | // Note: This should remain the last member so it'll be destroyed and | 
|  | // invalidate the weak pointers before any other members are destroyed. | 
|  | base::WeakPtrFactory<SnapshotManager> weak_ptr_factory_{this}; | 
|  | }; | 
|  |  | 
|  | }  // namespace file_manager | 
|  |  | 
|  | #endif  // CHROME_BROWSER_ASH_FILE_MANAGER_SNAPSHOT_MANAGER_H_ |