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

Side by Side Diff: chrome/installer/setup/install_worker.cc

Issue 11412015: Copy setup when quick-enabling app host to user-level from system-level. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Now with compilation. Created 8 years, 1 month 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 | « no previous file | no next file » | 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 contains the definitions of the installer functions that build 5 // This file contains the definitions of the installer functions that build
6 // the WorkItemList used to install the application. 6 // the WorkItemList used to install the application.
7 7
8 #include "chrome/installer/setup/install_worker.h" 8 #include "chrome/installer/setup/install_worker.h"
9 9
10 #include <oaidl.h> 10 #include <oaidl.h>
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 const FilePath& setup_path, 155 const FilePath& setup_path,
156 const FilePath& archive_path, 156 const FilePath& archive_path,
157 const FilePath& temp_path, 157 const FilePath& temp_path,
158 const Version& new_version, 158 const Version& new_version,
159 WorkItemList* install_list) { 159 WorkItemList* install_list) {
160 DCHECK(install_list); 160 DCHECK(install_list);
161 FilePath installer_dir(installer_state.GetInstallerDirectory(new_version)); 161 FilePath installer_dir(installer_state.GetInstallerDirectory(new_version));
162 install_list->AddCreateDirWorkItem(installer_dir); 162 install_list->AddCreateDirWorkItem(installer_dir);
163 163
164 FilePath exe_dst(installer_dir.Append(setup_path.BaseName())); 164 FilePath exe_dst(installer_dir.Append(setup_path.BaseName()));
165 FilePath archive_dst(installer_dir.Append(archive_path.BaseName())); 165 FilePath archive_dst(installer_dir.Append(archive_path.BaseName()));
grt (UTC plus 2) 2012/11/16 13:32:42 move this down to line 176
erikwright (departed) 2012/11/20 20:14:30 Done.
166 166
167 if (exe_dst != setup_path) { 167 if (exe_dst != setup_path) {
168 install_list->AddCopyTreeWorkItem(setup_path.value(), exe_dst.value(), 168 install_list->AddCopyTreeWorkItem(setup_path.value(), exe_dst.value(),
169 temp_path.value(), WorkItem::ALWAYS); 169 temp_path.value(), WorkItem::ALWAYS);
170 } 170 }
171 171
172 if (archive_path != archive_dst) { 172 // We don't copy the archive when only App Host is at user-level. Only
grt (UTC plus 2) 2012/11/16 04:38:26 how are the App Host binary and this setup.exe kep
erikwright (departed) 2012/11/20 20:14:30 replied elsewhere.
173 // In the past, we copied rather than moved for system level installs so 173 // setup.exe is required, and only for uninstall.
174 // that the permissions of %ProgramFiles% would be picked up. Now that 174 if (installer_state.products().size() != 1 ||
grt (UTC plus 2) 2012/11/16 13:32:42 the comment says to only skip this when doing the
erikwright (departed) 2012/11/16 13:58:33 The code reflects skipping this if exactly one pro
grt (UTC plus 2) 2012/11/16 14:14:59 sgtm
erikwright (departed) 2012/11/20 20:14:30 Done.
175 // |temp_path| is in %ProgramFiles% for system level installs (and in 175 !installer_state.FindProduct(BrowserDistribution::CHROME_APP_HOST)) {
176 // %LOCALAPPDATA% otherwise), there is no need to do this for the archive. 176 if (archive_path != archive_dst) {
177 // Setup.exe, on the other hand, is created elsewhere so it must always be 177 // In the past, we copied rather than moved for system level installs so
178 // copied. 178 // that the permissions of %ProgramFiles% would be picked up. Now that
179 // |temp_path| is in %ProgramFiles% for system level installs (and in
180 // %LOCALAPPDATA% otherwise), there is no need to do this for the archive.
181 // Setup.exe, on the other hand, is created elsewhere so it must always be
182 // copied.
179 #if !defined(COMPONENT_BUILD) 183 #if !defined(COMPONENT_BUILD)
180 install_list->AddMoveTreeWorkItem(archive_path.value(), archive_dst.value(), 184 install_list->AddMoveTreeWorkItem(archive_path.value(),
181 temp_path.value(), WorkItem::ALWAYS_MOVE); 185 archive_dst.value(),
186 temp_path.value(),
187 WorkItem::ALWAYS_MOVE);
182 #else // COMPONENT_BUILD 188 #else // COMPONENT_BUILD
183 // The archive is usually extracted in |temp_path| in which case we want to 189 // The archive is usually extracted in |temp_path| in which case we want
184 // move it as mentioned above; however in the component build, setup.exe 190 // to move it as mentioned above; however in the component build,
185 // uses chrome.7z directly from the build output, moving it means that 191 // setup.exe uses chrome.7z directly from the build output, moving it
186 // setup.exe cannot be run again without regenerating the archive, so copy 192 // means that setup.exe cannot be run again without regenerating the
187 // it instead in this case to save developer time. 193 // archive, so copy it instead in this case to save developer time.
188 install_list->AddCopyTreeWorkItem(archive_path.value(), archive_dst.value(), 194 install_list->AddCopyTreeWorkItem(archive_path.value(),
189 temp_path.value(), WorkItem::ALWAYS); 195 archive_dst.value(),
196 temp_path.value(),
197 WorkItem::ALWAYS);
190 #endif // COMPONENT_BUILD 198 #endif // COMPONENT_BUILD
199 }
191 } 200 }
192 } 201 }
193 202
194 void AddInstallAppCommandWorkItems(const InstallerState& installer_state, 203 void AddInstallAppCommandWorkItems(const InstallerState& installer_state,
195 const InstallationState& machine_state, 204 const InstallationState& machine_state,
196 const FilePath& setup_path, 205 const FilePath& setup_path,
197 const Version& new_version, 206 const Version& new_version,
198 const Product& product, 207 const Product& product,
199 WorkItemList* work_item_list) { 208 WorkItemList* work_item_list) {
200 DCHECK(product.is_chrome_app_host()); 209 DCHECK(product.is_chrome_app_host());
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
402 src_path.AppendASCII(new_version.GetString()).value(), 411 src_path.AppendASCII(new_version.GetString()).value(),
403 target_path.AppendASCII(new_version.GetString()).value(), 412 target_path.AppendASCII(new_version.GetString()).value(),
404 temp_path.value(), 413 temp_path.value(),
405 check_for_duplicates ? WorkItem::CHECK_DUPLICATES : 414 check_for_duplicates ? WorkItem::CHECK_DUPLICATES :
406 WorkItem::ALWAYS_MOVE); 415 WorkItem::ALWAYS_MOVE);
407 416
408 // Delete any old_chrome.exe if present (ignore failure if it's in use). 417 // Delete any old_chrome.exe if present (ignore failure if it's in use).
409 install_list->AddDeleteTreeWorkItem( 418 install_list->AddDeleteTreeWorkItem(
410 target_path.Append(installer::kChromeOldExe), temp_path)-> 419 target_path.Append(installer::kChromeOldExe), temp_path)->
411 set_ignore_failure(true); 420 set_ignore_failure(true);
412
413 // Copy installer in install directory and
414 // add shortcut in Control Panel->Add/Remove Programs.
415 AddInstallerCopyTasks(installer_state, setup_path, archive_path, temp_path,
416 new_version, install_list);
417 } 421 }
418 422
419 // Probes COM machinery to get an instance of delegate_execute.exe's 423 // Probes COM machinery to get an instance of delegate_execute.exe's
420 // CommandExecuteImpl class. This is required so that COM purges its cache of 424 // CommandExecuteImpl class. This is required so that COM purges its cache of
421 // the path to the binary, which changes on updates. This callback 425 // the path to the binary, which changes on updates. This callback
422 // unconditionally returns true since an install should not be aborted if the 426 // unconditionally returns true since an install should not be aborted if the
423 // probe fails. 427 // probe fails.
424 bool ProbeCommandExecuteCallback(const string16& command_execute_id, 428 bool ProbeCommandExecuteCallback(const string16& command_execute_id,
425 const CallbackWorkItem& work_item) { 429 const CallbackWorkItem& work_item) {
426 // Noop on rollback. 430 // Noop on rollback.
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 1082
1079 if (installer_state.FindProduct(BrowserDistribution::CHROME_APP_HOST)) { 1083 if (installer_state.FindProduct(BrowserDistribution::CHROME_APP_HOST)) {
1080 install_list->AddCopyTreeWorkItem( 1084 install_list->AddCopyTreeWorkItem(
1081 src_path.Append(installer::kChromeAppHostExe).value(), 1085 src_path.Append(installer::kChromeAppHostExe).value(),
1082 target_path.Append(installer::kChromeAppHostExe).value(), 1086 target_path.Append(installer::kChromeAppHostExe).value(),
1083 temp_path.value(), 1087 temp_path.value(),
1084 WorkItem::ALWAYS, 1088 WorkItem::ALWAYS,
1085 L""); 1089 L"");
1086 } 1090 }
1087 1091
1092 // Copy installer in install directory
1093 AddInstallerCopyTasks(installer_state, setup_path, archive_path, temp_path,
1094 new_version, install_list);
1095
1088 const HKEY root = installer_state.root_key(); 1096 const HKEY root = installer_state.root_key();
1089 // Only set "lang" for user-level installs since for system-level, the install 1097 // Only set "lang" for user-level installs since for system-level, the install
1090 // language may not be related to a given user's runtime language. 1098 // language may not be related to a given user's runtime language.
1091 const bool add_language_identifier = !installer_state.system_install(); 1099 const bool add_language_identifier = !installer_state.system_install();
1092 1100
1093 const Products& products = installer_state.products(); 1101 const Products& products = installer_state.products();
1094 for (Products::const_iterator it = products.begin(); it < products.end(); 1102 for (Products::const_iterator it = products.begin(); it < products.end();
1095 ++it) { 1103 ++it) {
1096 const Product& product = **it; 1104 const Product& product = **it;
1097 1105
(...skipping 515 matching lines...) Expand 10 before | Expand all | Expand 10 after
1613 // Log everything for now. 1621 // Log everything for now.
1614 cmd_line.AppendSwitch(installer::switches::kVerboseLogging); 1622 cmd_line.AppendSwitch(installer::switches::kVerboseLogging);
1615 1623
1616 AppCommand cmd(cmd_line.GetCommandLineString()); 1624 AppCommand cmd(cmd_line.GetCommandLineString());
1617 cmd.set_is_auto_run_on_os_upgrade(true); 1625 cmd.set_is_auto_run_on_os_upgrade(true);
1618 cmd.AddWorkItems(installer_state.root_key(), cmd_key, install_list); 1626 cmd.AddWorkItems(installer_state.root_key(), cmd_key, install_list);
1619 } 1627 }
1620 } 1628 }
1621 1629
1622 } // namespace installer 1630 } // namespace installer
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698