OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // This file defines functions that integrate Chrome in Windows shell. These | 5 // This file defines functions that integrate Chrome in Windows shell. These |
6 // functions can be used by Chrome as well as Chrome installer. All of the | 6 // functions can be used by Chrome as well as Chrome installer. All of the |
7 // work is done by the local functions defined in anonymous namespace in | 7 // work is done by the local functions defined in anonymous namespace in |
8 // this class. | 8 // this class. |
9 | 9 |
10 #include "chrome/installer/util/shell_util.h" | 10 #include "chrome/installer/util/shell_util.h" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 // speaking, we should use the name of the executable (e.g., "chrome.exe"), | 102 // speaking, we should use the name of the executable (e.g., "chrome.exe"), |
103 // but that ship has sailed. The cost of switching now is re-prompting users | 103 // but that ship has sailed. The cost of switching now is re-prompting users |
104 // to make Chrome their default browser, which isn't polite. |suffix| is the | 104 // to make Chrome their default browser, which isn't polite. |suffix| is the |
105 // user-specific registration suffix; see GetUserSpecificDefaultBrowserSuffix | 105 // user-specific registration suffix; see GetUserSpecificDefaultBrowserSuffix |
106 // in shell_util.h for details. | 106 // in shell_util.h for details. |
107 static string16 GetBrowserClientKey(BrowserDistribution* dist, | 107 static string16 GetBrowserClientKey(BrowserDistribution* dist, |
108 const string16& suffix) { | 108 const string16& suffix) { |
109 DCHECK(suffix.empty() || suffix[0] == L'.'); | 109 DCHECK(suffix.empty() || suffix[0] == L'.'); |
110 return string16(ShellUtil::kRegStartMenuInternet) | 110 return string16(ShellUtil::kRegStartMenuInternet) |
111 .append(1, L'\\') | 111 .append(1, L'\\') |
112 .append(dist->GetApplicationName()) | 112 .append(dist->GetBaseAppName()) |
113 .append(suffix); | 113 .append(suffix); |
114 } | 114 } |
115 | 115 |
116 // Returns the Windows Default Programs capabilities key for Chrome. For | 116 // Returns the Windows Default Programs capabilities key for Chrome. For |
117 // example: | 117 // example: |
118 // "Software\Clients\StartMenuInternet\Chromium[.user]\Capabilities". | 118 // "Software\Clients\StartMenuInternet\Chromium[.user]\Capabilities". |
119 static string16 GetCapabilitiesKey(BrowserDistribution* dist, | 119 static string16 GetCapabilitiesKey(BrowserDistribution* dist, |
120 const string16& suffix) { | 120 const string16& suffix) { |
121 return GetBrowserClientKey(dist, suffix).append(L"\\Capabilities"); | 121 return GetBrowserClientKey(dist, suffix).append(L"\\Capabilities"); |
122 } | 122 } |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 string16 chrome_application(chrome_html_prog_id + | 206 string16 chrome_application(chrome_html_prog_id + |
207 ShellUtil::kRegApplication); | 207 ShellUtil::kRegApplication); |
208 entries->push_front(new RegistryEntry( | 208 entries->push_front(new RegistryEntry( |
209 chrome_application, ShellUtil::kRegAppUserModelId, app_id)); | 209 chrome_application, ShellUtil::kRegAppUserModelId, app_id)); |
210 entries->push_front(new RegistryEntry( | 210 entries->push_front(new RegistryEntry( |
211 chrome_application, ShellUtil::kRegApplicationIcon, icon_path)); | 211 chrome_application, ShellUtil::kRegApplicationIcon, icon_path)); |
212 // TODO(grt): http://crbug.com/75152 Write a reference to a localized | 212 // TODO(grt): http://crbug.com/75152 Write a reference to a localized |
213 // resource for name, description, and company. | 213 // resource for name, description, and company. |
214 entries->push_front(new RegistryEntry( | 214 entries->push_front(new RegistryEntry( |
215 chrome_application, ShellUtil::kRegApplicationName, | 215 chrome_application, ShellUtil::kRegApplicationName, |
216 dist->GetApplicationName().append(suffix))); | 216 dist->GetAppShortCutName().append(suffix))); |
217 entries->push_front(new RegistryEntry( | 217 entries->push_front(new RegistryEntry( |
218 chrome_application, ShellUtil::kRegApplicationDescription, | 218 chrome_application, ShellUtil::kRegApplicationDescription, |
219 dist->GetAppDescription())); | 219 dist->GetAppDescription())); |
220 entries->push_front(new RegistryEntry( | 220 entries->push_front(new RegistryEntry( |
221 chrome_application, ShellUtil::kRegApplicationCompany, | 221 chrome_application, ShellUtil::kRegApplicationCompany, |
222 dist->GetPublisherName())); | 222 dist->GetPublisherName())); |
223 } | 223 } |
224 | 224 |
225 return true; | 225 return true; |
226 } | 226 } |
(...skipping 18 matching lines...) Expand all Loading... |
245 std::list<RegistryEntry*>* entries) { | 245 std::list<RegistryEntry*>* entries) { |
246 string16 icon_path = ShellUtil::GetChromeIcon(dist, chrome_exe); | 246 string16 icon_path = ShellUtil::GetChromeIcon(dist, chrome_exe); |
247 string16 quoted_exe_path = L"\"" + chrome_exe + L"\""; | 247 string16 quoted_exe_path = L"\"" + chrome_exe + L"\""; |
248 | 248 |
249 // Register for the Start Menu "Internet" link (pre-Win7). | 249 // Register for the Start Menu "Internet" link (pre-Win7). |
250 const string16 start_menu_entry(GetBrowserClientKey(dist, suffix)); | 250 const string16 start_menu_entry(GetBrowserClientKey(dist, suffix)); |
251 // Register Chrome's display name. | 251 // Register Chrome's display name. |
252 // TODO(grt): http://crbug.com/75152 Also set LocalizedString; see | 252 // TODO(grt): http://crbug.com/75152 Also set LocalizedString; see |
253 // http://msdn.microsoft.com/en-us/library/windows/desktop/cc144109(v=VS.85)
.aspx#registering_the_display_name | 253 // http://msdn.microsoft.com/en-us/library/windows/desktop/cc144109(v=VS.85)
.aspx#registering_the_display_name |
254 entries->push_front(new RegistryEntry( | 254 entries->push_front(new RegistryEntry( |
255 start_menu_entry, dist->GetApplicationName())); | 255 start_menu_entry, dist->GetAppShortCutName())); |
256 // Register the "open" verb for launching Chrome via the "Internet" link. | 256 // Register the "open" verb for launching Chrome via the "Internet" link. |
257 entries->push_front(new RegistryEntry( | 257 entries->push_front(new RegistryEntry( |
258 start_menu_entry + ShellUtil::kRegShellOpen, quoted_exe_path)); | 258 start_menu_entry + ShellUtil::kRegShellOpen, quoted_exe_path)); |
259 // Register Chrome's icon for the Start Menu "Internet" link. | 259 // Register Chrome's icon for the Start Menu "Internet" link. |
260 entries->push_front(new RegistryEntry( | 260 entries->push_front(new RegistryEntry( |
261 start_menu_entry + ShellUtil::kRegDefaultIcon, icon_path)); | 261 start_menu_entry + ShellUtil::kRegDefaultIcon, icon_path)); |
262 | 262 |
263 // Register installation information. | 263 // Register installation information. |
264 string16 install_info(start_menu_entry + L"\\InstallInfo"); | 264 string16 install_info(start_menu_entry + L"\\InstallInfo"); |
265 // Note: not using CommandLine since it has ambiguous rules for quoting | 265 // Note: not using CommandLine since it has ambiguous rules for quoting |
266 // strings. | 266 // strings. |
267 entries->push_front(new RegistryEntry(install_info, kReinstallCommand, | 267 entries->push_front(new RegistryEntry(install_info, kReinstallCommand, |
268 quoted_exe_path + L" --" + ASCIIToWide(switches::kMakeDefaultBrowser))); | 268 quoted_exe_path + L" --" + ASCIIToWide(switches::kMakeDefaultBrowser))); |
269 entries->push_front(new RegistryEntry(install_info, L"HideIconsCommand", | 269 entries->push_front(new RegistryEntry(install_info, L"HideIconsCommand", |
270 quoted_exe_path + L" --" + ASCIIToWide(switches::kHideIcons))); | 270 quoted_exe_path + L" --" + ASCIIToWide(switches::kHideIcons))); |
271 entries->push_front(new RegistryEntry(install_info, L"ShowIconsCommand", | 271 entries->push_front(new RegistryEntry(install_info, L"ShowIconsCommand", |
272 quoted_exe_path + L" --" + ASCIIToWide(switches::kShowIcons))); | 272 quoted_exe_path + L" --" + ASCIIToWide(switches::kShowIcons))); |
273 entries->push_front(new RegistryEntry(install_info, L"IconsVisible", 1)); | 273 entries->push_front(new RegistryEntry(install_info, L"IconsVisible", 1)); |
274 | 274 |
275 // Register with Default Programs. | 275 // Register with Default Programs. |
276 string16 reg_app_name(dist->GetApplicationName().append(suffix)); | 276 string16 reg_app_name(dist->GetBaseAppName().append(suffix)); |
277 // Tell Windows where to find Chrome's Default Programs info. | 277 // Tell Windows where to find Chrome's Default Programs info. |
278 string16 capabilities(GetCapabilitiesKey(dist, suffix)); | 278 string16 capabilities(GetCapabilitiesKey(dist, suffix)); |
279 entries->push_front(new RegistryEntry(ShellUtil::kRegRegisteredApplications, | 279 entries->push_front(new RegistryEntry(ShellUtil::kRegRegisteredApplications, |
280 reg_app_name, capabilities)); | 280 reg_app_name, capabilities)); |
281 // Write out Chrome's Default Programs info. | 281 // Write out Chrome's Default Programs info. |
282 // TODO(grt): http://crbug.com/75152 Write a reference to a localized | 282 // TODO(grt): http://crbug.com/75152 Write a reference to a localized |
283 // resource rather than this. | 283 // resource rather than this. |
284 entries->push_front(new RegistryEntry( | 284 entries->push_front(new RegistryEntry( |
285 capabilities, ShellUtil::kRegApplicationDescription, | 285 capabilities, ShellUtil::kRegApplicationDescription, |
286 dist->GetLongAppDescription())); | 286 dist->GetLongAppDescription())); |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
375 // Protocols associations. | 375 // Protocols associations. |
376 string16 chrome_open = ShellUtil::GetChromeShellOpenCmd(chrome_exe); | 376 string16 chrome_open = ShellUtil::GetChromeShellOpenCmd(chrome_exe); |
377 string16 chrome_icon = ShellUtil::GetChromeIcon(dist, chrome_exe); | 377 string16 chrome_icon = ShellUtil::GetChromeIcon(dist, chrome_exe); |
378 for (int i = 0; ShellUtil::kBrowserProtocolAssociations[i] != NULL; i++) { | 378 for (int i = 0; ShellUtil::kBrowserProtocolAssociations[i] != NULL; i++) { |
379 GetUserProtocolEntries(ShellUtil::kBrowserProtocolAssociations[i], | 379 GetUserProtocolEntries(ShellUtil::kBrowserProtocolAssociations[i], |
380 chrome_icon, chrome_open, entries); | 380 chrome_icon, chrome_open, entries); |
381 } | 381 } |
382 | 382 |
383 // start->Internet shortcut. | 383 // start->Internet shortcut. |
384 string16 start_menu(ShellUtil::kRegStartMenuInternet); | 384 string16 start_menu(ShellUtil::kRegStartMenuInternet); |
385 string16 app_name = dist->GetApplicationName() + suffix; | 385 string16 app_name = dist->GetBaseAppName() + suffix; |
386 entries->push_front(new RegistryEntry(start_menu, app_name)); | 386 entries->push_front(new RegistryEntry(start_menu, app_name)); |
387 return true; | 387 return true; |
388 } | 388 } |
389 | 389 |
390 // Generate work_item tasks required to create current registry entry and | 390 // Generate work_item tasks required to create current registry entry and |
391 // add them to the given work item list. | 391 // add them to the given work item list. |
392 void AddToWorkItemList(HKEY root, WorkItemList *items) const { | 392 void AddToWorkItemList(HKEY root, WorkItemList *items) const { |
393 items->AddCreateRegKeyWorkItem(root, _key_path); | 393 items->AddCreateRegKeyWorkItem(root, _key_path); |
394 if (_is_string) { | 394 if (_is_string) { |
395 items->AddSetRegValueWorkItem(root, _key_path, _name, _value, true); | 395 items->AddSetRegValueWorkItem(root, _key_path, _name, _value, true); |
(...skipping 623 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1019 for (int i = 0; i < arraysize(roots); ++i) { | 1019 for (int i = 0; i < arraysize(roots); ++i) { |
1020 const HKEY root = roots[i]; | 1020 const HKEY root = roots[i]; |
1021 for (base::win::RegistryKeyIterator iter(root, base_key.c_str()); | 1021 for (base::win::RegistryKeyIterator iter(root, base_key.c_str()); |
1022 iter.Valid(); ++iter) { | 1022 iter.Valid(); ++iter) { |
1023 client_path.assign(base_key).append(1, L'\\').append(iter.Name()); | 1023 client_path.assign(base_key).append(1, L'\\').append(iter.Name()); |
1024 // Read the browser's name (localized according to install language). | 1024 // Read the browser's name (localized according to install language). |
1025 if (key.Open(root, client_path.c_str(), | 1025 if (key.Open(root, client_path.c_str(), |
1026 KEY_QUERY_VALUE) != ERROR_SUCCESS || | 1026 KEY_QUERY_VALUE) != ERROR_SUCCESS || |
1027 key.ReadValue(NULL, &name) != ERROR_SUCCESS || | 1027 key.ReadValue(NULL, &name) != ERROR_SUCCESS || |
1028 name.empty() || | 1028 name.empty() || |
1029 name.find(dist->GetApplicationName()) != string16::npos) { | 1029 name.find(dist->GetBaseAppName()) != string16::npos) { |
1030 continue; | 1030 continue; |
1031 } | 1031 } |
1032 // Read the browser's reinstall command. | 1032 // Read the browser's reinstall command. |
1033 if (key.Open(root, (client_path + L"\\InstallInfo").c_str(), | 1033 if (key.Open(root, (client_path + L"\\InstallInfo").c_str(), |
1034 KEY_QUERY_VALUE) == ERROR_SUCCESS && | 1034 KEY_QUERY_VALUE) == ERROR_SUCCESS && |
1035 key.ReadValue(kReinstallCommand, &command) == ERROR_SUCCESS && | 1035 key.ReadValue(kReinstallCommand, &command) == ERROR_SUCCESS && |
1036 !command.empty()) { | 1036 !command.empty()) { |
1037 (*browsers)[name] = command; | 1037 (*browsers)[name] = command; |
1038 } | 1038 } |
1039 } | 1039 } |
1040 } | 1040 } |
1041 } | 1041 } |
1042 | 1042 |
1043 string16 ShellUtil::GetCurrentInstallationSuffix(BrowserDistribution* dist, | 1043 string16 ShellUtil::GetCurrentInstallationSuffix(BrowserDistribution* dist, |
1044 const string16& chrome_exe) { | 1044 const string16& chrome_exe) { |
1045 string16 tested_suffix; | 1045 string16 tested_suffix; |
1046 if (!InstallUtil::IsPerUserInstall(chrome_exe.c_str()) || | 1046 if (!InstallUtil::IsPerUserInstall(chrome_exe.c_str()) || |
1047 !GetUserSpecificRegistrySuffix(&tested_suffix) || | 1047 !GetUserSpecificRegistrySuffix(&tested_suffix) || |
1048 !QuickIsChromeRegistered(dist, chrome_exe, tested_suffix, | 1048 !QuickIsChromeRegistered(dist, chrome_exe, tested_suffix, |
1049 CONFIRM_PROGID_REGISTRATION)) { | 1049 CONFIRM_PROGID_REGISTRATION)) { |
1050 return string16(); | 1050 return string16(); |
1051 } | 1051 } |
1052 return tested_suffix; | 1052 return tested_suffix; |
1053 } | 1053 } |
1054 | 1054 |
| 1055 string16 ShellUtil::GetApplicationName(BrowserDistribution* dist, |
| 1056 const string16& chrome_exe) { |
| 1057 string16 app_name = dist->GetBaseAppName(); |
| 1058 app_name += GetCurrentInstallationSuffix(dist, chrome_exe); |
| 1059 return app_name; |
| 1060 } |
| 1061 |
1055 bool ShellUtil::MakeChromeDefault(BrowserDistribution* dist, | 1062 bool ShellUtil::MakeChromeDefault(BrowserDistribution* dist, |
1056 int shell_change, | 1063 int shell_change, |
1057 const string16& chrome_exe, | 1064 const string16& chrome_exe, |
1058 bool elevate_if_not_admin) { | 1065 bool elevate_if_not_admin) { |
1059 if (!dist->CanSetAsDefault()) | 1066 if (!dist->CanSetAsDefault()) |
1060 return false; | 1067 return false; |
1061 | 1068 |
1062 // Windows 8 does not permit making a browser default just like that. | 1069 // Windows 8 does not permit making a browser default just like that. |
1063 // This process needs to be routed through the system's UI. Use | 1070 // This process needs to be routed through the system's UI. Use |
1064 // ShowMakeChromeDefaultSystemUI instead (below). | 1071 // ShowMakeChromeDefaultSystemUI instead (below). |
1065 if (base::win::GetVersion() >= base::win::VERSION_WIN8) { | 1072 if (base::win::GetVersion() >= base::win::VERSION_WIN8) { |
1066 NOTREACHED(); | 1073 NOTREACHED(); |
1067 return false; | 1074 return false; |
1068 } | 1075 } |
1069 | 1076 |
1070 if (!ShellUtil::RegisterChromeBrowser( | 1077 if (!ShellUtil::RegisterChromeBrowser( |
1071 dist, chrome_exe, string16(), elevate_if_not_admin)) { | 1078 dist, chrome_exe, string16(), elevate_if_not_admin)) { |
1072 return false; | 1079 return false; |
1073 } | 1080 } |
1074 | 1081 |
1075 bool ret = true; | 1082 bool ret = true; |
1076 // First use the new "recommended" way on Vista to make Chrome default | 1083 // First use the new "recommended" way on Vista to make Chrome default |
1077 // browser. | 1084 // browser. |
1078 string16 app_name = dist->GetApplicationName(); | 1085 string16 app_name = GetApplicationName(dist, chrome_exe); |
1079 const string16 app_suffix( | |
1080 ShellUtil::GetCurrentInstallationSuffix(dist, chrome_exe)); | |
1081 app_name += app_suffix; | |
1082 | 1086 |
1083 if (base::win::GetVersion() >= base::win::VERSION_VISTA) { | 1087 if (base::win::GetVersion() >= base::win::VERSION_VISTA) { |
1084 // On Windows Vista and Win7 we still can set ourselves via the | 1088 // On Windows Vista and Win7 we still can set ourselves via the |
1085 // the IApplicationAssociationRegistration interface. | 1089 // the IApplicationAssociationRegistration interface. |
1086 VLOG(1) << "Registering Chrome as default browser on Vista."; | 1090 VLOG(1) << "Registering Chrome as default browser on Vista."; |
1087 base::win::ScopedComPtr<IApplicationAssociationRegistration> pAAR; | 1091 base::win::ScopedComPtr<IApplicationAssociationRegistration> pAAR; |
1088 HRESULT hr = pAAR.CreateInstance(CLSID_ApplicationAssociationRegistration, | 1092 HRESULT hr = pAAR.CreateInstance(CLSID_ApplicationAssociationRegistration, |
1089 NULL, CLSCTX_INPROC); | 1093 NULL, CLSCTX_INPROC); |
1090 if (SUCCEEDED(hr)) { | 1094 if (SUCCEEDED(hr)) { |
1091 for (int i = 0; ShellUtil::kBrowserProtocolAssociations[i] != NULL; i++) { | 1095 for (int i = 0; ShellUtil::kBrowserProtocolAssociations[i] != NULL; i++) { |
(...skipping 19 matching lines...) Expand all Loading... |
1111 } | 1115 } |
1112 } | 1116 } |
1113 | 1117 |
1114 // Now use the old way to associate Chrome with supported protocols and file | 1118 // Now use the old way to associate Chrome with supported protocols and file |
1115 // associations. This should not be required on Vista but since some | 1119 // associations. This should not be required on Vista but since some |
1116 // applications still read Software\Classes\http key directly, we have to do | 1120 // applications still read Software\Classes\http key directly, we have to do |
1117 // this on Vista also. | 1121 // this on Vista also. |
1118 | 1122 |
1119 std::list<RegistryEntry*> entries; | 1123 std::list<RegistryEntry*> entries; |
1120 STLElementDeleter<std::list<RegistryEntry*> > entries_deleter(&entries); | 1124 STLElementDeleter<std::list<RegistryEntry*> > entries_deleter(&entries); |
1121 RegistryEntry::GetUserEntries(dist, chrome_exe, app_suffix, &entries); | 1125 RegistryEntry::GetUserEntries( |
| 1126 dist, chrome_exe, GetCurrentInstallationSuffix(dist, chrome_exe), |
| 1127 &entries); |
1122 // Change the default browser for current user. | 1128 // Change the default browser for current user. |
1123 if ((shell_change & ShellUtil::CURRENT_USER) && | 1129 if ((shell_change & ShellUtil::CURRENT_USER) && |
1124 !AddRegistryEntries(HKEY_CURRENT_USER, entries)) { | 1130 !AddRegistryEntries(HKEY_CURRENT_USER, entries)) { |
1125 ret = false; | 1131 ret = false; |
1126 LOG(ERROR) << "Could not make Chrome default browser (XP/current user)."; | 1132 LOG(ERROR) << "Could not make Chrome default browser (XP/current user)."; |
1127 } | 1133 } |
1128 | 1134 |
1129 // Chrome as default browser at system level. | 1135 // Chrome as default browser at system level. |
1130 if ((shell_change & ShellUtil::SYSTEM_LEVEL) && | 1136 if ((shell_change & ShellUtil::SYSTEM_LEVEL) && |
1131 !AddRegistryEntries(HKEY_LOCAL_MACHINE, entries)) { | 1137 !AddRegistryEntries(HKEY_LOCAL_MACHINE, entries)) { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1168 bool ret = true; | 1174 bool ret = true; |
1169 // First use the new "recommended" way on Vista to make Chrome default | 1175 // First use the new "recommended" way on Vista to make Chrome default |
1170 // protocol handler. | 1176 // protocol handler. |
1171 if (base::win::GetVersion() >= base::win::VERSION_VISTA) { | 1177 if (base::win::GetVersion() >= base::win::VERSION_VISTA) { |
1172 VLOG(1) << "Registering Chrome as default handler for " << protocol | 1178 VLOG(1) << "Registering Chrome as default handler for " << protocol |
1173 << " on Vista."; | 1179 << " on Vista."; |
1174 base::win::ScopedComPtr<IApplicationAssociationRegistration> pAAR; | 1180 base::win::ScopedComPtr<IApplicationAssociationRegistration> pAAR; |
1175 HRESULT hr = pAAR.CreateInstance(CLSID_ApplicationAssociationRegistration, | 1181 HRESULT hr = pAAR.CreateInstance(CLSID_ApplicationAssociationRegistration, |
1176 NULL, CLSCTX_INPROC); | 1182 NULL, CLSCTX_INPROC); |
1177 if (SUCCEEDED(hr)) { | 1183 if (SUCCEEDED(hr)) { |
1178 string16 app_name = dist->GetApplicationName(); | 1184 string16 app_name = GetApplicationName(dist, chrome_exe); |
1179 app_name += ShellUtil::GetCurrentInstallationSuffix(dist, chrome_exe); | |
1180 | |
1181 hr = pAAR->SetAppAsDefault(app_name.c_str(), protocol.c_str(), | 1185 hr = pAAR->SetAppAsDefault(app_name.c_str(), protocol.c_str(), |
1182 AT_URLPROTOCOL); | 1186 AT_URLPROTOCOL); |
1183 } | 1187 } |
1184 if (!SUCCEEDED(hr)) { | 1188 if (!SUCCEEDED(hr)) { |
1185 ret = false; | 1189 ret = false; |
1186 LOG(ERROR) << "Could not make Chrome default protocol client (Vista):" | 1190 LOG(ERROR) << "Could not make Chrome default protocol client (Vista):" |
1187 << " HRESULT=" << hr << "."; | 1191 << " HRESULT=" << hr << "."; |
1188 } | 1192 } |
1189 } | 1193 } |
1190 | 1194 |
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1416 chrome_exe.c_str(), | 1420 chrome_exe.c_str(), |
1417 shortcut.c_str(), | 1421 shortcut.c_str(), |
1418 chrome_path.c_str(), | 1422 chrome_path.c_str(), |
1419 arguments.c_str(), | 1423 arguments.c_str(), |
1420 description.c_str(), | 1424 description.c_str(), |
1421 icon_path.c_str(), | 1425 icon_path.c_str(), |
1422 icon_index, | 1426 icon_index, |
1423 dist->GetBrowserAppId().c_str(), | 1427 dist->GetBrowserAppId().c_str(), |
1424 ConvertShellUtilShortcutOptionsToFileUtil(options)); | 1428 ConvertShellUtilShortcutOptionsToFileUtil(options)); |
1425 } | 1429 } |
OLD | NEW |