diff options
Diffstat (limited to 'chrome/browser/cocoa/js_modal_dialog_cocoa.mm')
-rw-r--r-- | chrome/browser/cocoa/js_modal_dialog_cocoa.mm | 219 |
1 files changed, 0 insertions, 219 deletions
diff --git a/chrome/browser/cocoa/js_modal_dialog_cocoa.mm b/chrome/browser/cocoa/js_modal_dialog_cocoa.mm deleted file mode 100644 index ff1d349..0000000 --- a/chrome/browser/cocoa/js_modal_dialog_cocoa.mm +++ /dev/null @@ -1,219 +0,0 @@ -// Copyright (c) 2010 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. - -#include "chrome/browser/cocoa/js_modal_dialog_cocoa.h" - -#import <Cocoa/Cocoa.h> - -#include "app/l10n_util_mac.h" -#include "app/message_box_flags.h" -#import "base/cocoa_protocols_mac.h" -#include "base/logging.h" -#include "base/sys_string_conversions.h" -#import "chrome/browser/chrome_browser_application_mac.h" -#include "chrome/browser/js_modal_dialog.h" -#include "grit/app_strings.h" -#include "grit/generated_resources.h" - -// Helper object that receives the notification that the dialog/sheet is -// going away. Is responsible for cleaning itself up. -@interface JavaScriptAppModalDialogHelper : NSObject<NSAlertDelegate> { - @private - NSAlert* alert_; - NSTextField* textField_; // WEAK; owned by alert_ -} - -- (NSAlert*)alert; -- (NSTextField*)textField; -- (void)alertDidEnd:(NSAlert *)alert - returnCode:(int)returnCode - contextInfo:(void*)contextInfo; - -@end - -@implementation JavaScriptAppModalDialogHelper - -- (NSAlert*)alert { - alert_ = [[NSAlert alloc] init]; - return alert_; -} - -- (NSTextField*)textField { - textField_ = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 300, 22)]; - [alert_ setAccessoryView:textField_]; - [textField_ release]; - - return textField_; -} - -- (void)dealloc { - [alert_ release]; - [super dealloc]; -} - -// |contextInfo| is the JSModalDialogCocoa that owns us. -- (void)alertDidEnd:(NSAlert*)alert - returnCode:(int)returnCode - contextInfo:(void*)contextInfo { - scoped_ptr<JSModalDialogCocoa> native_dialog( - reinterpret_cast<JSModalDialogCocoa*>(contextInfo)); - std::wstring input; - if (textField_) - input = base::SysNSStringToWide([textField_ stringValue]); - bool shouldSuppress = false; - if ([alert showsSuppressionButton]) - shouldSuppress = [[alert suppressionButton] state] == NSOnState; - switch (returnCode) { - case NSAlertFirstButtonReturn: { // OK - native_dialog->dialog()->OnAccept(input, shouldSuppress); - break; - } - case NSAlertSecondButtonReturn: { // Cancel - // If the user wants to stay on this page, stop quitting (if a quit is in - // progress). - if (native_dialog->dialog()->is_before_unload_dialog()) - chrome_browser_application_mac::CancelTerminate(); - native_dialog->dialog()->OnCancel(shouldSuppress); - break; - } - case NSRunStoppedResponse: { // Window was closed underneath us - // Need to call OnCancel() because there is some cleanup that needs - // to be done. It won't call back to the javascript since the - // JavaScriptAppModalDialog knows that the TabContents was destroyed. - native_dialog->dialog()->OnCancel(shouldSuppress); - break; - } - default: { - NOTREACHED(); - } - } -} -@end - -//////////////////////////////////////////////////////////////////////////////// -// JSModalDialogCocoa, public: - -JSModalDialogCocoa::JSModalDialogCocoa(JavaScriptAppModalDialog* dialog) - : dialog_(dialog), - helper_(NULL) { - // Determine the names of the dialog buttons based on the flags. "Default" - // is the OK button. "Other" is the cancel button. We don't use the - // "Alternate" button in NSRunAlertPanel. - NSString* default_button = l10n_util::GetNSStringWithFixup(IDS_APP_OK); - NSString* other_button = l10n_util::GetNSStringWithFixup(IDS_APP_CANCEL); - bool text_field = false; - bool one_button = false; - switch (dialog_->dialog_flags()) { - case MessageBoxFlags::kIsJavascriptAlert: - one_button = true; - break; - case MessageBoxFlags::kIsJavascriptConfirm: - if (dialog_->is_before_unload_dialog()) { - default_button = l10n_util::GetNSStringWithFixup( - IDS_BEFOREUNLOAD_MESSAGEBOX_OK_BUTTON_LABEL); - other_button = l10n_util::GetNSStringWithFixup( - IDS_BEFOREUNLOAD_MESSAGEBOX_CANCEL_BUTTON_LABEL); - } - break; - case MessageBoxFlags::kIsJavascriptPrompt: - text_field = true; - break; - - default: - NOTREACHED(); - } - - // Create a helper which will receive the sheet ended selector. It will - // delete itself when done. It doesn't need anything passed to its init - // as it will get a contextInfo parameter. - helper_.reset([[JavaScriptAppModalDialogHelper alloc] init]); - - // Show the modal dialog. - alert_ = [helper_ alert]; - NSTextField* field = nil; - if (text_field) { - field = [helper_ textField]; - [field setStringValue:base::SysWideToNSString( - dialog_->default_prompt_text())]; - } - [alert_ setDelegate:helper_]; - [alert_ setInformativeText:base::SysWideToNSString(dialog_->message_text())]; - [alert_ setMessageText:base::SysWideToNSString(dialog_->title())]; - [alert_ addButtonWithTitle:default_button]; - if (!one_button) { - NSButton* other = [alert_ addButtonWithTitle:other_button]; - [other setKeyEquivalent:@"\e"]; - } - if (dialog_->display_suppress_checkbox()) { - [alert_ setShowsSuppressionButton:YES]; - NSString* suppression_title = l10n_util::GetNSStringWithFixup( - IDS_JAVASCRIPT_MESSAGEBOX_SUPPRESS_OPTION); - [[alert_ suppressionButton] setTitle:suppression_title]; - } -} - -JSModalDialogCocoa::~JSModalDialogCocoa() { -} - -//////////////////////////////////////////////////////////////////////////////// -// JSModalDialogCocoa, NativeAppModalDialog implementation: - -int JSModalDialogCocoa::GetAppModalDialogButtons() const { - // From the above, it is the case that if there is 1 button, it is always the - // OK button. The second button, if it exists, is always the Cancel button. - int num_buttons = [[alert_ buttons] count]; - switch (num_buttons) { - case 1: - return MessageBoxFlags::DIALOGBUTTON_OK; - case 2: - return MessageBoxFlags::DIALOGBUTTON_OK | - MessageBoxFlags::DIALOGBUTTON_CANCEL; - default: - NOTREACHED(); - return 0; - } -} - -void JSModalDialogCocoa::ShowAppModalDialog() { - [alert_ - beginSheetModalForWindow:nil // nil here makes it app-modal - modalDelegate:helper_.get() - didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) - contextInfo:this]; - - if ([alert_ accessoryView]) - [[alert_ window] makeFirstResponder:[alert_ accessoryView]]; -} - -void JSModalDialogCocoa::ActivateAppModalDialog() { -} - -void JSModalDialogCocoa::CloseAppModalDialog() { - DCHECK([alert_ isKindOfClass:[NSAlert class]]); - - // Note: the call below will delete |this|, - // see JavaScriptAppModalDialogHelper's alertDidEnd. - [NSApp endSheet:[alert_ window]]; -} - -void JSModalDialogCocoa::AcceptAppModalDialog() { - NSButton* first = [[alert_ buttons] objectAtIndex:0]; - [first performClick:nil]; -} - -void JSModalDialogCocoa::CancelAppModalDialog() { - DCHECK([[alert_ buttons] count] >= 2); - NSButton* second = [[alert_ buttons] objectAtIndex:1]; - [second performClick:nil]; -} - -//////////////////////////////////////////////////////////////////////////////// -// NativeAppModalDialog, public: - -// static -NativeAppModalDialog* NativeAppModalDialog::CreateNativeJavaScriptPrompt( - JavaScriptAppModalDialog* dialog, - gfx::NativeWindow parent_window) { - return new JSModalDialogCocoa(dialog); -} |