Home | History | Annotate | Download | only in views
      1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/views/update_recommended_message_box.h"
      6 
      7 #include "base/utf_string_conversions.h"
      8 #include "chrome/browser/browser_process.h"
      9 #include "chrome/browser/prefs/pref_service.h"
     10 #include "chrome/browser/ui/browser_list.h"
     11 #include "chrome/browser/ui/views/window.h"
     12 #include "chrome/common/pref_names.h"
     13 #include "grit/chromium_strings.h"
     14 #include "grit/generated_resources.h"
     15 #include "ui/base/l10n/l10n_util.h"
     16 #include "ui/base/message_box_flags.h"
     17 #include "views/controls/message_box_view.h"
     18 #include "views/window/window.h"
     19 
     20 #if defined(OS_CHROMEOS)
     21 #include "chrome/browser/chromeos/cros/cros_library.h"
     22 #include "chrome/browser/chromeos/cros/power_library.h"
     23 #endif
     24 
     25 ////////////////////////////////////////////////////////////////////////////////
     26 // UpdateRecommendedMessageBox, public:
     27 
     28 // static
     29 void UpdateRecommendedMessageBox::ShowMessageBox(
     30     gfx::NativeWindow parent_window) {
     31   // When the window closes, it will delete itself.
     32   new UpdateRecommendedMessageBox(parent_window);
     33 }
     34 
     35 bool UpdateRecommendedMessageBox::Accept() {
     36   // Set the flag to restore the last session on shutdown.
     37   PrefService* pref_service = g_browser_process->local_state();
     38   pref_service->SetBoolean(prefs::kRestartLastSessionOnShutdown, true);
     39 
     40 #if defined(OS_CHROMEOS)
     41   chromeos::CrosLibrary::Get()->GetPowerLibrary()->RequestRestart();
     42   // If running the Chrome OS build, but we're not on the device, fall through
     43 #endif
     44   BrowserList::CloseAllBrowsersAndExit();
     45 
     46   return true;
     47 }
     48 
     49 int UpdateRecommendedMessageBox::GetDialogButtons() const {
     50   return ui::MessageBoxFlags::DIALOGBUTTON_OK |
     51          ui::MessageBoxFlags::DIALOGBUTTON_CANCEL;
     52 }
     53 
     54 std::wstring UpdateRecommendedMessageBox::GetDialogButtonLabel(
     55     ui::MessageBoxFlags::DialogButton button) const {
     56   DCHECK(button == ui::MessageBoxFlags::DIALOGBUTTON_OK ||
     57          button == ui::MessageBoxFlags::DIALOGBUTTON_CANCEL);
     58   return button == ui::MessageBoxFlags::DIALOGBUTTON_OK ?
     59       UTF16ToWide(l10n_util::GetStringUTF16(IDS_RELAUNCH_AND_UPDATE)) :
     60       UTF16ToWide(l10n_util::GetStringUTF16(IDS_NOT_NOW));
     61 }
     62 
     63 bool UpdateRecommendedMessageBox::ShouldShowWindowTitle() const {
     64 #if defined(OS_CHROMEOS)
     65   return false;
     66 #else
     67   return true;
     68 #endif
     69 }
     70 
     71 std::wstring UpdateRecommendedMessageBox::GetWindowTitle() const {
     72   return UTF16ToWide(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
     73 }
     74 
     75 void UpdateRecommendedMessageBox::DeleteDelegate() {
     76   delete this;
     77 }
     78 
     79 bool UpdateRecommendedMessageBox::IsModal() const {
     80   return true;
     81 }
     82 
     83 views::View* UpdateRecommendedMessageBox::GetContentsView() {
     84   return message_box_view_;
     85 }
     86 
     87 ////////////////////////////////////////////////////////////////////////////////
     88 // UpdateRecommendedMessageBox, private:
     89 
     90 UpdateRecommendedMessageBox::UpdateRecommendedMessageBox(
     91     gfx::NativeWindow parent_window) {
     92   const int kDialogWidth = 400;
     93 #if defined(OS_CHROMEOS)
     94   const int kProductNameId = IDS_PRODUCT_OS_NAME;
     95 #else
     96   const int kProductNameId = IDS_PRODUCT_NAME;
     97 #endif
     98   const string16 product_name = l10n_util::GetStringUTF16(kProductNameId);
     99   // Also deleted when the window closes.
    100   message_box_view_ = new views::MessageBoxView(
    101       ui::MessageBoxFlags::kFlagHasMessage |
    102           ui::MessageBoxFlags::kFlagHasOKButton,
    103       UTF16ToWide(l10n_util::GetStringFUTF16(IDS_UPDATE_RECOMMENDED,
    104                                              product_name)),
    105       std::wstring(),
    106       kDialogWidth);
    107   browser::CreateViewsWindow(parent_window, gfx::Rect(), this)->Show();
    108 }
    109 
    110 UpdateRecommendedMessageBox::~UpdateRecommendedMessageBox() {
    111 }
    112