#ifndef ASH_CLIPBOARD_CLIPBOARD_HISTORY_RESOURCE_MANAGER_H_
#define ASH_CLIPBOARD_CLIPBOARD_HISTORY_RESOURCE_MANAGER_H_
#include <string>
#include <vector>
#include "ash/ash_export.h"
#include "ash/clipboard/clipboard_history.h"
#include "ash/clipboard/clipboard_history_item.h"
#include "base/memory/raw_ptr.h"
#include "base/observer_list.h"
#include "base/observer_list_types.h"
#include "base/unguessable_token.h"
#include "ui/base/models/image_model.h"
namespace ash {
class ASH_EXPORT ClipboardHistoryResourceManager
: public ClipboardHistory::Observer {
public:
class Observer : public base::CheckedObserver {
public:
virtual void OnCachedImageModelUpdated(
const std::vector<base::UnguessableToken>& menu_item_ids) = 0;
};
explicit ClipboardHistoryResourceManager(ClipboardHistory* clipboard_history);
ClipboardHistoryResourceManager(const ClipboardHistoryResourceManager&) =
delete;
ClipboardHistoryResourceManager& operator=(
const ClipboardHistoryResourceManager&) = delete;
~ClipboardHistoryResourceManager() override;
void AddObserver(Observer* observer) const;
void RemoveObserver(Observer* observer) const;
private:
struct ImageModelRequest {
ImageModelRequest();
ImageModelRequest(const ImageModelRequest&);
ImageModelRequest& operator=(const ImageModelRequest&);
~ImageModelRequest();
base::UnguessableToken id;
std::vector<base::UnguessableToken> clipboard_history_item_ids;
};
void SetOrRequestHtmlPreview(const ClipboardHistoryItem& item);
void OnImageModelRendered(const base::UnguessableToken& id,
ui::ImageModel image_model);
std::vector<ImageModelRequest>::iterator GetImageModelRequestForItem(
const ClipboardHistoryItem& item);
void CancelUnfinishedRequests();
void OnClipboardHistoryItemAdded(const ClipboardHistoryItem& item,
bool is_duplicate) override;
void OnClipboardHistoryItemRemoved(const ClipboardHistoryItem& item) override;
void OnClipboardHistoryCleared() override;
const raw_ptr<ClipboardHistory> clipboard_history_;
std::vector<ImageModelRequest> image_model_requests_;
mutable base::ObserverList<Observer> observers_;
base::WeakPtrFactory<ClipboardHistoryResourceManager> weak_factory_{this};
};
}
#endif