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 3 // found in the LICENSE file. 4 5 #include "chrome/installer/util/chrome_app_host_operations.h" 6 7 #include "base/command_line.h" 8 #include "base/files/file_path.h" 9 #include "base/logging.h" 10 #include "chrome/common/chrome_switches.h" 11 #include "chrome/installer/util/browser_distribution.h" 12 #include "chrome/installer/util/channel_info.h" 13 #include "chrome/installer/util/helper.h" 14 #include "chrome/installer/util/master_preferences.h" 15 #include "chrome/installer/util/master_preferences_constants.h" 16 #include "chrome/installer/util/shell_util.h" 17 #include "chrome/installer/util/util_constants.h" 18 19 namespace installer { 20 21 void ChromeAppHostOperations::ReadOptions(const MasterPreferences& prefs, 22 std::set<string16>* options) const { 23 DCHECK(options); 24 25 bool pref_value; 26 if (prefs.GetBool(master_preferences::kMultiInstall, &pref_value) && 27 pref_value) { 28 options->insert(kOptionMultiInstall); 29 } 30 } 31 32 void ChromeAppHostOperations::ReadOptions(const CommandLine& uninstall_command, 33 std::set<string16>* options) const { 34 DCHECK(options); 35 36 if (uninstall_command.HasSwitch(switches::kMultiInstall)) 37 options->insert(kOptionMultiInstall); 38 } 39 40 void ChromeAppHostOperations::AddKeyFiles( 41 const std::set<string16>& options, 42 std::vector<base::FilePath>* key_files) const { 43 } 44 45 void ChromeAppHostOperations::AddComDllList( 46 const std::set<string16>& options, 47 std::vector<base::FilePath>* com_dll_list) const { 48 } 49 50 void ChromeAppHostOperations::AppendProductFlags( 51 const std::set<string16>& options, 52 CommandLine* cmd_line) const { 53 DCHECK(cmd_line); 54 bool is_multi_install = options.find(kOptionMultiInstall) != options.end(); 55 56 // Non-multi-install not supported for the app host. 57 DCHECK(is_multi_install); 58 59 // Add --multi-install if it isn't already there. 60 if (is_multi_install && !cmd_line->HasSwitch(switches::kMultiInstall)) 61 cmd_line->AppendSwitch(switches::kMultiInstall); 62 63 // Add --app-launcher. 64 cmd_line->AppendSwitch(switches::kChromeAppLauncher); 65 } 66 67 void ChromeAppHostOperations::AppendRenameFlags( 68 const std::set<string16>& options, 69 CommandLine* cmd_line) const { 70 DCHECK(cmd_line); 71 bool is_multi_install = options.find(kOptionMultiInstall) != options.end(); 72 73 // Non-multi-install not supported for the app host. 74 DCHECK(is_multi_install); 75 76 // Add --multi-install if it isn't already there. 77 if (is_multi_install && !cmd_line->HasSwitch(switches::kMultiInstall)) 78 cmd_line->AppendSwitch(switches::kMultiInstall); 79 } 80 81 bool ChromeAppHostOperations::SetChannelFlags(const std::set<string16>& options, 82 bool set, 83 ChannelInfo* channel_info) const { 84 #if defined(GOOGLE_CHROME_BUILD) 85 DCHECK(channel_info); 86 return channel_info->SetAppLauncher(set); 87 #else 88 return false; 89 #endif 90 } 91 92 bool ChromeAppHostOperations::ShouldCreateUninstallEntry( 93 const std::set<string16>& options) const { 94 return true; 95 } 96 97 void ChromeAppHostOperations::AddDefaultShortcutProperties( 98 BrowserDistribution* dist, 99 const base::FilePath& target_exe, 100 ShellUtil::ShortcutProperties* properties) const { 101 if (!properties->has_target()) 102 properties->set_target(target_exe); 103 104 if (!properties->has_arguments()) { 105 CommandLine app_host_args(CommandLine::NO_PROGRAM); 106 app_host_args.AppendSwitch(::switches::kShowAppList); 107 properties->set_arguments(app_host_args.GetCommandLineString()); 108 } 109 110 if (!properties->has_icon()) 111 properties->set_icon(target_exe, 112 dist->GetIconIndex(BrowserDistribution::SHORTCUT_APP_LAUNCHER)); 113 114 if (!properties->has_app_id()) { 115 std::vector<string16> components; 116 components.push_back(dist->GetBaseAppId()); 117 properties->set_app_id(ShellUtil::BuildAppModelId(components)); 118 } 119 } 120 121 void ChromeAppHostOperations::LaunchUserExperiment( 122 const base::FilePath& setup_path, 123 const std::set<string16>& options, 124 InstallStatus status, 125 bool system_level) const { 126 // No experiments yet. If adding some in the future, need to have 127 // ChromeAppHostDistribution::HasUserExperiments() return true. 128 NOTREACHED(); 129 } 130 131 } // namespace installer 132