| // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "chrome/browser/ui/cocoa/restart_browser.h" |
| |
| #include "chrome/browser/browser_process.h" |
| #include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/ui/browser_list.h" |
| #include "chrome/common/pref_names.h" |
| #include "grit/app_strings.h" |
| #include "grit/chromium_strings.h" |
| #include "grit/generated_resources.h" |
| #include "ui/base/l10n/l10n_util.h" |
| #include "ui/base/l10n/l10n_util_mac.h" |
| |
| // Helper to clean up after the notification that the alert was dismissed. |
| @interface RestartHelper : NSObject { |
| @private |
| NSAlert* alert_; |
| } |
| - (NSAlert*)alert; |
| - (void)alertDidEnd:(NSAlert*)alert |
| returnCode:(int)returnCode |
| contextInfo:(void*)contextInfo; |
| @end |
| |
| @implementation RestartHelper |
| |
| - (NSAlert*)alert { |
| alert_ = [[NSAlert alloc] init]; |
| return alert_; |
| } |
| |
| - (void)dealloc { |
| [alert_ release]; |
| [super dealloc]; |
| } |
| |
| - (void)alertDidEnd:(NSAlert*)alert |
| returnCode:(int)returnCode |
| contextInfo:(void*)contextInfo { |
| if (returnCode == NSAlertFirstButtonReturn) { |
| // Nothing to do. User will restart later. |
| } else if (returnCode == NSAlertSecondButtonReturn) { |
| // Set the flag to restore state after the restart. |
| PrefService* pref_service = g_browser_process->local_state(); |
| pref_service->SetBoolean(prefs::kRestartLastSessionOnShutdown, true); |
| BrowserList::CloseAllBrowsersAndExit(); |
| } else { |
| NOTREACHED(); |
| } |
| [self autorelease]; |
| } |
| |
| @end |
| |
| namespace restart_browser { |
| |
| void RequestRestart(NSWindow* parent) { |
| NSString* title = |
| l10n_util::GetNSStringFWithFixup(IDS_PLEASE_RELAUNCH_BROWSER, |
| l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
| NSString* text = |
| l10n_util::GetNSStringFWithFixup(IDS_UPDATE_RECOMMENDED, |
| l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); |
| NSString* notNowButtin = l10n_util::GetNSStringWithFixup(IDS_NOT_NOW); |
| NSString* restartButton = |
| l10n_util::GetNSStringWithFixup(IDS_RELAUNCH_AND_UPDATE); |
| |
| RestartHelper* helper = [[RestartHelper alloc] init]; |
| |
| NSAlert* alert = [helper alert]; |
| [alert setAlertStyle:NSInformationalAlertStyle]; |
| [alert setMessageText:title]; |
| [alert setInformativeText:text]; |
| [alert addButtonWithTitle:notNowButtin]; |
| [alert addButtonWithTitle:restartButton]; |
| |
| if (parent) { |
| [alert beginSheetModalForWindow:parent |
| modalDelegate:helper |
| didEndSelector:@selector(alertDidEnd: |
| returnCode: |
| contextInfo:) |
| contextInfo:nil]; |
| } else { |
| NSInteger returnCode = [alert runModal]; |
| [helper alertDidEnd:alert |
| returnCode:returnCode |
| contextInfo:NULL]; |
| } |
| } |
| |
| } // namespace restart_browser |