Chromium Code Reviews| 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 #include "chrome/browser/component_updater/recovery_component_installer.h" | 5 #include "chrome/browser/component_updater/recovery_component_installer.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/base_paths.h" | 10 #include "base/base_paths.h" |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 126 manifest->GetStringASCII("name", &name); | 126 manifest->GetStringASCII("name", &name); |
| 127 if (name != kRecoveryManifestName) | 127 if (name != kRecoveryManifestName) |
| 128 return; | 128 return; |
| 129 std::string proposed_version; | 129 std::string proposed_version; |
| 130 manifest->GetStringASCII("version", &proposed_version); | 130 manifest->GetStringASCII("version", &proposed_version); |
| 131 const Version version(proposed_version.c_str()); | 131 const Version version(proposed_version.c_str()); |
| 132 if (!version.IsValid()) | 132 if (!version.IsValid()) |
| 133 return; | 133 return; |
| 134 | 134 |
| 135 base::CommandLine cmdline(main_file); | 135 base::CommandLine cmdline(main_file); |
| 136 | |
| 137 // Add a flag to indicate this is a re-attempted install so that the recovery | |
| 138 // executable can report back accordingly. | |
| 139 cmdline.AppendArg("/deferredrun"); | |
| 140 | |
| 136 std::string arguments; | 141 std::string arguments; |
| 137 if (manifest->GetStringASCII("x-recovery-args", &arguments)) | 142 if (manifest->GetStringASCII("x-recovery-args", &arguments)) |
| 138 cmdline.AppendArg(arguments); | 143 cmdline.AppendArg(arguments); |
| 139 std::string add_version; | 144 std::string add_version; |
| 140 if (manifest->GetStringASCII("x-recovery-add-version", &add_version) && | 145 if (manifest->GetStringASCII("x-recovery-add-version", &add_version) && |
| 141 add_version == "yes") { | 146 add_version == "yes") { |
| 142 cmdline.AppendSwitchASCII("version", version.GetString()); | 147 std::string version_string = "/version "; |
| 148 version_string += version.GetString(); | |
| 149 cmdline.AppendArg(version_string); | |
| 143 } | 150 } |
| 144 | 151 |
| 145 RecordRecoveryComponentUMAEvent(RCE_RUNNING_ELEVATED); | 152 RecordRecoveryComponentUMAEvent(RCE_RUNNING_ELEVATED); |
| 146 | 153 |
| 147 base::LaunchOptions options; | 154 base::LaunchOptions options; |
| 148 options.start_hidden = true; | 155 options.start_hidden = true; |
| 149 base::Process process = base::LaunchElevatedProcess(cmdline, options); | 156 base::Process process = base::LaunchElevatedProcess(cmdline, options); |
| 150 | 157 |
| 151 base::WorkerPool::PostTask( | 158 base::WorkerPool::PostTask( |
| 152 FROM_HERE, | 159 FROM_HERE, |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 332 if (!base::PathExists(main_file)) | 339 if (!base::PathExists(main_file)) |
| 333 return false; | 340 return false; |
| 334 // Run the recovery component. | 341 // Run the recovery component. |
| 335 base::CommandLine cmdline(main_file); | 342 base::CommandLine cmdline(main_file); |
| 336 std::string arguments; | 343 std::string arguments; |
| 337 if (manifest.GetStringASCII("x-recovery-args", &arguments)) | 344 if (manifest.GetStringASCII("x-recovery-args", &arguments)) |
| 338 cmdline.AppendArg(arguments); | 345 cmdline.AppendArg(arguments); |
| 339 std::string add_version; | 346 std::string add_version; |
| 340 if (manifest.GetStringASCII("x-recovery-add-version", &add_version) && | 347 if (manifest.GetStringASCII("x-recovery-add-version", &add_version) && |
| 341 add_version == "yes") { | 348 add_version == "yes") { |
| 342 cmdline.AppendSwitchASCII("version", current_version_.GetString()); | 349 std::string version_string = "/version "; |
|
Sorin Jianu
2015/05/16 00:19:11
As discussed, we could factor this out as a functi
xiaoling
2015/05/16 01:20:09
Done.
| |
| 350 version_string += current_version_.GetString(); | |
| 351 cmdline.AppendArg(version_string); | |
| 343 } | 352 } |
| 344 | 353 |
| 345 if (!RunInstallCommand(cmdline, path)) { | 354 if (!RunInstallCommand(cmdline, path)) { |
| 346 return false; | 355 return false; |
| 347 } | 356 } |
| 348 | 357 |
| 349 current_version_ = version; | 358 current_version_ = version; |
| 350 if (prefs_) { | 359 if (prefs_) { |
| 351 BrowserThread::PostTask( | 360 BrowserThread::PostTask( |
| 352 BrowserThread::UI, | 361 BrowserThread::UI, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 402 #endif // OS_WIN | 411 #endif // OS_WIN |
| 403 prefs->SetBoolean(prefs::kRecoveryComponentNeedsElevation, false); | 412 prefs->SetBoolean(prefs::kRecoveryComponentNeedsElevation, false); |
| 404 } | 413 } |
| 405 | 414 |
| 406 void DeclinedElevatedRecoveryInstall(PrefService* prefs) { | 415 void DeclinedElevatedRecoveryInstall(PrefService* prefs) { |
| 407 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 416 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 408 prefs->SetBoolean(prefs::kRecoveryComponentNeedsElevation, false); | 417 prefs->SetBoolean(prefs::kRecoveryComponentNeedsElevation, false); |
| 409 } | 418 } |
| 410 | 419 |
| 411 } // namespace component_updater | 420 } // namespace component_updater |
| OLD | NEW |