| Index: chrome/install_static/install_util.cc
 | 
| diff --git a/chrome/install_static/install_util.cc b/chrome/install_static/install_util.cc
 | 
| index e382da488f92b6d7425e9adf43014d0f35df8eef..a58b26efcb71ac7bc64a652b2730149d28371b94 100644
 | 
| --- a/chrome/install_static/install_util.cc
 | 
| +++ b/chrome/install_static/install_util.cc
 | 
| @@ -57,6 +57,16 @@ const wchar_t kAppGuidGoogleChrome[] =
 | 
|  const wchar_t kAppGuidGoogleBinaries[] =
 | 
|      L"{4DC8B4CA-1BDA-483e-B5FA-D3C12E15B62D}";
 | 
|  
 | 
| +const wchar_t kHeadless[] = L"CHROME_HEADLESS";
 | 
| +const wchar_t kShowRestart[] = L"CHROME_CRASHED";
 | 
| +const wchar_t kRestartInfo[] = L"CHROME_RESTART";
 | 
| +const wchar_t kRtlLocale[] = L"RIGHT_TO_LEFT";
 | 
| +
 | 
| +const char kGpuProcess[] = "gpu-process";
 | 
| +const char kPpapiPluginProcess[] = "ppapi";
 | 
| +const char kRendererProcess[] = "renderer";
 | 
| +const char kUtilityProcess[] = "utility";
 | 
| +
 | 
|  namespace {
 | 
|  
 | 
|  // TODO(ananta)
 | 
| @@ -389,11 +399,24 @@ bool MatchPatternImpl(const base::string16& source,
 | 
|  
 | 
|  // Defines the type of whitespace characters typically found in strings.
 | 
|  constexpr char kWhiteSpaces[] = " \t\n\r\f\v";
 | 
| +constexpr base::char16 kWhiteSpaces16[] = L" \t\n\r\f\v";
 | 
| +
 | 
| +// Define specializations for white spaces based on the type of the string.
 | 
| +template<class StringType> StringType GetWhiteSpacesForType();
 | 
| +template<>
 | 
| +base::string16 GetWhiteSpacesForType() {
 | 
| +  return kWhiteSpaces16;
 | 
| +}
 | 
| +template<>
 | 
| +std::string GetWhiteSpacesForType() {
 | 
| +  return kWhiteSpaces;
 | 
| +}
 | 
|  
 | 
|  // Trim whitespaces from left & right
 | 
| -void Trim(std::string* str) {
 | 
| -  str->erase(str->find_last_not_of(kWhiteSpaces) + 1);
 | 
| -  str->erase(0, str->find_first_not_of(kWhiteSpaces));
 | 
| +template<class StringType>
 | 
| +void TrimT(StringType* str) {
 | 
| +  str->erase(str->find_last_not_of(GetWhiteSpacesForType<StringType>()) + 1);
 | 
| +  str->erase(0, str->find_first_not_of(GetWhiteSpacesForType<StringType>()));
 | 
|  }
 | 
|  
 | 
|  bool IsValidNumber(const std::string& str) {
 | 
| @@ -402,6 +425,22 @@ bool IsValidNumber(const std::string& str) {
 | 
|    return std::all_of(str.begin(), str.end(), ::isdigit);
 | 
|  }
 | 
|  
 | 
| +// Tokenizes a string based on a single character delimiter.
 | 
| +template<class StringType>
 | 
| +std::vector<StringType> TokenizeStringT(
 | 
| +    const StringType& str,
 | 
| +    typename StringType::value_type delimiter,
 | 
| +    bool trim_spaces) {
 | 
| +  std::vector<StringType> tokens;
 | 
| +  std::basic_istringstream<typename StringType::value_type> buffer(str);
 | 
| +  for (StringType token; std::getline(buffer, token, delimiter);) {
 | 
| +    if (trim_spaces)
 | 
| +      TrimT<StringType>(&token);
 | 
| +    tokens.push_back(token);
 | 
| +  }
 | 
| +  return tokens;
 | 
| +}
 | 
| +
 | 
|  }  // namespace
 | 
|  
 | 
|  bool IsSxSChrome(const wchar_t* exe_path) {
 | 
| @@ -558,25 +597,36 @@ bool GetDefaultCrashDumpLocation(base::string16* crash_dir) {
 | 
|  
 | 
|  
 | 
|  std::string GetEnvironmentString(const std::string& variable_name) {
 | 
| +  return UTF16ToUTF8(GetEnvironmentString16(UTF8ToUTF16(variable_name)));
 | 
| +}
 | 
| +
 | 
| +base::string16 GetEnvironmentString16(const base::string16& variable_name) {
 | 
|    DWORD value_length =
 | 
| -      ::GetEnvironmentVariable(UTF8ToUTF16(variable_name).c_str(), nullptr, 0);
 | 
| +      ::GetEnvironmentVariable(variable_name.c_str(), nullptr, 0);
 | 
|    if (value_length == 0)
 | 
| -    return std::string();
 | 
| +    return base::string16();
 | 
|    std::unique_ptr<wchar_t[]> value(new wchar_t[value_length]);
 | 
| -  ::GetEnvironmentVariable(UTF8ToUTF16(variable_name).c_str(), value.get(),
 | 
| -                           value_length);
 | 
| -  return UTF16ToUTF8(value.get());
 | 
| +  ::GetEnvironmentVariable(variable_name.c_str(), value.get(), value_length);
 | 
| +  return value.get();
 | 
|  }
 | 
|  
 | 
|  bool SetEnvironmentString(const std::string& variable_name,
 | 
|                            const std::string& new_value) {
 | 
| -  return !!SetEnvironmentVariable(UTF8ToUTF16(variable_name).c_str(),
 | 
| -                                  UTF8ToUTF16(new_value).c_str());
 | 
| +  return SetEnvironmentString16(UTF8ToUTF16(variable_name),
 | 
| +                                UTF8ToUTF16(new_value));
 | 
| +}
 | 
| +
 | 
| +bool SetEnvironmentString16(const base::string16& variable_name,
 | 
| +                            const base::string16& new_value) {
 | 
| +  return !!SetEnvironmentVariable(variable_name.c_str(), new_value.c_str());
 | 
|  }
 | 
|  
 | 
|  bool HasEnvironmentVariable(const std::string& variable_name) {
 | 
| -  return !!::GetEnvironmentVariable(UTF8ToUTF16(variable_name).c_str(), nullptr,
 | 
| -                                    0);
 | 
| +  return HasEnvironmentVariable16(UTF8ToUTF16(variable_name));
 | 
| +}
 | 
| +
 | 
| +bool HasEnvironmentVariable16(const base::string16& variable_name) {
 | 
| +  return !!::GetEnvironmentVariable(variable_name.c_str(), nullptr, 0);
 | 
|  }
 | 
|  
 | 
|  bool GetExecutableVersionDetails(const base::string16& exe_path,
 | 
| @@ -764,14 +814,13 @@ base::string16 UTF8ToUTF16(const std::string& source) {
 | 
|  std::vector<std::string> TokenizeString(const std::string& str,
 | 
|                                          char delimiter,
 | 
|                                          bool trim_spaces) {
 | 
| -  std::vector<std::string> tokens;
 | 
| -  std::istringstream buffer(str);
 | 
| -  for (std::string token; std::getline(buffer, token, delimiter);) {
 | 
| -    if (trim_spaces)
 | 
| -      Trim(&token);
 | 
| -    tokens.push_back(token);
 | 
| -  }
 | 
| -  return tokens;
 | 
| +  return TokenizeStringT<std::string>(str, delimiter, trim_spaces);
 | 
| +}
 | 
| +
 | 
| +std::vector<base::string16> TokenizeString16(const base::string16& str,
 | 
| +                                             base::char16 delimiter,
 | 
| +                                             bool trim_spaces) {
 | 
| +  return TokenizeStringT<base::string16>(str, delimiter, trim_spaces);
 | 
|  }
 | 
|  
 | 
|  bool CompareVersionStrings(const std::string& version1,
 | 
| 
 |