OLD | NEW |
| (Empty) |
1 // Copyright 2013 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 <Cocoa/Cocoa.h> | |
6 | |
7 #include "base/mac/scoped_nsobject.h" | |
8 #include "base/memory/scoped_ptr.h" | |
9 #include "base/strings/sys_string_conversions.h" | |
10 #include "base/strings/utf_string_conversions.h" | |
11 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_alert.h" | |
12 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sh
eet.h" | |
13 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h" | |
14 #import "chrome/browser/ui/cocoa/key_equivalent_constants.h" | |
15 #include "chrome/grit/generated_resources.h" | |
16 #include "components/pdf/browser/pdf_web_contents_helper_client.h" | |
17 #include "ui/base/l10n/l10n_util.h" | |
18 | |
19 @class PDFPasswordDialogMac; | |
20 | |
21 namespace { | |
22 | |
23 class PDFPasswordDialogMacBridge : public ConstrainedWindowMacDelegate { | |
24 public: | |
25 explicit PDFPasswordDialogMacBridge(PDFPasswordDialogMac* dialog); | |
26 virtual ~PDFPasswordDialogMacBridge(); | |
27 void OnConstrainedWindowClosed(ConstrainedWindowMac* window) override; | |
28 | |
29 private: | |
30 PDFPasswordDialogMac* dialog_; // weak | |
31 | |
32 DISALLOW_COPY_AND_ASSIGN(PDFPasswordDialogMacBridge); | |
33 }; | |
34 | |
35 } // namespace | |
36 | |
37 @interface PDFPasswordDialogMac : NSObject { | |
38 @private | |
39 content::WebContents* webContents_; | |
40 base::string16 prompt_; | |
41 pdf::PasswordDialogClosedCallback callback_; | |
42 | |
43 base::scoped_nsobject<NSSecureTextField> passwordField_; | |
44 | |
45 base::scoped_nsobject<ConstrainedWindowAlert> alert_; | |
46 scoped_ptr<PDFPasswordDialogMacBridge> bridge_; | |
47 scoped_ptr<ConstrainedWindowMac> window_; | |
48 } | |
49 - (id)initWithWebContents:(content::WebContents*)webContents | |
50 prompt:(base::string16)prompt | |
51 callback:(pdf::PasswordDialogClosedCallback)callback; | |
52 - (void)onOKButton:(id)sender; | |
53 - (void)onCancelButton:(id)sender; | |
54 @end | |
55 | |
56 namespace { | |
57 | |
58 PDFPasswordDialogMacBridge::PDFPasswordDialogMacBridge( | |
59 PDFPasswordDialogMac* dialog) : dialog_(dialog) { | |
60 } | |
61 | |
62 PDFPasswordDialogMacBridge::~PDFPasswordDialogMacBridge() { | |
63 } | |
64 | |
65 void PDFPasswordDialogMacBridge::OnConstrainedWindowClosed( | |
66 ConstrainedWindowMac* window) { | |
67 [dialog_ release]; | |
68 } | |
69 | |
70 } // namespace | |
71 | |
72 @implementation PDFPasswordDialogMac | |
73 | |
74 - (id)initWithWebContents:(content::WebContents*)webContents | |
75 prompt:(base::string16)prompt | |
76 callback:(pdf::PasswordDialogClosedCallback)callback { | |
77 if ((self = [super init])) { | |
78 webContents_ = webContents; | |
79 prompt_ = prompt; | |
80 callback_ = callback; | |
81 | |
82 alert_.reset([[ConstrainedWindowAlert alloc] init]); | |
83 [alert_ setMessageText: | |
84 l10n_util::GetNSString(IDS_PDF_PASSWORD_DIALOG_TITLE)]; | |
85 [alert_ setInformativeText:base::SysUTF16ToNSString(prompt)]; | |
86 [alert_ addButtonWithTitle:l10n_util::GetNSString(IDS_OK) | |
87 keyEquivalent:kKeyEquivalentReturn | |
88 target:self | |
89 action:@selector(onOKButton:)]; | |
90 [alert_ addButtonWithTitle:l10n_util::GetNSString(IDS_CANCEL) | |
91 keyEquivalent:kKeyEquivalentEscape | |
92 target:self | |
93 action:@selector(onCancelButton:)]; | |
94 [[alert_ closeButton] setTarget:self]; | |
95 [[alert_ closeButton] setAction:@selector(onCancelButton:)]; | |
96 | |
97 passwordField_.reset( | |
98 [[NSSecureTextField alloc] initWithFrame:NSMakeRect(0, 0, 300, 22)]); | |
99 [alert_ setAccessoryView:passwordField_]; | |
100 | |
101 [alert_ layout]; | |
102 | |
103 base::scoped_nsobject<CustomConstrainedWindowSheet> sheet( | |
104 [[CustomConstrainedWindowSheet alloc] | |
105 initWithCustomWindow:[alert_ window]]); | |
106 bridge_.reset(new PDFPasswordDialogMacBridge(self)); | |
107 window_.reset(new ConstrainedWindowMac(bridge_.get(), webContents_, sheet)); | |
108 } | |
109 return self; | |
110 } | |
111 | |
112 - (void)dealloc { | |
113 if (!callback_.is_null()) { | |
114 // This dialog was torn down without either OK or cancel being clicked; be | |
115 // considerate and at least do the callback. | |
116 callback_.Run(false, base::string16()); | |
117 } | |
118 [super dealloc]; | |
119 } | |
120 | |
121 - (void)onOKButton:(id)sender { | |
122 callback_.Run(true, base::SysNSStringToUTF16([passwordField_ stringValue])); | |
123 callback_.Reset(); | |
124 window_->CloseWebContentsModalDialog(); | |
125 } | |
126 | |
127 - (void)onCancelButton:(id)sender { | |
128 callback_.Run(false, base::string16()); | |
129 callback_.Reset(); | |
130 window_->CloseWebContentsModalDialog(); | |
131 } | |
132 | |
133 @end | |
134 | |
135 void ShowPDFPasswordDialog(content::WebContents* web_contents, | |
136 const base::string16& prompt, | |
137 const pdf::PasswordDialogClosedCallback& callback) { | |
138 [[PDFPasswordDialogMac alloc] initWithWebContents:web_contents | |
139 prompt:prompt | |
140 callback:callback]; | |
141 } | |
OLD | NEW |