Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Side by Side Diff: content/browser/renderer_host/sandbox_ipc_linux.cc

Issue 276763002: Remove SandboxIPCProcess's dependency on chrome-sandbox (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/browser/renderer_host/sandbox_ipc_linux.h" 5 #include "content/browser/renderer_host/sandbox_ipc_linux.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <fontconfig/fontconfig.h> 8 #include <fontconfig/fontconfig.h>
9 #include <sys/poll.h> 9 #include <sys/poll.h>
10 #include <sys/socket.h> 10 #include <sys/socket.h>
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 // default: 122 // default:
123 // Don't add any languages in that case that we don't recognise the 123 // Don't add any languages in that case that we don't recognise the
124 // constant. 124 // constant.
125 } 125 }
126 } 126 }
127 127
128 } // namespace 128 } // namespace
129 129
130 namespace content { 130 namespace content {
131 131
132 SandboxIPCProcess::SandboxIPCProcess(int lifeline_fd, 132 SandboxIPCProcess::SandboxIPCProcess(int lifeline_fd, int browser_socket)
133 int browser_socket,
134 std::string sandbox_cmd)
135 : lifeline_fd_(lifeline_fd), browser_socket_(browser_socket) { 133 : lifeline_fd_(lifeline_fd), browser_socket_(browser_socket) {
136 if (!sandbox_cmd.empty()) {
137 sandbox_cmd_.push_back(sandbox_cmd);
138 sandbox_cmd_.push_back(base::kFindInodeSwitch);
139 }
140
141 // FontConfig doesn't provide a standard property to control subpixel 134 // FontConfig doesn't provide a standard property to control subpixel
142 // positioning, so we pass the current setting through to WebKit. 135 // positioning, so we pass the current setting through to WebKit.
143 WebFontInfo::setSubpixelPositioning( 136 WebFontInfo::setSubpixelPositioning(
144 gfx::GetDefaultWebkitSubpixelPositioning()); 137 gfx::GetDefaultWebkitSubpixelPositioning());
145 138
146 CommandLine& command_line = *CommandLine::ForCurrentProcess(); 139 CommandLine& command_line = *CommandLine::ForCurrentProcess();
147 command_line.AppendSwitchASCII(switches::kProcessType, 140 command_line.AppendSwitchASCII(switches::kProcessType,
148 switches::kSandboxIPCProcess); 141 switches::kSandboxIPCProcess);
149 142
150 // Update the process title. The argv was already cached by the call to 143 // Update the process title. The argv was already cached by the call to
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 return; 206 return;
214 207
215 if (kind == FontConfigIPC::METHOD_MATCH) { 208 if (kind == FontConfigIPC::METHOD_MATCH) {
216 HandleFontMatchRequest(fd, pickle, iter, fds.get()); 209 HandleFontMatchRequest(fd, pickle, iter, fds.get());
217 } else if (kind == FontConfigIPC::METHOD_OPEN) { 210 } else if (kind == FontConfigIPC::METHOD_OPEN) {
218 HandleFontOpenRequest(fd, pickle, iter, fds.get()); 211 HandleFontOpenRequest(fd, pickle, iter, fds.get());
219 } else if (kind == LinuxSandbox::METHOD_GET_FONT_FAMILY_FOR_CHAR) { 212 } else if (kind == LinuxSandbox::METHOD_GET_FONT_FAMILY_FOR_CHAR) {
220 HandleGetFontFamilyForChar(fd, pickle, iter, fds.get()); 213 HandleGetFontFamilyForChar(fd, pickle, iter, fds.get());
221 } else if (kind == LinuxSandbox::METHOD_LOCALTIME) { 214 } else if (kind == LinuxSandbox::METHOD_LOCALTIME) {
222 HandleLocaltime(fd, pickle, iter, fds.get()); 215 HandleLocaltime(fd, pickle, iter, fds.get());
223 } else if (kind == LinuxSandbox::METHOD_GET_CHILD_WITH_INODE) {
224 HandleGetChildWithInode(fd, pickle, iter, fds.get());
225 } else if (kind == LinuxSandbox::METHOD_GET_STYLE_FOR_STRIKE) { 216 } else if (kind == LinuxSandbox::METHOD_GET_STYLE_FOR_STRIKE) {
226 HandleGetStyleForStrike(fd, pickle, iter, fds.get()); 217 HandleGetStyleForStrike(fd, pickle, iter, fds.get());
227 } else if (kind == LinuxSandbox::METHOD_MAKE_SHARED_MEMORY_SEGMENT) { 218 } else if (kind == LinuxSandbox::METHOD_MAKE_SHARED_MEMORY_SEGMENT) {
228 HandleMakeSharedMemorySegment(fd, pickle, iter, fds.get()); 219 HandleMakeSharedMemorySegment(fd, pickle, iter, fds.get());
229 } else if (kind == LinuxSandbox::METHOD_MATCH_WITH_FALLBACK) { 220 } else if (kind == LinuxSandbox::METHOD_MATCH_WITH_FALLBACK) {
230 HandleMatchWithFallback(fd, pickle, iter, fds.get()); 221 HandleMatchWithFallback(fd, pickle, iter, fds.get());
231 } 222 }
232 } 223 }
233 224
234 int SandboxIPCProcess::FindOrAddPath(const SkString& path) { 225 int SandboxIPCProcess::FindOrAddPath(const SkString& path) {
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 sizeof(struct tm)); 387 sizeof(struct tm));
397 time_zone_string = expanded_time->tm_zone; 388 time_zone_string = expanded_time->tm_zone;
398 } 389 }
399 390
400 Pickle reply; 391 Pickle reply;
401 reply.WriteString(result_string); 392 reply.WriteString(result_string);
402 reply.WriteString(time_zone_string); 393 reply.WriteString(time_zone_string);
403 SendRendererReply(fds, reply, -1); 394 SendRendererReply(fds, reply, -1);
404 } 395 }
405 396
406 void SandboxIPCProcess::HandleGetChildWithInode(
407 int fd,
408 const Pickle& pickle,
409 PickleIterator iter,
410 const std::vector<base::ScopedFD*>& fds) {
411 // The other side of this call is in zygote_main_linux.cc
412 if (sandbox_cmd_.empty()) {
413 LOG(ERROR) << "Not in the sandbox, this should not be called";
414 return;
415 }
416
417 uint64_t inode;
418 if (!pickle.ReadUInt64(&iter, &inode))
419 return;
420
421 base::ProcessId pid = 0;
422 std::string inode_output;
423
424 std::vector<std::string> sandbox_cmd = sandbox_cmd_;
425 sandbox_cmd.push_back(base::Int64ToString(inode));
426 CommandLine get_inode_cmd(sandbox_cmd);
427 if (base::GetAppOutput(get_inode_cmd, &inode_output))
428 base::StringToInt(inode_output, &pid);
429
430 if (!pid) {
431 // Even though the pid is invalid, we still need to reply to the zygote
432 // and not just return here.
433 LOG(ERROR) << "Could not get pid";
434 }
435
436 Pickle reply;
437 reply.WriteInt(pid);
438 SendRendererReply(fds, reply, -1);
439 }
440
441 void SandboxIPCProcess::HandleMakeSharedMemorySegment( 397 void SandboxIPCProcess::HandleMakeSharedMemorySegment(
442 int fd, 398 int fd,
443 const Pickle& pickle, 399 const Pickle& pickle,
444 PickleIterator iter, 400 PickleIterator iter,
445 const std::vector<base::ScopedFD*>& fds) { 401 const std::vector<base::ScopedFD*>& fds) {
446 base::SharedMemoryCreateOptions options; 402 base::SharedMemoryCreateOptions options;
447 uint32_t size; 403 uint32_t size;
448 if (!pickle.ReadUInt32(&iter, &size)) 404 if (!pickle.ReadUInt32(&iter, &size))
449 return; 405 return;
450 options.size = size; 406 options.size = size;
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 } 617 }
662 618
663 void SandboxIPCProcess::EnsureWebKitInitialized() { 619 void SandboxIPCProcess::EnsureWebKitInitialized() {
664 if (webkit_platform_support_) 620 if (webkit_platform_support_)
665 return; 621 return;
666 webkit_platform_support_.reset(new BlinkPlatformImpl); 622 webkit_platform_support_.reset(new BlinkPlatformImpl);
667 blink::initializeWithoutV8(webkit_platform_support_.get()); 623 blink::initializeWithoutV8(webkit_platform_support_.get());
668 } 624 }
669 625
670 } // namespace content 626 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698