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
ShowMessageBox(gfx::NativeWindow parent_window)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
Accept()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
GetDialogButtons() const49 int UpdateRecommendedMessageBox::GetDialogButtons() const {
50 return ui::MessageBoxFlags::DIALOGBUTTON_OK |
51 ui::MessageBoxFlags::DIALOGBUTTON_CANCEL;
52 }
53
GetDialogButtonLabel(ui::MessageBoxFlags::DialogButton button) const54 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
ShouldShowWindowTitle() const63 bool UpdateRecommendedMessageBox::ShouldShowWindowTitle() const {
64 #if defined(OS_CHROMEOS)
65 return false;
66 #else
67 return true;
68 #endif
69 }
70
GetWindowTitle() const71 std::wstring UpdateRecommendedMessageBox::GetWindowTitle() const {
72 return UTF16ToWide(l10n_util::GetStringUTF16(IDS_PRODUCT_NAME));
73 }
74
DeleteDelegate()75 void UpdateRecommendedMessageBox::DeleteDelegate() {
76 delete this;
77 }
78
IsModal() const79 bool UpdateRecommendedMessageBox::IsModal() const {
80 return true;
81 }
82
GetContentsView()83 views::View* UpdateRecommendedMessageBox::GetContentsView() {
84 return message_box_view_;
85 }
86
87 ////////////////////////////////////////////////////////////////////////////////
88 // UpdateRecommendedMessageBox, private:
89
UpdateRecommendedMessageBox(gfx::NativeWindow parent_window)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
~UpdateRecommendedMessageBox()110 UpdateRecommendedMessageBox::~UpdateRecommendedMessageBox() {
111 }
112