// 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_THUMBNAIL_CAPTURE_TRACKER_H_
#define CHROME_BROWSER_THUMBNAIL_CC_THUMBNAIL_CAPTURE_TRACKER_H_
#include "base/functional/callback.h"
#include "base/memory/weak_ptr.h"
#include "base/sequence_checker.h"
namespace thumbnail {
// Tracks the status of a thumbnail as it is captured and written to
// disk. Must be created, checked and updated on a single thread.
class ThumbnailCaptureTracker {
public:
// `on_deleted` is invoked when the ThumbnailCaptureTracker is finished.
explicit ThumbnailCaptureTracker(
base::OnceCallback<void(ThumbnailCaptureTracker*)> on_deleted);
~ThumbnailCaptureTracker();
ThumbnailCaptureTracker(const ThumbnailCaptureTracker&) = delete;
ThumbnailCaptureTracker& operator=(const ThumbnailCaptureTracker&) = delete;
// Set a callback to be run once a JPEG is available.
void AddOnJpegFinishedCallback(
base::OnceCallback<void(bool)> on_jpeg_finished);
// Mark this thumbnail as having written its JPEG to disk.
void SetWroteJpeg();
// Marks this thumbnail as having failed during capture.
void MarkCaptureFailed();
// Marks this thumbnail as having failed during JPEG creation.
void MarkJpegFailed();
base::WeakPtr<ThumbnailCaptureTracker> GetWeakPtr();
private:
void RunOnJpegFinishedCallbacks(bool success);
base::OnceCallback<void(ThumbnailCaptureTracker*)> on_deleted_;
std::vector<base::OnceCallback<void(bool)>> on_jpeg_finished_callbacks_;
bool wrote_jpeg_{false};
bool capture_failed_{false};
bool jpeg_failed_{false};
SEQUENCE_CHECKER(sequence_checker_);
base::WeakPtrFactory<ThumbnailCaptureTracker> weak_ptr_factory_{this};
};
} // namespace thumbnail
#endif // CHROME_BROWSER_THUMBNAIL_CC_THUMBNAIL_CAPTURE_TRACKER_H_