Index: chrome/install_static/install_util.cc |
diff --git a/chrome/install_static/install_util.cc b/chrome/install_static/install_util.cc |
index a58b26efcb71ac7bc64a652b2730149d28371b94..db7540d0316c0983a1d0d150c723a585dae2961a 100644 |
--- a/chrome/install_static/install_util.cc |
+++ b/chrome/install_static/install_util.cc |
@@ -66,6 +66,8 @@ const char kGpuProcess[] = "gpu-process"; |
const char kPpapiPluginProcess[] = "ppapi"; |
const char kRendererProcess[] = "renderer"; |
const char kUtilityProcess[] = "utility"; |
+const char kProcessType[] = "type"; |
+const char kCrashpadHandler[] = "crashpad-handler"; |
namespace { |
@@ -900,4 +902,53 @@ bool CompareVersionStrings(const std::string& version1, |
return true; |
} |
+std::string GetSwitchValueFromCommandLine(const std::string& command_line, |
+ const std::string& switch_name) { |
+ assert(!command_line.empty()); |
+ assert(!switch_name.empty()); |
+ |
+ // We don't handle command lines with quoted strings. For e.g. something like |
+ // --ignored=" --type=renderer ", which we used for Google Desktop. |
+ if (command_line.find('"') != std::string::npos) { |
+ assert(false); |
+ return std::string(); |
+ } |
+ |
+ std::string command_line_copy = command_line; |
+ // Remove leading and trailing spaces. |
+ TrimT<std::string>(&command_line_copy); |
+ |
+ // Find the switch in the command line. If we don't find the switch, return |
+ // an empty string. |
+ std::string switch_token = "--"; |
+ switch_token += switch_name; |
+ switch_token += "="; |
+ size_t switch_offset = command_line_copy.find(switch_token); |
+ if (switch_offset == std::string::npos) |
+ return std::string(); |
+ |
+ // The format is "--<switch name>=blah". Look for a space after the |
+ // "--<switch name>=" string. If we don't find a space assume that the switch |
+ // value ends at the end of the command line. |
+ size_t switch_value_start_offset = switch_offset + switch_token.length(); |
+ if (std::string(kWhiteSpaces).find( |
+ command_line_copy[switch_value_start_offset]) != std::string::npos) { |
+ switch_value_start_offset = command_line_copy.find_first_not_of( |
+ GetWhiteSpacesForType<std::string>(), switch_value_start_offset); |
+ if (switch_value_start_offset == std::string::npos) |
+ return std::string(); |
+ } |
+ size_t switch_value_end_offset = |
+ command_line_copy.find_first_of(GetWhiteSpacesForType<std::string>(), |
+ switch_value_start_offset); |
+ if (switch_value_end_offset == std::string::npos) |
+ switch_value_end_offset = command_line_copy.length(); |
+ |
+ std::string switch_value = command_line_copy.substr( |
+ switch_value_start_offset, |
+ switch_value_end_offset - (switch_offset + switch_token.length())); |
+ TrimT<std::string>(&switch_value); |
+ return switch_value; |
+} |
+ |
} // namespace install_static |