| Index: content/browser/renderer_host/sandbox_ipc_linux.cc
|
| diff --git a/content/browser/renderer_host/sandbox_ipc_linux.cc b/content/browser/renderer_host/sandbox_ipc_linux.cc
|
| index f988ae942dc0b16cfdff1a6ad85a22f33750ce7f..4f3b7c7c4dfa4d5f56b0da8fba3d5220d5605107 100644
|
| --- a/content/browser/renderer_host/sandbox_ipc_linux.cc
|
| +++ b/content/browser/renderer_host/sandbox_ipc_linux.cc
|
| @@ -129,10 +129,9 @@ static void MSCharSetToFontconfig(FcLangSet* langset, unsigned fdwCharSet) {
|
|
|
| namespace content {
|
|
|
| -SandboxIPCProcess::SandboxIPCProcess(int lifeline_fd,
|
| - int browser_socket,
|
| +SandboxIPCHandler::SandboxIPCHandler(int browser_socket,
|
| std::string sandbox_cmd)
|
| - : lifeline_fd_(lifeline_fd), browser_socket_(browser_socket) {
|
| + : browser_socket_(browser_socket) {
|
| if (!sandbox_cmd.empty()) {
|
| sandbox_cmd_.push_back(sandbox_cmd);
|
| sandbox_cmd_.push_back(base::kFindInodeSwitch);
|
| @@ -142,33 +141,23 @@ SandboxIPCProcess::SandboxIPCProcess(int lifeline_fd,
|
| // positioning, so we pass the current setting through to WebKit.
|
| WebFontInfo::setSubpixelPositioning(
|
| gfx::GetDefaultWebkitSubpixelPositioning());
|
| -
|
| - CommandLine& command_line = *CommandLine::ForCurrentProcess();
|
| - command_line.AppendSwitchASCII(switches::kProcessType,
|
| - switches::kSandboxIPCProcess);
|
| -
|
| - // Update the process title. The argv was already cached by the call to
|
| - // SetProcessTitleFromCommandLine in content_main_runner.cc, so we can pass
|
| - // NULL here (we don't have the original argv at this point).
|
| - SetProcessTitleFromCommandLine(NULL);
|
| }
|
|
|
| -void SandboxIPCProcess::Run() {
|
| - struct pollfd pfds[2];
|
| - pfds[0].fd = lifeline_fd_;
|
| +void SandboxIPCHandler::Run() {
|
| + struct pollfd pfds[1];
|
| + pfds[0].fd = browser_socket_;
|
| pfds[0].events = POLLIN;
|
| - pfds[1].fd = browser_socket_;
|
| - pfds[1].events = POLLIN;
|
|
|
| int failed_polls = 0;
|
| for (;;) {
|
| - const int r = HANDLE_EINTR(poll(pfds, 2, -1 /* no timeout */));
|
| + const int r =
|
| + HANDLE_EINTR(poll(pfds, arraysize(pfds), -1 /* no timeout */));
|
| // '0' is not a possible return value with no timeout.
|
| DCHECK_NE(0, r);
|
| if (r < 0) {
|
| PLOG(WARNING) << "poll";
|
| if (failed_polls++ == 3) {
|
| - LOG(FATAL) << "poll(2) failing. RenderSandboxHostLinux aborting.";
|
| + LOG(FATAL) << "poll(2) failing. SandboxIPCHandler aborting.";
|
| return;
|
| }
|
| continue;
|
| @@ -176,18 +165,20 @@ void SandboxIPCProcess::Run() {
|
|
|
| failed_polls = 0;
|
|
|
| - if (pfds[0].revents) {
|
| - // our parent died so we should too.
|
| - _exit(0);
|
| + // If poll(2) reports an error condition in the fd,
|
| + // we assume the zygote is gone and we return.
|
| + if (pfds[0].revents & (POLLERR | POLLHUP)) {
|
| + VLOG(1) << "SandboxIPCHandler stopping.";
|
| + return;
|
| }
|
|
|
| - if (pfds[1].revents) {
|
| + if (pfds[0].revents & POLLIN) {
|
| HandleRequestFromRenderer(browser_socket_);
|
| }
|
| }
|
| }
|
|
|
| -void SandboxIPCProcess::HandleRequestFromRenderer(int fd) {
|
| +void SandboxIPCHandler::HandleRequestFromRenderer(int fd) {
|
| ScopedVector<base::ScopedFD> fds;
|
|
|
| // A FontConfigIPC::METHOD_MATCH message could be kMaxFontFamilyLength
|
| @@ -231,7 +222,7 @@ void SandboxIPCProcess::HandleRequestFromRenderer(int fd) {
|
| }
|
| }
|
|
|
| -int SandboxIPCProcess::FindOrAddPath(const SkString& path) {
|
| +int SandboxIPCHandler::FindOrAddPath(const SkString& path) {
|
| int count = paths_.count();
|
| for (int i = 0; i < count; ++i) {
|
| if (path == *paths_[i])
|
| @@ -241,7 +232,7 @@ int SandboxIPCProcess::FindOrAddPath(const SkString& path) {
|
| return count;
|
| }
|
|
|
| -void SandboxIPCProcess::HandleFontMatchRequest(
|
| +void SandboxIPCHandler::HandleFontMatchRequest(
|
| int fd,
|
| const Pickle& pickle,
|
| PickleIterator iter,
|
| @@ -281,7 +272,7 @@ void SandboxIPCProcess::HandleFontMatchRequest(
|
| SendRendererReply(fds, reply, -1);
|
| }
|
|
|
| -void SandboxIPCProcess::HandleFontOpenRequest(
|
| +void SandboxIPCHandler::HandleFontOpenRequest(
|
| int fd,
|
| const Pickle& pickle,
|
| PickleIterator iter,
|
| @@ -310,13 +301,13 @@ void SandboxIPCProcess::HandleFontOpenRequest(
|
| }
|
| }
|
|
|
| -void SandboxIPCProcess::HandleGetFontFamilyForChar(
|
| +void SandboxIPCHandler::HandleGetFontFamilyForChar(
|
| int fd,
|
| const Pickle& pickle,
|
| PickleIterator iter,
|
| const std::vector<base::ScopedFD*>& fds) {
|
| // The other side of this call is
|
| - // chrome/renderer/renderer_sandbox_support_linux.cc
|
| + // content/common/child_process_sandbox_support_impl_linux.cc
|
|
|
| EnsureWebKitInitialized();
|
| WebUChar32 c;
|
| @@ -341,7 +332,7 @@ void SandboxIPCProcess::HandleGetFontFamilyForChar(
|
| SendRendererReply(fds, reply, -1);
|
| }
|
|
|
| -void SandboxIPCProcess::HandleGetStyleForStrike(
|
| +void SandboxIPCHandler::HandleGetStyleForStrike(
|
| int fd,
|
| const Pickle& pickle,
|
| PickleIterator iter,
|
| @@ -370,7 +361,7 @@ void SandboxIPCProcess::HandleGetStyleForStrike(
|
| SendRendererReply(fds, reply, -1);
|
| }
|
|
|
| -void SandboxIPCProcess::HandleLocaltime(
|
| +void SandboxIPCHandler::HandleLocaltime(
|
| int fd,
|
| const Pickle& pickle,
|
| PickleIterator iter,
|
| @@ -403,7 +394,7 @@ void SandboxIPCProcess::HandleLocaltime(
|
| SendRendererReply(fds, reply, -1);
|
| }
|
|
|
| -void SandboxIPCProcess::HandleGetChildWithInode(
|
| +void SandboxIPCHandler::HandleGetChildWithInode(
|
| int fd,
|
| const Pickle& pickle,
|
| PickleIterator iter,
|
| @@ -438,7 +429,7 @@ void SandboxIPCProcess::HandleGetChildWithInode(
|
| SendRendererReply(fds, reply, -1);
|
| }
|
|
|
| -void SandboxIPCProcess::HandleMakeSharedMemorySegment(
|
| +void SandboxIPCHandler::HandleMakeSharedMemorySegment(
|
| int fd,
|
| const Pickle& pickle,
|
| PickleIterator iter,
|
| @@ -458,7 +449,7 @@ void SandboxIPCProcess::HandleMakeSharedMemorySegment(
|
| SendRendererReply(fds, reply, shm_fd);
|
| }
|
|
|
| -void SandboxIPCProcess::HandleMatchWithFallback(
|
| +void SandboxIPCHandler::HandleMatchWithFallback(
|
| int fd,
|
| const Pickle& pickle,
|
| PickleIterator iter,
|
| @@ -618,7 +609,7 @@ void SandboxIPCProcess::HandleMatchWithFallback(
|
| }
|
| }
|
|
|
| -void SandboxIPCProcess::SendRendererReply(
|
| +void SandboxIPCHandler::SendRendererReply(
|
| const std::vector<base::ScopedFD*>& fds,
|
| const Pickle& reply,
|
| int reply_fd) {
|
| @@ -654,13 +645,13 @@ void SandboxIPCProcess::SendRendererReply(
|
| PLOG(ERROR) << "sendmsg";
|
| }
|
|
|
| -SandboxIPCProcess::~SandboxIPCProcess() {
|
| +SandboxIPCHandler::~SandboxIPCHandler() {
|
| paths_.deleteAll();
|
| if (webkit_platform_support_)
|
| blink::shutdownWithoutV8();
|
| }
|
|
|
| -void SandboxIPCProcess::EnsureWebKitInitialized() {
|
| +void SandboxIPCHandler::EnsureWebKitInitialized() {
|
| if (webkit_platform_support_)
|
| return;
|
| webkit_platform_support_.reset(new BlinkPlatformImpl);
|
|
|