| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/renderer_host/render_sandbox_host_linux.h" | 5 #include "chrome/browser/renderer_host/render_sandbox_host_linux.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <unistd.h> | 8 #include <unistd.h> |
| 9 #include <sys/uio.h> | 9 #include <sys/uio.h> |
| 10 #include <sys/socket.h> | 10 #include <sys/socket.h> |
| 11 #include <sys/poll.h> | 11 #include <sys/poll.h> |
| 12 #include <time.h> | 12 #include <time.h> |
| 13 | 13 |
| 14 #include <vector> | 14 #include <vector> |
| 15 | 15 |
| 16 #include "base/command_line.h" | 16 #include "base/command_line.h" |
| 17 #include "base/eintr_wrapper.h" | 17 #include "base/eintr_wrapper.h" |
| 18 #include "base/linux_util.h" | 18 #include "base/linux_util.h" |
| 19 #include "base/pickle.h" | 19 #include "base/pickle.h" |
| 20 #include "base/process_util.h" | 20 #include "base/process_util.h" |
| 21 #include "base/scoped_ptr.h" | 21 #include "base/scoped_ptr.h" |
| 22 #include "base/shared_memory.h" |
| 22 #include "base/string_util.h" | 23 #include "base/string_util.h" |
| 23 #include "base/unix_domain_socket_posix.h" | 24 #include "base/unix_domain_socket_posix.h" |
| 24 #include "chrome/common/sandbox_methods_linux.h" | 25 #include "chrome/common/sandbox_methods_linux.h" |
| 25 #include "third_party/WebKit/WebKit/chromium/public/gtk/WebFontInfo.h" | 26 #include "third_party/WebKit/WebKit/chromium/public/gtk/WebFontInfo.h" |
| 26 | 27 |
| 27 #include "SkFontHost_fontconfig_direct.h" | 28 #include "SkFontHost_fontconfig_direct.h" |
| 28 #include "SkFontHost_fontconfig_ipc.h" | 29 #include "SkFontHost_fontconfig_ipc.h" |
| 29 | 30 |
| 30 using WebKit::WebCString; | 31 using WebKit::WebCString; |
| 31 using WebKit::WebFontInfo; | 32 using WebKit::WebFontInfo; |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 } else if (kind == FontConfigIPC::METHOD_OPEN) { | 130 } else if (kind == FontConfigIPC::METHOD_OPEN) { |
| 130 HandleFontOpenRequest(fd, pickle, iter, fds); | 131 HandleFontOpenRequest(fd, pickle, iter, fds); |
| 131 } else if (kind == LinuxSandbox::METHOD_GET_FONT_FAMILY_FOR_CHARS) { | 132 } else if (kind == LinuxSandbox::METHOD_GET_FONT_FAMILY_FOR_CHARS) { |
| 132 HandleGetFontFamilyForChars(fd, pickle, iter, fds); | 133 HandleGetFontFamilyForChars(fd, pickle, iter, fds); |
| 133 } else if (kind == LinuxSandbox::METHOD_LOCALTIME) { | 134 } else if (kind == LinuxSandbox::METHOD_LOCALTIME) { |
| 134 HandleLocaltime(fd, pickle, iter, fds); | 135 HandleLocaltime(fd, pickle, iter, fds); |
| 135 } else if (kind == LinuxSandbox::METHOD_GET_CHILD_WITH_INODE) { | 136 } else if (kind == LinuxSandbox::METHOD_GET_CHILD_WITH_INODE) { |
| 136 HandleGetChildWithInode(fd, pickle, iter, fds); | 137 HandleGetChildWithInode(fd, pickle, iter, fds); |
| 137 } else if (kind == LinuxSandbox::METHOD_GET_STYLE_FOR_STRIKE) { | 138 } else if (kind == LinuxSandbox::METHOD_GET_STYLE_FOR_STRIKE) { |
| 138 HandleGetStyleForStrike(fd, pickle, iter, fds); | 139 HandleGetStyleForStrike(fd, pickle, iter, fds); |
| 140 } else if (kind == LinuxSandbox::METHOD_MAKE_SHARED_MEMORY_SEGMENT) { |
| 141 HandleMakeSharedMemorySegment(fd, pickle, iter, fds); |
| 139 } | 142 } |
| 140 | 143 |
| 141 error: | 144 error: |
| 142 for (std::vector<int>::const_iterator | 145 for (std::vector<int>::const_iterator |
| 143 i = fds.begin(); i != fds.end(); ++i) { | 146 i = fds.begin(); i != fds.end(); ++i) { |
| 144 close(*i); | 147 close(*i); |
| 145 } | 148 } |
| 146 } | 149 } |
| 147 | 150 |
| 148 void HandleFontMatchRequest(int fd, const Pickle& pickle, void* iter, | 151 void HandleFontMatchRequest(int fd, const Pickle& pickle, void* iter, |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 if (!pid) { | 325 if (!pid) { |
| 323 LOG(ERROR) << "Could not get pid"; | 326 LOG(ERROR) << "Could not get pid"; |
| 324 return; | 327 return; |
| 325 } | 328 } |
| 326 | 329 |
| 327 Pickle reply; | 330 Pickle reply; |
| 328 reply.WriteInt(pid); | 331 reply.WriteInt(pid); |
| 329 SendRendererReply(fds, reply, -1); | 332 SendRendererReply(fds, reply, -1); |
| 330 } | 333 } |
| 331 | 334 |
| 335 void HandleMakeSharedMemorySegment(int fd, const Pickle& pickle, void* iter, |
| 336 std::vector<int>& fds) { |
| 337 uint32_t shm_size; |
| 338 if (!pickle.ReadUInt32(&iter, &shm_size)) |
| 339 return; |
| 340 int shm_fd = -1; |
| 341 base::SharedMemory shm; |
| 342 if (shm.Create(L"", false, false, shm_size)) |
| 343 shm_fd = shm.handle().fd; |
| 344 Pickle reply; |
| 345 SendRendererReply(fds, reply, shm_fd); |
| 346 } |
| 347 |
| 332 void SendRendererReply(const std::vector<int>& fds, const Pickle& reply, | 348 void SendRendererReply(const std::vector<int>& fds, const Pickle& reply, |
| 333 int reply_fd) { | 349 int reply_fd) { |
| 334 struct msghdr msg; | 350 struct msghdr msg; |
| 335 memset(&msg, 0, sizeof(msg)); | 351 memset(&msg, 0, sizeof(msg)); |
| 336 struct iovec iov = {const_cast<void*>(reply.data()), reply.size()}; | 352 struct iovec iov = {const_cast<void*>(reply.data()), reply.size()}; |
| 337 msg.msg_iov = &iov; | 353 msg.msg_iov = &iov; |
| 338 msg.msg_iovlen = 1; | 354 msg.msg_iovlen = 1; |
| 339 | 355 |
| 340 char control_buffer[CMSG_SPACE(sizeof(int))]; | 356 char control_buffer[CMSG_SPACE(sizeof(int))]; |
| 341 | 357 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 398 _exit(0); | 414 _exit(0); |
| 399 } | 415 } |
| 400 } | 416 } |
| 401 | 417 |
| 402 RenderSandboxHostLinux::~RenderSandboxHostLinux() { | 418 RenderSandboxHostLinux::~RenderSandboxHostLinux() { |
| 403 if (init_) { | 419 if (init_) { |
| 404 HANDLE_EINTR(close(renderer_socket_)); | 420 HANDLE_EINTR(close(renderer_socket_)); |
| 405 HANDLE_EINTR(close(childs_lifeline_fd_)); | 421 HANDLE_EINTR(close(childs_lifeline_fd_)); |
| 406 } | 422 } |
| 407 } | 423 } |
| OLD | NEW |