Commit fe5195f1 authored by alexeypa@chromium.org's avatar alexeypa@chromium.org

Avoid potential conflicts leading to pending reboots while upgrading the me2me host:

- Install the host binaries to versioned folders.
- Drop references to the COM objects quickly.

BUG=137755


Review URL: https://chromiumcodereview.appspot.com/10831037

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148671 0039d316-1c4b-4281-b951-d872f2087c98
parent 801f2616
...@@ -90,10 +90,14 @@ ...@@ -90,10 +90,14 @@
<Directory Id="ProgramFilesFolder"> <Directory Id="ProgramFilesFolder">
<?ifdef OfficialBuild ?> <?ifdef OfficialBuild ?>
<Directory Id="program_files_google" Name="Google"> <Directory Id="program_files_google" Name="Google">
<Directory Id="binaries" Name="Chrome Remote Desktop"/> <Directory Id="chromoting" Name="Chrome Remote Desktop">
<Directory Id="binaries" Name="$(var.Version)"/>
</Directory>
</Directory> </Directory>
<?else?> <?else?>
<Directory Id="binaries" Name="Chromoting"/> <Directory Id="chromoting" Name="Chromoting">
<Directory Id="binaries" Name="$(var.Version)"/>
</Directory>
<?endif?> <?endif?>
</Directory> </Directory>
<Directory Id="CommonAppDataFolder"> <Directory Id="CommonAppDataFolder">
......
...@@ -51,8 +51,17 @@ const wchar_t kDaemonControllerElevationMoniker[] = ...@@ -51,8 +51,17 @@ const wchar_t kDaemonControllerElevationMoniker[] =
// Name of the Daemon Controller's worker thread. // Name of the Daemon Controller's worker thread.
const char kDaemonControllerThreadName[] = "Daemon Controller thread"; const char kDaemonControllerThreadName[] = "Daemon Controller thread";
// The maximum interval between showing UAC prompts. // The maximum duration of keeping a reference to a privileged instance of
const int kUacTimeoutSec = 15 * 60; // the Daemon Controller. This effectively reduces number of UAC prompts a user
// sees.
const int kPrivilegedTimeoutSec = 5 * 60;
// The maximum duration of keeping a reference to an unprivileged instance of
// the Daemon Controller. This interval should not be too long. If upgrade
// happens while there is a live reference to a Daemon Controller instance
// the old binary still can be used. So dropping the references often makes sure
// that the old binary will go away sooner.
const int kUnprivilegedTimeoutSec = 60;
// A base::Thread implementation that initializes COM on the new thread. // A base::Thread implementation that initializes COM on the new thread.
class ComThread : public base::Thread { class ComThread : public base::Thread {
...@@ -296,6 +305,13 @@ HRESULT DaemonControllerWin::ActivateController() { ...@@ -296,6 +305,13 @@ HRESULT DaemonControllerWin::ActivateController() {
// Ignore the error. IID_IDaemonControl2 is optional. // Ignore the error. IID_IDaemonControl2 is optional.
control_.QueryInterface(IID_IDaemonControl2, control2_.ReceiveVoid()); control_.QueryInterface(IID_IDaemonControl2, control2_.ReceiveVoid());
// Release |control_| upon expiration of the timeout.
release_timer_.reset(new base::OneShotTimer<DaemonControllerWin>());
release_timer_->Start(FROM_HERE,
base::TimeDelta::FromSeconds(kUnprivilegedTimeoutSec),
this,
&DaemonControllerWin::ReleaseController);
} }
return S_OK; return S_OK;
...@@ -339,7 +355,7 @@ HRESULT DaemonControllerWin::ActivateElevatedController() { ...@@ -339,7 +355,7 @@ HRESULT DaemonControllerWin::ActivateElevatedController() {
// Release |control_| upon expiration of the timeout. // Release |control_| upon expiration of the timeout.
release_timer_.reset(new base::OneShotTimer<DaemonControllerWin>()); release_timer_.reset(new base::OneShotTimer<DaemonControllerWin>());
release_timer_->Start(FROM_HERE, release_timer_->Start(FROM_HERE,
base::TimeDelta::FromSeconds(kUacTimeoutSec), base::TimeDelta::FromSeconds(kPrivilegedTimeoutSec),
this, this,
&DaemonControllerWin::ReleaseController); &DaemonControllerWin::ReleaseController);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment