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

Unified Diff: chrome/browser/browser_main_win.cc

Issue 6462024: Register Application Restart with Windows Restart Manager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address comments Created 9 years, 10 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/browser_main_win.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/browser_main_win.cc
diff --git a/chrome/browser/browser_main_win.cc b/chrome/browser/browser_main_win.cc
index cf5e78391ae5659d3b7bfa8f752d8398dacf0365..583dc610c5d5c464f5bb3f0a578ba696ac3128cc 100644
--- a/chrome/browser/browser_main_win.cc
+++ b/chrome/browser/browser_main_win.cc
@@ -15,6 +15,7 @@
#include "base/i18n/rtl.h"
#include "base/nss_util.h"
#include "base/path_service.h"
+#include "base/scoped_native_library.h"
#include "base/scoped_ptr.h"
#include "base/utf_string_conversions.h"
#include "base/win/windows_version.h"
@@ -40,6 +41,12 @@
#include "views/focus/accelerator_handler.h"
#include "views/window/window.h"
+namespace {
+typedef DECLSPEC_IMPORT HRESULT (STDAPICALLTYPE* RAR)(
+ const wchar_t* command_line,
+ DWORD flags);
+} // namespace
+
void DidEndMainMessageLoop() {
OleUninitialize();
}
@@ -114,7 +121,7 @@ int DoUninstallTasks(bool chrome_still_running) {
// the user if the browser process dies. These strings are stored in the
// environment block so they are accessible in the early stages of the
// chrome executable's lifetime.
-void PrepareRestartOnCrashEnviroment(const CommandLine &parsed_command_line) {
+void PrepareRestartOnCrashEnviroment(const CommandLine& parsed_command_line) {
// Clear this var so child processes don't show the dialog by default.
scoped_ptr<base::Environment> env(base::Environment::Create());
env->UnSetVar(env_vars::kShowRestart);
@@ -146,11 +153,39 @@ void PrepareRestartOnCrashEnviroment(const CommandLine &parsed_command_line) {
env->SetVar(env_vars::kRestartInfo, UTF16ToUTF8(dlg_strings));
}
+bool RegisterApplicationRestart(const CommandLine& parsed_command_line) {
+ // Define the type of RegisterApplicationRestart as RAR.
+ DCHECK(base::win::GetVersion() >= base::win::VERSION_VISTA);
+ base::ScopedNativeLibrary library(FilePath(L"kernel32.dll"));
+ // Get the function pointer for RegisterApplicationRestart.
+ RAR register_application_restart = static_cast<RAR>(
+ library.GetFunctionPointer("RegisterApplicationRestart"));
+ if (!register_application_restart)
+ return false;
+
+ // The Windows Restart Manager expects a string of command line flags only,
+ // without the program.
+ CommandLine command_line(CommandLine::NO_PROGRAM);
+ command_line.AppendSwitches(parsed_command_line);
+ command_line.AppendArgs(parsed_command_line);
+ // Ensure restore last session is set.
+ if (!command_line.HasSwitch(switches::kRestoreLastSession))
+ command_line.AppendSwitch(switches::kRestoreLastSession);
+ const wchar_t *command_string = command_line.command_line_string().c_str();
+
+ // Restart Chrome if the computer is restarted as the result of an update.
+ // This could be extended to handle crashes, hangs, and patches.
+ HRESULT hr = register_application_restart(command_string,
+ RESTART_NO_CRASH | RESTART_NO_HANG | RESTART_NO_PATCH);
+ DCHECK(SUCCEEDED(hr)) << "RegisterApplicationRestart failed.";
+ return SUCCEEDED(hr);
+}
+
// This method handles the --hide-icons and --show-icons command line options
// for chrome that get triggered by Windows from registry entries
// HideIconsCommand & ShowIconsCommand. Chrome doesn't support hide icons
// functionality so we just ask the users if they want to uninstall Chrome.
-int HandleIconsCommands(const CommandLine &parsed_command_line) {
+int HandleIconsCommands(const CommandLine& parsed_command_line) {
if (parsed_command_line.HasSwitch(switches::kHideIcons)) {
string16 cp_applet;
base::win::Version version = base::win::GetVersion();
« no previous file with comments | « chrome/browser/browser_main_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698