Index: chrome/common/sandbox_init_wrapper_win.cc |
=================================================================== |
--- chrome/common/sandbox_init_wrapper_win.cc (revision 76120) |
+++ chrome/common/sandbox_init_wrapper_win.cc (working copy) |
@@ -10,13 +10,23 @@ |
#include "chrome/common/chrome_switches.h" |
void SandboxInitWrapper::SetServices(sandbox::SandboxInterfaceInfo* info) { |
- if (info) { |
+ if (!info) |
+ return; |
+ if (info->legacy) { |
+ // Looks like we are in the case when the new chrome.dll is being launched |
+ // by the old chrome.exe, the old chrome exe has SandboxInterfaceInfo as a |
+ // union, while now we have a struct. |
+ // TODO(cpu): Remove this nasty hack after M10 release. |
+ broker_services_ = reinterpret_cast<sandbox::BrokerServices*>(info->legacy); |
+ target_services_ = reinterpret_cast<sandbox::TargetServices*>(info->legacy); |
+ } else { |
+ // Normal case, both the exe and the dll are the same version. Both |
+ // interface pointers cannot be non-zero. A process can either be a target |
+ // or a broker but not both. |
broker_services_ = info->broker_services; |
target_services_ = info->target_services; |
+ DCHECK(!(target_services_ && broker_services_)); |
} |
- // Both interface pointers cannot be non-zero. A process can either |
- // be a target or a broker but not both. |
- DCHECK(!(target_services_ && broker_services_)); |
} |
bool SandboxInitWrapper::InitializeSandbox(const CommandLine& command_line, |