1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#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;
// Creates a new FakeFontCollection, seeded with some basic data, and returns a
// Sender that can be used to interact with the collection.
base::RepeatingCallback<
mojo::PendingRemote<blink::mojom::DWriteFontProxy>(void)>
CreateFakeCollectionSender();
// Helper class for describing a font object. Use FakeFontCollection instead.
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_;
};
// Implements a font collection that supports interaction through sending IPC
// messages from dwrite_font_proxy_messages.h.
// Usage:
// Create a new FakeFontCollection.
// Call AddFont() to add fonts.
// For each font, call methods on the font to configure the font.
// Note: the indices of the fonts will correspond to the order they were
// added. The collection will not sort or reorder fonts in any way.
// Call GetSender()/GetTrackingSender() to obtain an IPC::Sender.
// Call Send() with DWriteFontProxyMsg_* to interact with the collection.
// Call MessageCount()/GetIpcMessage() to inspect sent messages.
//
// The internal code flow for GetSender()/Send() is as follows:
// GetSender() returns a new FakeSender, pointing back to the collection.
// FakeSender::Send() will create a new ReplySender and call
// ReplySender::OnMessageReceived()
// ReplySender::OnMessageReceived() contains the message map, which will
// internally call ReplySender::On*() and ReplySender::Send()
// ReplySender::Send() will save the reply message, to be used later.
// FakeSender::Send() will retrieve the reply message and save the output.
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:
// blink::mojom::DWriteFontProxy:
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_;
};
} // namespace content
#endif // CONTENT_TEST_DWRITE_FONT_FAKE_SENDER_WIN_H_
|