| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 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. | |
| 4 | |
| 5 #include "content/common/sandbox_init_wrapper.h" | |
| 6 | |
| 7 #include "base/command_line.h" | |
| 8 #include "base/logging.h" | |
| 9 #include "content/public/common/content_switches.h" | |
| 10 | |
| 11 void SandboxInitWrapper::SetServices(sandbox::SandboxInterfaceInfo* info) { | |
| 12 if (!info) | |
| 13 return; | |
| 14 if (info->legacy) { | |
| 15 // Looks like we are in the case when the new chrome.dll is being launched | |
| 16 // by the old chrome.exe, the old chrome exe has SandboxInterfaceInfo as a | |
| 17 // union, while now we have a struct. | |
| 18 // TODO(cpu): Remove this nasty hack after M10 release. | |
| 19 broker_services_ = reinterpret_cast<sandbox::BrokerServices*>(info->legacy); | |
| 20 target_services_ = reinterpret_cast<sandbox::TargetServices*>(info->legacy); | |
| 21 } else { | |
| 22 // Normal case, both the exe and the dll are the same version. Both | |
| 23 // interface pointers cannot be non-zero. A process can either be a target | |
| 24 // or a broker but not both. | |
| 25 broker_services_ = info->broker_services; | |
| 26 target_services_ = info->target_services; | |
| 27 DCHECK(!(target_services_ && broker_services_)); | |
| 28 } | |
| 29 } | |
| 30 | |
| 31 bool SandboxInitWrapper::InitializeSandbox(const CommandLine& command_line, | |
| 32 const std::string& process_type) { | |
| 33 if (command_line.HasSwitch(switches::kNoSandbox)) | |
| 34 return true; | |
| 35 if ((process_type == switches::kRendererProcess) || | |
| 36 (process_type == switches::kWorkerProcess) || | |
| 37 (process_type == switches::kNaClLoaderProcess) || | |
| 38 (process_type == switches::kUtilityProcess)) { | |
| 39 // The above five process types must be sandboxed unless --no-sandbox | |
| 40 // is present in the command line. | |
| 41 if (!target_services_) | |
| 42 return false; | |
| 43 } else { | |
| 44 // Other process types might or might not be sandboxed. | |
| 45 // TODO(cpu): clean this mess. | |
| 46 if (!target_services_) | |
| 47 return true; | |
| 48 } | |
| 49 return (sandbox::SBOX_ALL_OK == target_services_->Init()); | |
| 50 } | |
| OLD | NEW |