Index: chrome/browser/mac/relauncher.cc |
=================================================================== |
--- chrome/browser/mac/relauncher.cc (revision 90773) |
+++ chrome/browser/mac/relauncher.cc (working copy) |
@@ -26,6 +26,7 @@ |
#include "base/process_util.h" |
#include "base/stringprintf.h" |
#include "base/sys_string_conversions.h" |
+#include "chrome/browser/mac/install_from_dmg.h" |
#include "chrome/common/chrome_switches.h" |
#include "content/common/content_paths.h" |
#include "content/common/content_switches.h" |
@@ -42,6 +43,8 @@ |
namespace mac_relauncher { |
+const char* const kRelauncherDMGDeviceArg = "--dmg-device="; |
+ |
namespace { |
// The "magic" file descriptor that the relauncher process' write side of the |
@@ -91,10 +94,12 @@ |
return false; |
} |
- return RelaunchAppWithHelper(child_path.value(), args); |
+ std::vector<std::string> relauncher_args; |
+ return RelaunchAppWithHelper(child_path.value(), relauncher_args, args); |
} |
bool RelaunchAppWithHelper(const std::string& helper, |
+ const std::vector<std::string>& relauncher_args, |
const std::vector<std::string>& args) { |
std::vector<std::string> relaunch_args; |
relaunch_args.push_back(helper); |
@@ -106,6 +111,9 @@ |
relaunch_args.push_back(kRelauncherBackgroundArg); |
} |
+ relaunch_args.insert(relaunch_args.end(), |
+ relauncher_args.begin(), relauncher_args.end()); |
+ |
relaunch_args.push_back(kRelauncherArgSeparator); |
// When using the CommandLine interface, -psn_ may have been rewritten as |
@@ -295,6 +303,7 @@ |
// start it in the background. |
bool background = false; |
bool in_relaunch_args = false; |
+ std::string dmg_bsd_device_name; |
bool seen_relaunch_executable = false; |
std::string relaunch_executable; |
const std::string relauncher_arg_separator(kRelauncherArgSeparator); |
@@ -311,6 +320,9 @@ |
in_relaunch_args = true; |
} else if (arg == kRelauncherBackgroundArg) { |
background = true; |
+ } else if (arg.compare(0, strlen(kRelauncherDMGDeviceArg), |
+ kRelauncherDMGDeviceArg) == 0) { |
+ dmg_bsd_device_name.assign(arg.substr(strlen(kRelauncherDMGDeviceArg))); |
} |
} else { |
if (!seen_relaunch_executable) { |
@@ -360,6 +372,14 @@ |
return 1; |
} |
+ // The application should have relaunched (or is in the process of |
+ // relaunching). From this point on, only clean-up tasks should occur, and |
+ // failures are tolerable. |
+ |
+ if (!dmg_bsd_device_name.empty()) { |
+ EjectAndTrashDiskImage(dmg_bsd_device_name); |
+ } |
+ |
return 0; |
} |