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