• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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_frame_operations.h"
6 
7 #include "base/command_line.h"
8 #include "base/files/file_path.h"
9 #include "base/logging.h"
10 #include "chrome/installer/util/channel_info.h"
11 #include "chrome/installer/util/helper.h"
12 #include "chrome/installer/util/master_preferences.h"
13 #include "chrome/installer/util/master_preferences_constants.h"
14 #include "chrome/installer/util/util_constants.h"
15 
16 namespace installer {
17 
ReadOptions(const MasterPreferences & prefs,std::set<base::string16> * options) const18 void ChromeFrameOperations::ReadOptions(const MasterPreferences& prefs,
19                                         std::set<base::string16>* options)
20     const {
21   DCHECK(options);
22 
23   static const struct PrefToOption {
24     const char* pref_name;
25     const wchar_t* option_name;
26   } map[] = {
27     { master_preferences::kMultiInstall, kOptionMultiInstall }
28   };
29 
30   bool pref_value;
31 
32   for (const PrefToOption* scan = &map[0], *end = &map[arraysize(map)];
33        scan != end; ++scan) {
34     if (prefs.GetBool(scan->pref_name, &pref_value) && pref_value)
35       options->insert(scan->option_name);
36   }
37 }
38 
ReadOptions(const CommandLine & uninstall_command,std::set<base::string16> * options) const39 void ChromeFrameOperations::ReadOptions(const CommandLine& uninstall_command,
40                                         std::set<base::string16>* options)
41     const {
42   DCHECK(options);
43 
44   static const struct FlagToOption {
45     const char* flag_name;
46     const wchar_t* option_name;
47   } map[] = {
48     { switches::kMultiInstall, kOptionMultiInstall }
49   };
50 
51   for (const FlagToOption* scan = &map[0], *end = &map[arraysize(map)];
52        scan != end; ++scan) {
53     if (uninstall_command.HasSwitch(scan->flag_name))
54       options->insert(scan->option_name);
55   }
56 }
57 
AddKeyFiles(const std::set<base::string16> & options,std::vector<base::FilePath> * key_files) const58 void ChromeFrameOperations::AddKeyFiles(
59     const std::set<base::string16>& options,
60     std::vector<base::FilePath>* key_files) const {
61   DCHECK(key_files);
62   key_files->push_back(base::FilePath(installer::kChromeFrameDll));
63   key_files->push_back(base::FilePath(installer::kChromeFrameHelperExe));
64 }
65 
AddComDllList(const std::set<base::string16> & options,std::vector<base::FilePath> * com_dll_list) const66 void ChromeFrameOperations::AddComDllList(
67     const std::set<base::string16>& options,
68     std::vector<base::FilePath>* com_dll_list) const {
69   DCHECK(com_dll_list);
70   com_dll_list->push_back(base::FilePath(installer::kChromeFrameDll));
71 }
72 
AppendProductFlags(const std::set<base::string16> & options,CommandLine * cmd_line) const73 void ChromeFrameOperations::AppendProductFlags(
74     const std::set<base::string16>& options,
75     CommandLine* cmd_line) const {
76   DCHECK(cmd_line);
77   bool is_multi_install = options.find(kOptionMultiInstall) != options.end();
78 
79   // Add --multi-install if it isn't already there.
80   if (is_multi_install && !cmd_line->HasSwitch(switches::kMultiInstall))
81     cmd_line->AppendSwitch(switches::kMultiInstall);
82 
83   // --chrome-frame is always needed.
84   cmd_line->AppendSwitch(switches::kChromeFrame);
85 }
86 
AppendRenameFlags(const std::set<base::string16> & options,CommandLine * cmd_line) const87 void ChromeFrameOperations::AppendRenameFlags(
88     const std::set<base::string16>& options,
89     CommandLine* cmd_line) const {
90   DCHECK(cmd_line);
91   bool is_multi_install = options.find(kOptionMultiInstall) != options.end();
92 
93   // Add --multi-install if it isn't already there.
94   if (is_multi_install && !cmd_line->HasSwitch(switches::kMultiInstall))
95     cmd_line->AppendSwitch(switches::kMultiInstall);
96 
97   // --chrome-frame is needed for single installs.
98   if (!is_multi_install)
99     cmd_line->AppendSwitch(switches::kChromeFrame);
100 }
101 
SetChannelFlags(const std::set<base::string16> & options,bool set,ChannelInfo * channel_info) const102 bool ChromeFrameOperations::SetChannelFlags(
103     const std::set<base::string16>& options,
104     bool set,
105     ChannelInfo* channel_info) const {
106 #if defined(GOOGLE_CHROME_BUILD)
107   DCHECK(channel_info);
108   bool modified = channel_info->SetChromeFrame(set);
109 
110   // Unconditionally remove the legacy -readymode flag.
111   modified |= channel_info->SetReadyMode(false);
112 
113   return modified;
114 #else
115   return false;
116 #endif
117 }
118 
ShouldCreateUninstallEntry(const std::set<base::string16> & options) const119 bool ChromeFrameOperations::ShouldCreateUninstallEntry(
120     const std::set<base::string16>& options) const {
121   return true;
122 }
123 
AddDefaultShortcutProperties(BrowserDistribution * dist,const base::FilePath & target_exe,ShellUtil::ShortcutProperties * properties) const124 void ChromeFrameOperations::AddDefaultShortcutProperties(
125     BrowserDistribution* dist,
126     const base::FilePath& target_exe,
127     ShellUtil::ShortcutProperties* properties) const {
128   NOTREACHED() << "Chrome Frame does not create shortcuts.";
129 }
130 
LaunchUserExperiment(const base::FilePath & setup_path,const std::set<base::string16> & options,InstallStatus status,bool system_level) const131 void ChromeFrameOperations::LaunchUserExperiment(
132     const base::FilePath& setup_path,
133     const std::set<base::string16>& options,
134     InstallStatus status,
135     bool system_level) const {
136   // No experiments yet.  If adding some in the future, need to have
137   // ChromeFrameDistribution::HasUserExperiments() return true.
138   NOTREACHED();
139 }
140 
141 }  // namespace installer
142