Metro mode switching (chrome side)

This change puts a menu option to restart chrome in desktop or
to restart chrome in metro mode and then wires up to the restart
helper.


BUG=141032
TEST=see bug
Review URL: https://chromiumcodereview.appspot.com/10885047

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@155263 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc
index fec9e70e..fdb6b50 100644
--- a/chrome/browser/ui/browser_command_controller.cc
+++ b/chrome/browser/ui/browser_command_controller.cc
@@ -68,6 +68,18 @@
   return false;
 }
 
+#if defined(OS_WIN)
+void RestartWithModeSwitch() {
+  PrefService* prefs = g_browser_process->local_state();
+  if (!prefs)
+    return;
+  if (!prefs->HasPrefPath(prefs::kRestartSwitchMode))
+    return;
+  prefs->SetBoolean(prefs::kRestartSwitchMode, true);
+  browser::AttemptRestart();
+}
+#endif
+
 }  // namespace
 
 namespace chrome {
@@ -330,14 +342,23 @@
     case IDC_FULLSCREEN:
       chrome::ToggleFullscreenMode(browser_);
       break;
+
 #if defined(OS_WIN)
+    // Windows 8 specific commands.
     case IDC_METRO_SNAP_ENABLE:
       browser_->SetMetroSnapMode(true);
       break;
     case IDC_METRO_SNAP_DISABLE:
       browser_->SetMetroSnapMode(false);
       break;
+    case IDC_WIN8_DESKTOP_RESTART:
+      RestartWithModeSwitch();
+      break;
+    case IDC_WIN8_METRO_RESTART:
+      RestartWithModeSwitch();
+      break;
 #endif
+
 #if defined(OS_MACOSX)
     case IDC_PRESENTATION_MODE:
       browser_->TogglePresentationMode();
@@ -790,6 +811,9 @@
   const bool metro_mode = base::win::IsMetroProcess();
   command_updater_.UpdateCommandEnabled(IDC_METRO_SNAP_ENABLE, metro_mode);
   command_updater_.UpdateCommandEnabled(IDC_METRO_SNAP_DISABLE, metro_mode);
+  int restart_mode = metro_mode ?
+      IDC_WIN8_DESKTOP_RESTART : IDC_WIN8_METRO_RESTART;
+  command_updater_.UpdateCommandEnabled(restart_mode, normal_window);
 #endif
 #if defined(OS_MACOSX)
   command_updater_.UpdateCommandEnabled(IDC_TABPOSE, normal_window);