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#import "chrome/browser/ui/cocoa/restart_browser.h" 6 7#include "chrome/browser/browser_process.h" 8#include "chrome/browser/prefs/pref_service.h" 9#include "chrome/browser/ui/browser_list.h" 10#include "chrome/common/pref_names.h" 11#include "grit/app_strings.h" 12#include "grit/chromium_strings.h" 13#include "grit/generated_resources.h" 14#include "ui/base/l10n/l10n_util.h" 15#include "ui/base/l10n/l10n_util_mac.h" 16 17// Helper to clean up after the notification that the alert was dismissed. 18@interface RestartHelper : NSObject { 19 @private 20 NSAlert* alert_; 21} 22- (NSAlert*)alert; 23- (void)alertDidEnd:(NSAlert*)alert 24 returnCode:(int)returnCode 25 contextInfo:(void*)contextInfo; 26@end 27 28@implementation RestartHelper 29 30- (NSAlert*)alert { 31 alert_ = [[NSAlert alloc] init]; 32 return alert_; 33} 34 35- (void)dealloc { 36 [alert_ release]; 37 [super dealloc]; 38} 39 40- (void)alertDidEnd:(NSAlert*)alert 41 returnCode:(int)returnCode 42 contextInfo:(void*)contextInfo { 43 if (returnCode == NSAlertFirstButtonReturn) { 44 // Nothing to do. User will restart later. 45 } else if (returnCode == NSAlertSecondButtonReturn) { 46 // Set the flag to restore state after the restart. 47 PrefService* pref_service = g_browser_process->local_state(); 48 pref_service->SetBoolean(prefs::kRestartLastSessionOnShutdown, true); 49 BrowserList::CloseAllBrowsersAndExit(); 50 } else { 51 NOTREACHED(); 52 } 53 [self autorelease]; 54} 55 56@end 57 58namespace restart_browser { 59 60void RequestRestart(NSWindow* parent) { 61 NSString* title = 62 l10n_util::GetNSStringFWithFixup(IDS_PLEASE_RELAUNCH_BROWSER, 63 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); 64 NSString* text = 65 l10n_util::GetNSStringFWithFixup(IDS_UPDATE_RECOMMENDED, 66 l10n_util::GetStringUTF16(IDS_PRODUCT_NAME)); 67 NSString* notNowButtin = l10n_util::GetNSStringWithFixup(IDS_NOT_NOW); 68 NSString* restartButton = 69 l10n_util::GetNSStringWithFixup(IDS_RELAUNCH_AND_UPDATE); 70 71 RestartHelper* helper = [[RestartHelper alloc] init]; 72 73 NSAlert* alert = [helper alert]; 74 [alert setAlertStyle:NSInformationalAlertStyle]; 75 [alert setMessageText:title]; 76 [alert setInformativeText:text]; 77 [alert addButtonWithTitle:notNowButtin]; 78 [alert addButtonWithTitle:restartButton]; 79 80 if (parent) { 81 [alert beginSheetModalForWindow:parent 82 modalDelegate:helper 83 didEndSelector:@selector(alertDidEnd: 84 returnCode: 85 contextInfo:) 86 contextInfo:nil]; 87 } else { 88 NSInteger returnCode = [alert runModal]; 89 [helper alertDidEnd:alert 90 returnCode:returnCode 91 contextInfo:NULL]; 92 } 93} 94 95} // namespace restart_browser 96