Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / autofill / autofill_dialog_cocoa.mm
1 // Copyright (c) 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 #include "chrome/browser/ui/cocoa/autofill/autofill_dialog_cocoa.h"
6
7 #include "base/bind.h"
8 #include "base/mac/scoped_nsobject.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/strings/sys_string_conversions.h"
11 #include "chrome/browser/ui/autofill/autofill_dialog_view_delegate.h"
12 #import "chrome/browser/ui/cocoa/autofill/autofill_details_container.h"
13 #import "chrome/browser/ui/cocoa/autofill/autofill_dialog_window_controller.h"
14 #import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sheet.h"
15
16 namespace autofill {
17
18 // static
19 AutofillDialogView* AutofillDialogView::Create(
20     AutofillDialogViewDelegate* delegate) {
21   return new AutofillDialogCocoa(delegate);
22 }
23
24 AutofillDialogCocoa::AutofillDialogCocoa(AutofillDialogViewDelegate* delegate)
25     : delegate_(delegate),
26       close_weak_ptr_factory_(this) {
27 }
28
29 AutofillDialogCocoa::~AutofillDialogCocoa() {
30 }
31
32 void AutofillDialogCocoa::Show() {
33   // This should only be called once.
34   DCHECK(!sheet_delegate_.get());
35   sheet_delegate_.reset([[AutofillDialogWindowController alloc]
36        initWithWebContents:delegate_->GetWebContents()
37                     dialog:this]);
38   base::scoped_nsobject<CustomConstrainedWindowSheet> sheet(
39       [[CustomConstrainedWindowSheet alloc]
40           initWithCustomWindow:[sheet_delegate_ window]]);
41   constrained_window_.reset(
42       new ConstrainedWindowMac(this, delegate_->GetWebContents(), sheet));
43   [sheet_delegate_ show];
44 }
45
46 void AutofillDialogCocoa::Hide() {
47   [sheet_delegate_ hide];
48 }
49
50 void AutofillDialogCocoa::PerformClose() {
51   if (!close_weak_ptr_factory_.HasWeakPtrs()) {
52     base::MessageLoop::current()->PostTask(
53         FROM_HERE,
54         base::Bind(&AutofillDialogCocoa::CloseNow,
55                    close_weak_ptr_factory_.GetWeakPtr()));
56   }
57 }
58
59 void AutofillDialogCocoa::CloseNow() {
60   constrained_window_->CloseWebContentsModalDialog();
61 }
62
63 void AutofillDialogCocoa::UpdatesStarted() {
64 }
65
66 void AutofillDialogCocoa::UpdatesFinished() {
67 }
68
69 void AutofillDialogCocoa::UpdateAccountChooser() {
70   [sheet_delegate_ updateAccountChooser];
71 }
72
73 void AutofillDialogCocoa::UpdateButtonStrip() {
74   [sheet_delegate_ updateButtonStrip];
75 }
76
77 void AutofillDialogCocoa::UpdateOverlay() {
78   // TODO(estade): only update the overlay.
79   UpdateButtonStrip();
80 }
81
82 void AutofillDialogCocoa::UpdateDetailArea() {
83 }
84
85 void AutofillDialogCocoa::UpdateForErrors() {
86   [sheet_delegate_ updateForErrors];
87 }
88
89 void AutofillDialogCocoa::UpdateNotificationArea() {
90   [sheet_delegate_ updateNotificationArea];
91 }
92
93 void AutofillDialogCocoa::UpdateSection(DialogSection section) {
94   [sheet_delegate_ updateSection:section];
95 }
96
97 void AutofillDialogCocoa::FillSection(DialogSection section,
98                                       ServerFieldType originating_type) {
99   [sheet_delegate_ fillSection:section forType:originating_type];
100 }
101
102 void AutofillDialogCocoa::GetUserInput(DialogSection section,
103                                        FieldValueMap* output) {
104   [sheet_delegate_ getInputs:output forSection:section];
105 }
106
107 base::string16 AutofillDialogCocoa::GetCvc() {
108   return base::SysNSStringToUTF16([sheet_delegate_ getCvc]);
109 }
110
111 bool AutofillDialogCocoa::SaveDetailsLocally() {
112   return [sheet_delegate_ saveDetailsLocally];
113 }
114
115 const content::NavigationController* AutofillDialogCocoa::ShowSignIn(
116     const GURL& url) {
117   return [sheet_delegate_ showSignIn:url];
118 }
119
120 void AutofillDialogCocoa::HideSignIn() {
121   [sheet_delegate_ hideSignIn];
122 }
123
124 void AutofillDialogCocoa::ModelChanged() {
125   [sheet_delegate_ modelChanged];
126 }
127
128 void AutofillDialogCocoa::UpdateErrorBubble() {
129   [sheet_delegate_ updateErrorBubble];
130 }
131
132 void AutofillDialogCocoa::OnSignInResize(const gfx::Size& pref_size) {
133   [sheet_delegate_ onSignInResize:
134       NSMakeSize(pref_size.width(), pref_size.height())];
135 }
136
137 void AutofillDialogCocoa::ValidateSection(DialogSection section) {
138   [sheet_delegate_ validateSection:section];
139 }
140
141 void AutofillDialogCocoa::OnConstrainedWindowClosed(
142     ConstrainedWindowMac* window) {
143   constrained_window_.reset();
144   // |this| belongs to |delegate_|, so no self-destruction here.
145   delegate_->ViewClosed();
146 }
147
148 }  // autofill