| // Copyright 2020 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_WEBSHARE_PREPARE_DIRECTORY_TASK_H_ |
| #define CHROME_BROWSER_WEBSHARE_PREPARE_DIRECTORY_TASK_H_ |
| |
| #include "base/files/file_path.h" |
| #include "base/files/file_util.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/time/time.h" |
| #include "third_party/blink/public/mojom/webshare/webshare.mojom.h" |
| |
| namespace webshare { |
| |
| // Creates a directory to hold files being shared to SharesheetService. |
| // Deletes any old files remaining from past shares. |
| class PrepareDirectoryTask { |
| public: |
| static constexpr base::TimeDelta kSharedFileLifetime = base::Minutes(10); |
| |
| PrepareDirectoryTask(base::FilePath directory, uint64_t required_space); |
| PrepareDirectoryTask(base::FilePath directory, |
| uint64_t required_space, |
| blink::mojom::ShareService::ShareCallback callback); |
| PrepareDirectoryTask(const PrepareDirectoryTask&) = delete; |
| PrepareDirectoryTask& operator=(const PrepareDirectoryTask&) = delete; |
| ~PrepareDirectoryTask(); |
| |
| // Deletes specified |file_paths| after waiting |delay|. |
| static void ScheduleSharedFileDeletion(std::vector<base::FilePath> file_paths, |
| base::TimeDelta delay); |
| |
| // Launches the task. |callback_| will be called on the original (UI) thread |
| // when the task completes. |
| void Start(); |
| |
| using PrepareDirectoryCallback = |
| base::OnceCallback<void(base::File::Error result)>; |
| |
| // Launches the task. Supplied |callback| will be called on the UI thread |
| // when the PrepareDirectory task completes. |
| void StartWithCallback(PrepareDirectoryCallback callback); |
| |
| private: |
| // Runs on a thread where blocking is permitted. |
| static base::File::Error PrepareDirectory(base::FilePath directory, |
| uint64_t required_space); |
| |
| void OnPrepareDirectory(base::File::Error result); |
| |
| const base::FilePath directory_; |
| const uint64_t required_space_; |
| blink::mojom::ShareService::ShareCallback callback_; |
| |
| base::WeakPtrFactory<PrepareDirectoryTask> weak_ptr_factory_{this}; |
| }; |
| |
| } // namespace webshare |
| |
| #endif // CHROME_BROWSER_WEBSHARE_PREPARE_DIRECTORY_TASK_H_ |