1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/common/font_config_ipc_linux.h"
10 #include <sys/socket.h>
13 #include "base/pickle.h"
14 #include "content/common/unix_domain_socket_posix.h"
16 FontConfigIPC::FontConfigIPC(int fd
)
20 FontConfigIPC::~FontConfigIPC() {
24 bool FontConfigIPC::Match(std::string
* result_family
,
25 unsigned* result_filefaceid
,
26 bool filefaceid_valid
, unsigned filefaceid
,
27 const std::string
& family
,
28 const void* characters
, size_t characters_bytes
,
29 bool* is_bold
, bool* is_italic
) {
30 if (family
.length() > kMaxFontFamilyLength
)
34 request
.WriteInt(METHOD_MATCH
);
35 request
.WriteBool(filefaceid_valid
);
37 request
.WriteUInt32(filefaceid
);
39 request
.WriteBool(is_bold
&& *is_bold
);
40 request
.WriteBool(is_bold
&& *is_italic
);
42 request
.WriteUInt32(characters_bytes
);
44 request
.WriteBytes(characters
, characters_bytes
);
46 request
.WriteString(family
);
48 uint8_t reply_buf
[512];
49 const ssize_t r
= UnixDomainSocket::SendRecvMsg(fd_
, reply_buf
,
50 sizeof(reply_buf
), NULL
,
55 Pickle
reply(reinterpret_cast<char*>(reply_buf
), r
);
58 if (!reply
.ReadBool(&iter
, &result
))
63 uint32_t reply_filefaceid
;
64 std::string reply_family
;
65 bool resulting_bold
, resulting_italic
;
66 if (!reply
.ReadUInt32(&iter
, &reply_filefaceid
) ||
67 !reply
.ReadString(&iter
, &reply_family
) ||
68 !reply
.ReadBool(&iter
, &resulting_bold
) ||
69 !reply
.ReadBool(&iter
, &resulting_italic
)) {
73 *result_filefaceid
= reply_filefaceid
;
75 *result_family
= reply_family
;
78 *is_bold
= resulting_bold
;
80 *is_italic
= resulting_italic
;
85 int FontConfigIPC::Open(unsigned filefaceid
) {
87 request
.WriteInt(METHOD_OPEN
);
88 request
.WriteUInt32(filefaceid
);
91 uint8_t reply_buf
[256];
92 const ssize_t r
= UnixDomainSocket::SendRecvMsg(fd_
, reply_buf
,
99 Pickle
reply(reinterpret_cast<char*>(reply_buf
), r
);
102 if (!reply
.ReadBool(&iter
, &result
) ||