| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_CHROMEOS_FILE_MANAGER_SNAPSHOT_MANAGER_H_ |
| #define CHROME_BROWSER_CHROMEOS_FILE_MANAGER_SNAPSHOT_MANAGER_H_ |
| |
| #include <deque> |
| |
| #include "base/callback_forward.h" |
| #include "base/files/file.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/memory/weak_ptr.h" |
| |
| class Profile; |
| |
| namespace base { |
| class FilePath; |
| } // namespace base |
| |
| namespace fileapi { |
| class FileSystemURL; |
| } // namespace fileapi |
| |
| namespace webkit_blob { |
| class ShareableFileReference; |
| } // namespace webkit_blob |
| |
| 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::Callback<void(const base::FilePath&)> LocalPathCallback; |
| |
| explicit SnapshotManager(Profile* profile); |
| ~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, |
| const LocalPathCallback& callback); |
| |
| // Struct for keeping the snapshot file reference with its file size used for |
| // computing the necessity of clean up. |
| struct FileReferenceWithSizeInfo { |
| FileReferenceWithSizeInfo( |
| scoped_refptr<webkit_blob::ShareableFileReference> ref, |
| int64 size); |
| ~FileReferenceWithSizeInfo(); |
| scoped_refptr<webkit_blob::ShareableFileReference> file_ref; |
| int64 file_size; |
| }; |
| |
| private: |
| // Part of CreateManagedSnapshot. |
| void CreateManagedSnapshotAfterSpaceComputed( |
| const fileapi::FileSystemURL& filesystem_url, |
| const LocalPathCallback& callback, |
| int64 needed_space); |
| |
| // Part of CreateManagedSnapshot. |
| void OnCreateSnapshotFile( |
| const LocalPathCallback& callback, |
| base::File::Error result, |
| const base::File::Info& file_info, |
| const base::FilePath& platform_path, |
| const scoped_refptr<webkit_blob::ShareableFileReference>& file_ref); |
| |
| Profile* profile_; |
| std::deque<FileReferenceWithSizeInfo> file_refs_; |
| |
| // 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_; |
| DISALLOW_COPY_AND_ASSIGN(SnapshotManager); |
| }; |
| |
| } // namespace file_manager |
| |
| #endif // CHROME_BROWSER_CHROMEOS_FILE_MANAGER_SNAPSHOT_MANAGER_H_ |