Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(439)

Side by Side Diff: chrome/installer/util/shell_util.cc

Issue 1573243010: Follow up to https://codereview.chromium.org/1581473002 for Metro removal in installer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@metro-mode-2
Patch Set: dual_mode Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/installer/util/shell_util.h ('k') | chrome/installer/util/shell_util_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
293 entries->push_back(new RegistryEntry( 293 entries->push_back(new RegistryEntry(
294 prog_id_path + ShellUtil::kRegDefaultIcon, 294 prog_id_path + ShellUtil::kRegDefaultIcon,
295 ShellUtil::FormatIconLocation(app_info.file_type_icon_path, 295 ShellUtil::FormatIconLocation(app_info.file_type_icon_path,
296 app_info.file_type_icon_index))); 296 app_info.file_type_icon_index)));
297 entries->push_back(new RegistryEntry(prog_id_path + ShellUtil::kRegShellOpen, 297 entries->push_back(new RegistryEntry(prog_id_path + ShellUtil::kRegShellOpen,
298 app_info.command_line)); 298 app_info.command_line));
299 if (!app_info.delegate_clsid.empty()) { 299 if (!app_info.delegate_clsid.empty()) {
300 entries->push_back(new RegistryEntry( 300 entries->push_back(new RegistryEntry(
301 prog_id_path + ShellUtil::kRegShellOpen, ShellUtil::kRegDelegateExecute, 301 prog_id_path + ShellUtil::kRegShellOpen, ShellUtil::kRegDelegateExecute,
302 app_info.delegate_clsid)); 302 app_info.delegate_clsid));
303 // TODO(scottmg): Simplify after Metro removal. https://crbug.com/558054.
303 entries->back()->set_removal_flag(RegistryEntry::RemovalFlag::VALUE); 304 entries->back()->set_removal_flag(RegistryEntry::RemovalFlag::VALUE);
304 } 305 }
305 306
306 // The following entries are required as of Windows 8, but do not 307 // The following entries are required as of Windows 8, but do not
307 // depend on the DelegateExecute verb handler being set. 308 // depend on the DelegateExecute verb handler being set.
308 if (base::win::GetVersion() >= base::win::VERSION_WIN8) { 309 if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
309 if (!app_info.app_id.empty()) { 310 if (!app_info.app_id.empty()) {
310 entries->push_back(new RegistryEntry( 311 entries->push_back(new RegistryEntry(
311 prog_id_path, ShellUtil::kRegAppUserModelId, app_info.app_id)); 312 prog_id_path, ShellUtil::kRegAppUserModelId, app_info.app_id));
312 } 313 }
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 374
374 app_info.delegate_clsid = dist->GetCommandExecuteImplClsid(); 375 app_info.delegate_clsid = dist->GetCommandExecuteImplClsid();
375 376
376 GetProgIdEntries(app_info, entries); 377 GetProgIdEntries(app_info, entries);
377 378
378 if (!app_info.delegate_clsid.empty()) { 379 if (!app_info.delegate_clsid.empty()) {
379 ScopedVector<RegistryEntry> delegate_execute_entries = 380 ScopedVector<RegistryEntry> delegate_execute_entries =
380 GetChromeDelegateExecuteEntries(chrome_exe, app_info); 381 GetChromeDelegateExecuteEntries(chrome_exe, app_info);
381 // Remove the keys (not only their values) so that Windows will continue 382 // Remove the keys (not only their values) so that Windows will continue
382 // to launch Chrome without a pesky association error. 383 // to launch Chrome without a pesky association error.
384 // TODO(scottmg): Simplify after Metro removal. https://crbug.com/558054.
383 for (RegistryEntry* entry : delegate_execute_entries) 385 for (RegistryEntry* entry : delegate_execute_entries)
384 entry->set_removal_flag(RegistryEntry::RemovalFlag::KEY); 386 entry->set_removal_flag(RegistryEntry::RemovalFlag::KEY);
385 // Move |delegate_execute_entries| to |entries|. 387 // Move |delegate_execute_entries| to |entries|.
386 entries->insert(entries->end(), delegate_execute_entries.begin(), 388 entries->insert(entries->end(), delegate_execute_entries.begin(),
387 delegate_execute_entries.end()); 389 delegate_execute_entries.end());
388 delegate_execute_entries.weak_clear(); 390 delegate_execute_entries.weak_clear();
389 } 391 }
390 } 392 }
391 393
392 // This method returns a list of the registry entries needed to declare a 394 // This method returns a list of the registry entries needed to declare a
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 default: 942 default:
941 NOTREACHED(); 943 NOTREACHED();
942 return base::win::SHORTCUT_REPLACE_EXISTING; 944 return base::win::SHORTCUT_REPLACE_EXISTING;
943 } 945 }
944 } 946 }
945 947
946 // Returns a base::win::ShortcutProperties struct containing the properties 948 // Returns a base::win::ShortcutProperties struct containing the properties
947 // to set on the shortcut based on the provided ShellUtil::ShortcutProperties. 949 // to set on the shortcut based on the provided ShellUtil::ShortcutProperties.
948 base::win::ShortcutProperties TranslateShortcutProperties( 950 base::win::ShortcutProperties TranslateShortcutProperties(
949 const ShellUtil::ShortcutProperties& properties) { 951 const ShellUtil::ShortcutProperties& properties) {
950 base::win::ShortcutProperties shortcut_properties; 952 base::win::ShortcutProperties shortcut_properties;
gab 2016/01/14 03:22:17 Also add a TODO on base::win::ShortcutProperties's
gab 2016/01/14 17:08:24 Actually nvm, looking at what's involved here this
951 953
952 if (properties.has_target()) { 954 if (properties.has_target()) {
953 shortcut_properties.set_target(properties.target); 955 shortcut_properties.set_target(properties.target);
954 DCHECK(!properties.target.DirName().empty()); 956 DCHECK(!properties.target.DirName().empty());
955 shortcut_properties.set_working_dir(properties.target.DirName()); 957 shortcut_properties.set_working_dir(properties.target.DirName());
956 } 958 }
957 959
958 if (properties.has_arguments()) 960 if (properties.has_arguments())
959 shortcut_properties.set_arguments(properties.arguments); 961 shortcut_properties.set_arguments(properties.arguments);
960 962
961 if (properties.has_description()) 963 if (properties.has_description())
962 shortcut_properties.set_description(properties.description); 964 shortcut_properties.set_description(properties.description);
963 965
964 if (properties.has_icon()) 966 if (properties.has_icon())
965 shortcut_properties.set_icon(properties.icon, properties.icon_index); 967 shortcut_properties.set_icon(properties.icon, properties.icon_index);
966 968
967 if (properties.has_app_id()) 969 if (properties.has_app_id())
968 shortcut_properties.set_app_id(properties.app_id); 970 shortcut_properties.set_app_id(properties.app_id);
969 971
970 if (properties.has_dual_mode())
971 shortcut_properties.set_dual_mode(properties.dual_mode);
972
973 return shortcut_properties; 972 return shortcut_properties;
974 } 973 }
975 974
976 // Cleans up an old verb (run) we used to register in 975 // Cleans up an old verb (run) we used to register in
977 // <root>\Software\Classes\Chrome<.suffix>\.exe\shell\run on Windows 8. 976 // <root>\Software\Classes\Chrome<.suffix>\.exe\shell\run on Windows 8.
978 void RemoveRunVerbOnWindows8(BrowserDistribution* dist, 977 void RemoveRunVerbOnWindows8(BrowserDistribution* dist,
979 const base::FilePath& chrome_exe) { 978 const base::FilePath& chrome_exe) {
980 if (base::win::GetVersion() >= base::win::VERSION_WIN8) { 979 if (base::win::GetVersion() >= base::win::VERSION_WIN8) {
981 bool is_per_user_install = InstallUtil::IsPerUserInstall(chrome_exe); 980 bool is_per_user_install = InstallUtil::IsPerUserInstall(chrome_exe);
982 HKEY root_key = DetermineRegistrationRoot(is_per_user_install); 981 HKEY root_key = DetermineRegistrationRoot(is_per_user_install);
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
1372 const wchar_t* ShellUtil::kRegVerbOpen = L"open"; 1371 const wchar_t* ShellUtil::kRegVerbOpen = L"open";
1373 const wchar_t* ShellUtil::kRegVerbOpenNewWindow = L"opennewwindow"; 1372 const wchar_t* ShellUtil::kRegVerbOpenNewWindow = L"opennewwindow";
1374 const wchar_t* ShellUtil::kRegVerbRun = L"run"; 1373 const wchar_t* ShellUtil::kRegVerbRun = L"run";
1375 const wchar_t* ShellUtil::kRegCommand = L"command"; 1374 const wchar_t* ShellUtil::kRegCommand = L"command";
1376 const wchar_t* ShellUtil::kRegDelegateExecute = L"DelegateExecute"; 1375 const wchar_t* ShellUtil::kRegDelegateExecute = L"DelegateExecute";
1377 const wchar_t* ShellUtil::kRegOpenWithProgids = L"OpenWithProgids"; 1376 const wchar_t* ShellUtil::kRegOpenWithProgids = L"OpenWithProgids";
1378 1377
1379 ShellUtil::ShortcutProperties::ShortcutProperties(ShellChange level_in) 1378 ShellUtil::ShortcutProperties::ShortcutProperties(ShellChange level_in)
1380 : level(level_in), 1379 : level(level_in),
1381 icon_index(0), 1380 icon_index(0),
1382 dual_mode(false),
1383 pin_to_taskbar(false), 1381 pin_to_taskbar(false),
1384 options(0U) {} 1382 options(0U) {}
1385 1383
1386 ShellUtil::ShortcutProperties::~ShortcutProperties() { 1384 ShellUtil::ShortcutProperties::~ShortcutProperties() {
1387 } 1385 }
1388 1386
1389 bool ShellUtil::QuickIsChromeRegisteredInHKLM(BrowserDistribution* dist, 1387 bool ShellUtil::QuickIsChromeRegisteredInHKLM(BrowserDistribution* dist,
1390 const base::FilePath& chrome_exe, 1388 const base::FilePath& chrome_exe,
1391 const base::string16& suffix) { 1389 const base::string16& suffix) {
1392 return QuickIsChromeRegistered(dist, chrome_exe, suffix, 1390 return QuickIsChromeRegistered(dist, chrome_exe, suffix,
(...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after
2332 itr != entries.end(); ++itr) 2330 itr != entries.end(); ++itr)
2333 (*itr)->AddToWorkItemList(root, items.get()); 2331 (*itr)->AddToWorkItemList(root, items.get());
2334 2332
2335 // Apply all the registry changes and if there is a problem, rollback 2333 // Apply all the registry changes and if there is a problem, rollback
2336 if (!items->Do()) { 2334 if (!items->Do()) {
2337 items->Rollback(); 2335 items->Rollback();
2338 return false; 2336 return false;
2339 } 2337 }
2340 return true; 2338 return true;
2341 } 2339 }
OLDNEW
« no previous file with comments | « chrome/installer/util/shell_util.h ('k') | chrome/installer/util/shell_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698