Index: chrome/app/chrome_main.cc |
=================================================================== |
--- chrome/app/chrome_main.cc (revision 97969) |
+++ chrome/app/chrome_main.cc (working copy) |
@@ -764,11 +764,37 @@ |
// The helper's Info.plist marks it as a background only app. |
if (base::mac::IsBackgroundOnlyProcess()) { |
- CHECK(command_line.HasSwitch(switches::kProcessType)) |
+ CHECK(command_line.HasSwitch(switches::kProcessType) && |
+ !process_type.empty()) |
<< "Helper application requires --type."; |
+ |
+ // In addition, some helper flavors only work with certain process types. |
+ FilePath executable; |
+ if (PathService::Get(base::FILE_EXE, &executable) && |
+ executable.value().size() >= 3) { |
+ std::string last_three = |
+ executable.value().substr(executable.value().size() - 3); |
+ |
+ if (last_three == " EH") { |
+ CHECK_EQ(switches::kPluginProcess, process_type) |
+ << "Executable-heap process requires --type=" |
+ << switches::kPluginProcess << ", saw " << process_type; |
+ } else if (last_three == " NP") { |
+ CHECK_EQ(switches::kNaClLoaderProcess, process_type) |
+ << "Non-PIE process requires --type=" |
+ << switches::kNaClLoaderProcess << ", saw " << process_type; |
+ } else { |
+ CHECK(process_type != switches::kPluginProcess && |
+ process_type != switches::kNaClLoaderProcess) |
+ << "Non-executable-heap PIE process is intolerant of --type=" |
+ << switches::kPluginProcess << " and " |
+ << switches::kNaClLoaderProcess << ", saw " << process_type; |
+ } |
+ } |
} else { |
- CHECK(!command_line.HasSwitch(switches::kProcessType)) |
- << "Main application forbids --type, saw \"" << process_type << "\"."; |
+ CHECK(!command_line.HasSwitch(switches::kProcessType) && |
+ process_type.empty()) |
+ << "Main application forbids --type, saw " << process_type; |
} |
if (IsCrashReporterEnabled()) |