| Index: content/common/fontmgr_messages.h
|
| ===================================================================
|
| --- content/common/fontmgr_messages.h (revision 0)
|
| +++ content/common/fontmgr_messages.h (working copy)
|
| @@ -0,0 +1,166 @@
|
| +// Copyright (c) 2014 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.
|
| +
|
| +// IPC messages for font discovery.
|
| +// Multiply-included message file, hence no include guard.
|
| +
|
| +#include <string>
|
| +
|
| +#include "content/common/content_export.h"
|
| +#include "content/common/content_param_traits.h"
|
| +#include "content/public/common/common_param_traits.h"
|
| +#include "ipc/ipc_message_macros.h"
|
| +#include "skia/ext/refptr.h"
|
| +#include "third_party/skia/include/core/SkDataTable.h"
|
| +#include "third_party/skia/include/core/SkStream.h"
|
| +#include "third_party/skia/include/ports/SkFontStyle.h"
|
| +#include "third_party/skia/include/ports/SkRemotableFontMgr.h"
|
| +
|
| +#undef IPC_MESSAGE_EXPORT
|
| +#define IPC_MESSAGE_EXPORT CONTENT_EXPORT
|
| +
|
| +#ifdef IPC_MESSAGE_START
|
| +#error IPC_MESSAGE_START
|
| +#endif
|
| +
|
| +#define IPC_MESSAGE_START FontMsgStart
|
| +
|
| +#ifndef CONTENT_COMMON_FONTMGR_MESSAGES_H_
|
| +#define CONTENT_COMMON_FONTMGR_MESSAGES_H_
|
| +
|
| +namespace IPC {
|
| +
|
| +template<class T>
|
| +class Optional {
|
| + public:
|
| + Optional() : set_(false) {}
|
| +
|
| + void emplace(const T& value) {
|
| + value_ = value;
|
| + set_ = true;
|
| + }
|
| +
|
| + void setHasValue() { set_ = true; }
|
| +
|
| + const T& value() const { return value_; }
|
| + T& value() { return value_; }
|
| +
|
| + const T* operator->() const { return &value_; }
|
| + T* operator->() { return &value_; }
|
| + const T& operator*() const { return value_ }
|
| + T& operator*() { return value_ }
|
| +
|
| + typedef bool Optional::*unspecified_bool_type;
|
| + operator unspecified_bool_type() const {
|
| + return set_ ? &Optional::set_ : NULL;
|
| + }
|
| +
|
| + private:
|
| + bool set_;
|
| + T value_;
|
| +};
|
| +
|
| +template <class P>
|
| +struct ParamTraits<Optional<P> > {
|
| + typedef Optional<P> param_type;
|
| + static void Write(Message* m, const param_type& p) {
|
| + m->WriteBool(p);
|
| + if (p)
|
| + WriteParam(m, p.value());
|
| + }
|
| + static bool Read(const Message* m, PickleIterator* iter, param_type* r) {
|
| + bool has_value;
|
| + if (!m->ReadBool(iter, &has_value))
|
| + return false;
|
| +
|
| + if (has_value) {
|
| + if (!ReadParam(m, iter, &r->value()))
|
| + return false;
|
| + r->setHasValue();
|
| + }
|
| + return true;
|
| + }
|
| + static void Log(const param_type& p, std::string* l) {
|
| + l->append(p ? "Optional (has value)" : "Optional (no value)");
|
| + if (p)
|
| + LogParam(p.value(), l);
|
| + }
|
| +};
|
| +
|
| +// SkStream is not default constructable, no ParamTraits<T>.
|
| +template<>
|
| +struct ParamTraits<skia::RefPtr<SkStreamAsset> > {
|
| + typedef skia::RefPtr<SkStreamAsset> param_type;
|
| + static void Write(Message* m, const param_type& p);
|
| + static bool Read(const Message* m, PickleIterator* iter, param_type* r);
|
| + static void Log(const param_type& p, std::string* l);
|
| +};
|
| +
|
| +// SkDataTable is not default constructable, no ParamTraits<T>.
|
| +template<>
|
| +struct ParamTraits<skia::RefPtr<SkDataTable> > {
|
| + typedef skia::RefPtr<SkDataTable> param_type;
|
| + static void Write(Message* m, const param_type& p);
|
| + static bool Read(const Message* m, PickleIterator* iter, param_type* r);
|
| + static void Log(const param_type& p, std::string* l);
|
| +};
|
| +
|
| +// SkRemotableFontIdentitySet not default constructable, no ParamTraits<T>.
|
| +template<>
|
| +struct ParamTraits<skia::RefPtr<SkRemotableFontIdentitySet> > {
|
| + typedef skia::RefPtr<SkRemotableFontIdentitySet> param_type;
|
| + static void Write(Message* m, const param_type& p);
|
| + static bool Read(const Message* m, PickleIterator* iter, param_type* r);
|
| + static void Log(const param_type& p, std::string* l);
|
| +};
|
| +
|
| +template<>
|
| +struct ParamTraits<SkFontStyle> {
|
| + typedef SkFontStyle param_type;
|
| + static void Write(Message* m, const param_type& p);
|
| + static bool Read(const Message* m, PickleIterator* iter, param_type* r);
|
| + static void Log(const param_type& p, std::string* l);
|
| +};
|
| +
|
| +} // namespace IPC
|
| +
|
| +#endif // CONTENT_COMMON_FONTMGR_MESSAGES_H_
|
| +
|
| +IPC_STRUCT_TRAITS_BEGIN(SkFontIdentity)
|
| + IPC_STRUCT_TRAITS_MEMBER(fDataId)
|
| + IPC_STRUCT_TRAITS_MEMBER(fTtcIndex)
|
| + IPC_STRUCT_TRAITS_MEMBER(fFontStyle)
|
| +IPC_STRUCT_TRAITS_END()
|
| +
|
| +IPC_SYNC_MESSAGE_ROUTED0_1(FontMsg_GetFamilyNames,
|
| + skia::RefPtr<SkDataTable> /*family_names*/)
|
| +
|
| +IPC_SYNC_MESSAGE_ROUTED1_1(FontMsg_GetIndex,
|
| + int /*family_index*/,
|
| + skia::RefPtr<SkRemotableFontIdentitySet> /*styles*/)
|
| +
|
| +IPC_SYNC_MESSAGE_ROUTED2_1(FontMsg_MatchIndexStyle,
|
| + int /*family_index*/,
|
| + SkFontStyle /*style*/,
|
| + SkFontIdentity /*identity*/)
|
| +
|
| +IPC_SYNC_MESSAGE_ROUTED1_1(FontMsg_MatchName,
|
| + IPC::Optional<std::string> /*family_name*/,
|
| + skia::RefPtr<SkRemotableFontIdentitySet> /*styles*/)
|
| +
|
| +IPC_SYNC_MESSAGE_ROUTED2_1(FontMsg_MatchNameStyle,
|
| + IPC::Optional<std::string> /*family_name*/,
|
| + SkFontStyle /*style*/,
|
| + SkFontIdentity /*identity*/)
|
| +
|
| +IPC_SYNC_MESSAGE_ROUTED4_1(FontMsg_MatchNameStyleCharacter,
|
| + IPC::Optional<std::string> /*family_name*/,
|
| + SkFontStyle /*style*/,
|
| + IPC::Optional<std::string> /*bpc47*/,
|
| + uint32_t /*character*/,
|
| + SkFontIdentity /*identity*/)
|
| +
|
| +IPC_SYNC_MESSAGE_ROUTED1_1(FontMsg_GetData,
|
| + int /*data_id*/,
|
| + skia::RefPtr<SkStreamAsset> /* font_data */)
|
|
|