diff options
Diffstat (limited to 'chrome/app/chrome_main.cc')
-rw-r--r-- | chrome/app/chrome_main.cc | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/chrome/app/chrome_main.cc b/chrome/app/chrome_main.cc index a1d635e..9c680df 100644 --- a/chrome/app/chrome_main.cc +++ b/chrome/app/chrome_main.cc @@ -764,11 +764,37 @@ int ChromeMain(int argc, char** argv) { // 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()) |