| // Copyright 2023 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_THUMBNAIL_CC_ETC1_THUMBNAIL_HELPER_H_ |
| #define CHROME_BROWSER_THUMBNAIL_CC_ETC1_THUMBNAIL_HELPER_H_ |
| |
| #include "base/files/file_path.h" |
| #include "base/memory/weak_ptr.h" |
| #include "chrome/browser/thumbnail/cc/thumbnail.h" |
| |
| namespace thumbnail { |
| |
| class Etc1ThumbnailHelper { |
| public: |
| // Implementation of the ETC1 thumbnail helper class which takes a base |
| // file path on instantiation for future file path retrieval. |
| Etc1ThumbnailHelper( |
| const base::FilePath& base_path, |
| scoped_refptr<base::SequencedTaskRunner> file_task_runner); |
| ~Etc1ThumbnailHelper(); |
| |
| Etc1ThumbnailHelper(const Etc1ThumbnailHelper&) = delete; |
| Etc1ThumbnailHelper& operator=(const Etc1ThumbnailHelper&) = delete; |
| |
| // `post_compression_task` will run on the thread that created this |
| // Etc1ThumbnailHelper. |
| // `supports_etc_non_power_of_two` is true if the encoded bitmap bounds don't |
| // need to be a multiple of 2. |
| void Compress(SkBitmap raw_data, |
| bool supports_etc_non_power_of_two, |
| base::OnceCallback<void(sk_sp<SkPixelRef>, const gfx::Size&)> |
| post_compression_task); |
| // `post_write_task` will run on the thread that created this |
| // Etc1ThumbnailHelper. |
| void Write(thumbnail::TabId tab_id, |
| sk_sp<SkPixelRef> compressed_data, |
| float scale, |
| const gfx::Size& content_size, |
| base::OnceClosure post_write_task); |
| // Callers are expected to bind `post_read_task` to the correct thread. |
| void Read(thumbnail::TabId tab_id, |
| base::OnceCallback<void(sk_sp<SkPixelRef>, float, const gfx::Size&)> |
| post_read_task); |
| void Delete(thumbnail::TabId tab_id); |
| // `post_decompress_callback` will run on the thread that created this |
| // Etc1ThumbnailHelper. |
| void Decompress( |
| base::OnceCallback<void(bool, const SkBitmap&)> post_decompress_callback, |
| sk_sp<SkPixelRef> compressed_data, |
| float scale, |
| const gfx::Size& encoded_size); |
| |
| base::WeakPtr<Etc1ThumbnailHelper> GetWeakPtr() { |
| return weak_ptr_factory_.GetWeakPtr(); |
| } |
| |
| private: |
| friend class Etc1ThumbnailHelperTest; |
| |
| // Member function to retrieve the ETC1 file path using the stored base |
| // path, and is exposed primarily for unit testing purposes. |
| base::FilePath GetFilePath(thumbnail::TabId tab_id); |
| |
| const base::FilePath base_path_; |
| |
| scoped_refptr<base::SequencedTaskRunner> default_task_runner_; |
| scoped_refptr<base::SequencedTaskRunner> file_task_runner_; |
| base::WeakPtrFactory<Etc1ThumbnailHelper> weak_ptr_factory_{this}; |
| }; |
| |
| } // namespace thumbnail |
| |
| #endif // CHROME_BROWSER_THUMBNAIL_CC_ETC1_THUMBNAIL_HELPER_H_ |