OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this |
2 // source code is governed by a BSD-style license that can be found in the | 2 // source code is governed by a BSD-style license that can be found in the |
3 // LICENSE file. | 3 // LICENSE file. |
4 | 4 |
5 #include "chrome/renderer/renderer_sandbox_support_linux.h" | 5 #include "chrome/renderer/renderer_sandbox_support_linux.h" |
6 | 6 |
7 #include "base/global_descriptors_posix.h" | 7 #include "base/global_descriptors_posix.h" |
8 #include "base/pickle.h" | 8 #include "base/pickle.h" |
9 #include "base/unix_domain_socket_posix.h" | 9 #include "base/unix_domain_socket_posix.h" |
10 #include "chrome/common/chrome_descriptors.h" | 10 #include "chrome/common/chrome_descriptors.h" |
11 #include "chrome/common/sandbox_methods_linux.h" | 11 #include "chrome/common/sandbox_methods_linux.h" |
12 | 12 |
13 #include "third_party/WebKit/WebKit/chromium/public/linux/WebFontRenderStyle.h" | 13 #include "third_party/WebKit/WebKit/chromium/public/linux/WebFontRenderStyle.h" |
14 | 14 |
| 15 static int GetSandboxFD() { |
| 16 return kSandboxIPCChannel + base::GlobalDescriptors::kBaseDescriptor; |
| 17 } |
| 18 |
15 namespace renderer_sandbox_support { | 19 namespace renderer_sandbox_support { |
16 | 20 |
17 std::string getFontFamilyForCharacters(const uint16_t* utf16, size_t num_utf16)
{ | 21 std::string getFontFamilyForCharacters(const uint16_t* utf16, size_t num_utf16)
{ |
18 Pickle request; | 22 Pickle request; |
19 request.WriteInt(LinuxSandbox::METHOD_GET_FONT_FAMILY_FOR_CHARS); | 23 request.WriteInt(LinuxSandbox::METHOD_GET_FONT_FAMILY_FOR_CHARS); |
20 request.WriteInt(num_utf16); | 24 request.WriteInt(num_utf16); |
21 for (size_t i = 0; i < num_utf16; ++i) | 25 for (size_t i = 0; i < num_utf16; ++i) |
22 request.WriteUInt32(utf16[i]); | 26 request.WriteUInt32(utf16[i]); |
23 | 27 |
24 uint8_t buf[512]; | 28 uint8_t buf[512]; |
25 const int sandbox_fd = | 29 const ssize_t n = base::SendRecvMsg(GetSandboxFD(), buf, sizeof(buf), NULL, |
26 kSandboxIPCChannel + base::GlobalDescriptors::kBaseDescriptor; | |
27 const ssize_t n = base::SendRecvMsg(sandbox_fd, buf, sizeof(buf), NULL, | |
28 request); | 30 request); |
29 | 31 |
30 std::string family_name; | 32 std::string family_name; |
31 if (n != -1) { | 33 if (n != -1) { |
32 Pickle reply(reinterpret_cast<char*>(buf), n); | 34 Pickle reply(reinterpret_cast<char*>(buf), n); |
33 void* pickle_iter = NULL; | 35 void* pickle_iter = NULL; |
34 reply.ReadString(&pickle_iter, &family_name); | 36 reply.ReadString(&pickle_iter, &family_name); |
35 } | 37 } |
36 | 38 |
37 return family_name; | 39 return family_name; |
38 } | 40 } |
39 | 41 |
40 void getRenderStyleForStrike(const char* family, int sizeAndStyle, | 42 void getRenderStyleForStrike(const char* family, int sizeAndStyle, |
41 WebKit::WebFontRenderStyle* out) { | 43 WebKit::WebFontRenderStyle* out) { |
42 Pickle request; | 44 Pickle request; |
43 request.WriteInt(LinuxSandbox::METHOD_GET_STYLE_FOR_STRIKE); | 45 request.WriteInt(LinuxSandbox::METHOD_GET_STYLE_FOR_STRIKE); |
44 request.WriteString(family); | 46 request.WriteString(family); |
45 request.WriteInt(sizeAndStyle); | 47 request.WriteInt(sizeAndStyle); |
46 | 48 |
47 uint8_t buf[512]; | 49 uint8_t buf[512]; |
48 const int sandbox_fd = | 50 const ssize_t n = base::SendRecvMsg(GetSandboxFD(), buf, sizeof(buf), NULL, |
49 kSandboxIPCChannel + base::GlobalDescriptors::kBaseDescriptor; | |
50 const ssize_t n = base::SendRecvMsg(sandbox_fd, buf, sizeof(buf), NULL, | |
51 request); | 51 request); |
52 | 52 |
53 out->setDefaults(); | 53 out->setDefaults(); |
54 if (n == -1) { | 54 if (n == -1) { |
55 return; | 55 return; |
56 } | 56 } |
57 | 57 |
58 Pickle reply(reinterpret_cast<char*>(buf), n); | 58 Pickle reply(reinterpret_cast<char*>(buf), n); |
59 void* pickle_iter = NULL; | 59 void* pickle_iter = NULL; |
60 int useBitmaps, useAutoHint, useHinting, hintStyle, useAntiAlias, useSubpixel; | 60 int useBitmaps, useAutoHint, useHinting, hintStyle, useAntiAlias, useSubpixel; |
61 if (reply.ReadInt(&pickle_iter, &useBitmaps) && | 61 if (reply.ReadInt(&pickle_iter, &useBitmaps) && |
62 reply.ReadInt(&pickle_iter, &useAutoHint) && | 62 reply.ReadInt(&pickle_iter, &useAutoHint) && |
63 reply.ReadInt(&pickle_iter, &useHinting) && | 63 reply.ReadInt(&pickle_iter, &useHinting) && |
64 reply.ReadInt(&pickle_iter, &hintStyle) && | 64 reply.ReadInt(&pickle_iter, &hintStyle) && |
65 reply.ReadInt(&pickle_iter, &useAntiAlias) && | 65 reply.ReadInt(&pickle_iter, &useAntiAlias) && |
66 reply.ReadInt(&pickle_iter, &useSubpixel)) { | 66 reply.ReadInt(&pickle_iter, &useSubpixel)) { |
67 out->useBitmaps = useBitmaps; | 67 out->useBitmaps = useBitmaps; |
68 out->useAutoHint = useAutoHint; | 68 out->useAutoHint = useAutoHint; |
69 out->useHinting = useHinting; | 69 out->useHinting = useHinting; |
70 out->hintStyle = hintStyle; | 70 out->hintStyle = hintStyle; |
71 out->useAntiAlias = useAntiAlias; | 71 out->useAntiAlias = useAntiAlias; |
72 out->useSubpixel = useSubpixel; | 72 out->useSubpixel = useSubpixel; |
73 } | 73 } |
74 } | 74 } |
75 | 75 |
| 76 int MakeSharedMemorySegmentViaIPC(size_t length) { |
| 77 Pickle request; |
| 78 request.WriteInt(LinuxSandbox::METHOD_MAKE_SHARED_MEMORY_SEGMENT); |
| 79 request.WriteUInt32(length); |
| 80 uint8_t reply_buf[10]; |
| 81 int result_fd; |
| 82 ssize_t result = base::SendRecvMsg(GetSandboxFD(), |
| 83 reply_buf, sizeof(reply_buf), |
| 84 &result_fd, request); |
| 85 if (result == -1) |
| 86 return -1; |
| 87 return result_fd; |
| 88 } |
| 89 |
76 } // namespace render_sandbox_support | 90 } // namespace render_sandbox_support |
OLD | NEW |