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#ifndef CHROME_BROWSER_UI_COCOA_AUTOFILL_AUTOFILL_DIALOG_COCOA_H_
6#define CHROME_BROWSER_UI_COCOA_AUTOFILL_AUTOFILL_DIALOG_COCOA_H_
7
8#include "base/mac/scoped_nsobject.h"
9#include "base/memory/scoped_ptr.h"
10#include "base/memory/weak_ptr.h"
11#include "chrome/browser/ui/autofill/autofill_dialog_types.h"
12#include "chrome/browser/ui/autofill/autofill_dialog_view.h"
13#include "chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h"
14#include "ui/gfx/size.h"
15
16namespace content {
17class NavigationController;
18}
19
20namespace autofill {
21class AutofillDialogViewDelegate;
22class AutofillDialogViewTesterCocoa;
23}
24
25@class AutofillDialogWindowController;
26
27namespace autofill {
28
29class AutofillDialogCocoa : public AutofillDialogView,
30                            public ConstrainedWindowMacDelegate {
31 public:
32  explicit AutofillDialogCocoa(AutofillDialogViewDelegate* delegate);
33  virtual ~AutofillDialogCocoa();
34
35  // AutofillDialogView implementation:
36  virtual void Show() OVERRIDE;
37  virtual void Hide() OVERRIDE;
38  virtual void UpdatesStarted() OVERRIDE;
39  virtual void UpdatesFinished() OVERRIDE;
40  virtual void UpdateAccountChooser() OVERRIDE;
41  virtual void UpdateButtonStrip() OVERRIDE;
42  virtual void UpdateOverlay() OVERRIDE;
43  virtual void UpdateDetailArea() OVERRIDE;
44  virtual void UpdateForErrors() OVERRIDE;
45  virtual void UpdateNotificationArea() OVERRIDE;
46  virtual void UpdateSection(DialogSection section) OVERRIDE;
47  virtual void UpdateErrorBubble() OVERRIDE;
48  virtual void FillSection(DialogSection section,
49                           ServerFieldType originating_type) OVERRIDE;
50  virtual void GetUserInput(DialogSection section,
51                            FieldValueMap* output) OVERRIDE;
52  virtual base::string16 GetCvc() OVERRIDE;
53  virtual bool SaveDetailsLocally() OVERRIDE;
54  virtual const content::NavigationController* ShowSignIn() OVERRIDE;
55  virtual void HideSignIn() OVERRIDE;
56  virtual void ModelChanged() OVERRIDE;
57  virtual void OnSignInResize(const gfx::Size& pref_size) OVERRIDE;
58  virtual void ValidateSection(DialogSection section) OVERRIDE;
59
60  // ConstrainedWindowMacDelegate implementation:
61  virtual void OnConstrainedWindowClosed(
62      ConstrainedWindowMac* window) OVERRIDE;
63
64  AutofillDialogViewDelegate* delegate() { return delegate_; }
65
66  // Posts a close request on the current message loop.
67  void PerformClose();
68
69 private:
70  friend class AutofillDialogViewTesterCocoa;
71
72  // Closes the sheet and ends the modal loop. Triggers cleanup sequence.
73  void CloseNow();
74
75  scoped_ptr<ConstrainedWindowMac> constrained_window_;
76  base::scoped_nsobject<AutofillDialogWindowController> sheet_delegate_;
77
78  // The delegate |this| queries for logic and state.
79  AutofillDialogViewDelegate* delegate_;
80
81  // WeakPtrFactory for deferred close.
82  base::WeakPtrFactory<AutofillDialogCocoa> close_weak_ptr_factory_;
83
84};
85
86}  // autofill
87
88#endif  // CHROME_BROWSER_UI_COCOA_AUTOFILL_AUTOFILL_DIALOG_COCOA_H_
89