| Index: content/test/dwrite_font_fake_sender_win.h
|
| diff --git a/content/test/dwrite_font_fake_sender_win.h b/content/test/dwrite_font_fake_sender_win.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..8b3d7ba02de5319dbcfce17813b4ec296ff9ab1e
|
| --- /dev/null
|
| +++ b/content/test/dwrite_font_fake_sender_win.h
|
| @@ -0,0 +1,135 @@
|
| +// Copyright (c) 2015 The Chromium Authors. All rights reserved.
|
| +// 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 <wrl.h>
|
| +
|
| +#include <utility>
|
| +#include <vector>
|
| +
|
| +#include "base/memory/ref_counted.h"
|
| +#include "base/strings/string16.h"
|
| +#include "ipc/ipc_message.h"
|
| +#include "ipc/ipc_sender.h"
|
| +
|
| +namespace content {
|
| +
|
| +IPC::Sender* CreateFakeCollectionSender();
|
| +
|
| +class FakeFontCollection;
|
| +// Helper class for describing a font object. Use FakeFontCollection instead.
|
| +class FakeFont {
|
| + public:
|
| + explicit FakeFont(const base::string16& name) : font_name_(name) {}
|
| + FakeFont& AddFilePath(const base::string16& file_path) {
|
| + file_paths_.push_back(file_path);
|
| + return *this;
|
| + }
|
| + FakeFont& AddFamilyName(const base::string16& locale,
|
| + const base::string16& family_name) {
|
| + family_names_.emplace_back(locale, family_name);
|
| + return *this;
|
| + }
|
| +
|
| + private:
|
| + friend FakeFontCollection;
|
| + base::string16 font_name_;
|
| + std::vector<base::string16> file_paths_;
|
| + std::vector<std::pair<base::string16, base::string16>> 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()/GetMessage() to inspect the messages that were sent.
|
| +//
|
| +// 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 base::RefCounted<FakeFontCollection> {
|
| + public:
|
| + FakeFont& AddFont(const base::string16& font_name);
|
| +
|
| + unsigned int MessageCount();
|
| +
|
| + IPC::Message* GetMessage(unsigned int index);
|
| +
|
| + IPC::Sender* GetSender();
|
| +
|
| + // Like GetSender(), but will keep track of all sent messages for inspection.
|
| + IPC::Sender* GetTrackingSender();
|
| +
|
| + protected:
|
| + // This class handles sending the reply message back to the "renderer"
|
| + class ReplySender : public IPC::Sender {
|
| + public:
|
| + explicit ReplySender(FakeFontCollection* collection)
|
| + : collection_(collection) {}
|
| + scoped_ptr<IPC::Message>& OnMessageReceived(const IPC::Message& msg);
|
| + bool Send(IPC::Message* msg) override;
|
| +
|
| + private:
|
| + void OnFindFamily(const base::string16& family_name, uint32* index);
|
| +
|
| + void OnGetFamilyCount(uint32* count);
|
| +
|
| + void OnGetFamilyNames(
|
| + uint32 family_index,
|
| + std::vector<std::pair<base::string16, base::string16>>* family_names);
|
| + void OnGetFontFiles(uint32 family_index,
|
| + std::vector<base::string16>* file_paths_);
|
| +
|
| + private:
|
| + scoped_refptr<FakeFontCollection> collection_;
|
| + scoped_ptr<IPC::Message> reply_;
|
| + };
|
| + // This class can be used by the "renderer" to send messages to the "browser"
|
| + class FakeSender : public IPC::Sender {
|
| + public:
|
| + FakeSender(FakeFontCollection* collection, bool track_messages)
|
| + : collection_(collection), track_messages_(track_messages) {}
|
| + bool Send(IPC::Message* message) override;
|
| +
|
| + private:
|
| + bool track_messages_;
|
| + scoped_refptr<FakeFontCollection> collection_;
|
| + };
|
| +
|
| + void OnFindFamily(const base::string16& family_name, uint32* index);
|
| +
|
| + void OnGetFamilyCount(uint32* count);
|
| +
|
| + void OnGetFamilyNames(
|
| + uint32 family_index,
|
| + std::vector<std::pair<base::string16, base::string16>>* family_names);
|
| + void OnGetFontFiles(uint32 family_index,
|
| + std::vector<base::string16>* file_paths);
|
| +
|
| + std::unique_ptr<ReplySender> GetReplySender();
|
| +
|
| + private:
|
| + friend class base::RefCounted<FakeFontCollection>;
|
| + ~FakeFontCollection() {}
|
| +
|
| + std::vector<FakeFont> fonts_;
|
| + std::vector<std::unique_ptr<IPC::Message>> messages_;
|
| +};
|
| +
|
| +} // namespace content
|
| +
|
| +#endif // CONTENT_TEST_DWRITE_FONT_FAKE_SENDER_WIN_H_
|
|
|