#ifndef CONTENT_TEST_DWRITE_FONT_FAKE_SENDER_WIN_H_
#define CONTENT_TEST_DWRITE_FONT_FAKE_SENDER_WIN_H_
#include <stddef.h>
#include <stdint.h>
#include <wrl.h>
#include <string>
#include <utility>
#include <vector>
#include "base/files/file_path.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "third_party/blink/public/mojom/dwrite_font_proxy/dwrite_font_proxy.mojom.h"
namespace content {
class FakeFontCollection;
base::RepeatingCallback<
mojo::PendingRemote<blink::mojom::DWriteFontProxy>(void)>
CreateFakeCollectionSender();
class FakeFont {
public:
explicit FakeFont(const std::u16string& name);
FakeFont& operator=(const FakeFont&) = delete;
FakeFont(FakeFont&& other);
~FakeFont();
FakeFont& AddFilePath(const base::FilePath& file_path) {
file_paths_.push_back(file_path);
return *this;
}
FakeFont& AddFileHandle(base::File handle) {
file_handles_.push_back(std::move(handle));
return *this;
}
FakeFont& AddFamilyName(const std::u16string& locale,
const std::u16string& family_name) {
family_names_.emplace_back(locale, family_name);
return *this;
}
const std::u16string& font_name() { return font_name_; }
private:
friend FakeFontCollection;
std::u16string font_name_;
std::vector<base::FilePath> file_paths_;
std::vector<base::File> file_handles_;
std::vector<std::pair<std::u16string, std::u16string>> family_names_;
};
class FakeFontCollection : public blink::mojom::DWriteFontProxy {
public:
enum class MessageType {
kFindFamily,
kGetFamilyCount,
kGetFamilyNames,
kGetFontFileHandles,
kMapCharacters
};
FakeFontCollection();
FakeFontCollection(const FakeFontCollection&) = delete;
FakeFontCollection& operator=(const FakeFontCollection&) = delete;
~FakeFontCollection() override;
FakeFont& AddFont(const std::u16string& font_name);
size_t MessageCount();
MessageType GetMessageType(size_t id);
mojo::PendingRemote<blink::mojom::DWriteFontProxy> CreateRemote();
protected:
void FindFamily(const std::u16string& family_name,
FindFamilyCallback callback) override;
void GetFamilyCount(GetFamilyCountCallback callback) override;
void GetFamilyNames(uint32_t family_index,
GetFamilyNamesCallback callback) override;
void GetFontFileHandles(uint32_t family_index,
GetFontFileHandlesCallback callback) override;
void MapCharacters(const std::u16string& text,
blink::mojom::DWriteFontStylePtr font_style,
const std::u16string& locale_name,
uint32_t reading_direction,
const std::u16string& base_family_name,
MapCharactersCallback callback) override;
void MatchUniqueFont(const std::u16string& unique_font_name,
MatchUniqueFontCallback callback) override;
private:
std::vector<FakeFont> fonts_;
std::vector<MessageType> message_types_;
mojo::ReceiverSet<blink::mojom::DWriteFontProxy> receivers_;
};
}
#endif