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 "components/web_modal/web_contents_modal_dialog_manager.h"
6
7#include "chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h"
8#include "components/web_modal/single_web_contents_dialog_manager.h"
9
10using web_modal::NativeWebContentsModalDialog;
11
12namespace {
13
14class NativeWebContentsModalDialogManagerCocoa
15    : public web_modal::SingleWebContentsDialogManager {
16 public:
17  NativeWebContentsModalDialogManagerCocoa(
18      NativeWebContentsModalDialog dialog)
19      : dialog_(dialog) {
20  }
21
22  virtual ~NativeWebContentsModalDialogManagerCocoa() {
23  }
24
25  // SingleWebContentsDialogManager overrides
26  virtual void Show() OVERRIDE {
27    GetConstrainedWindowMac(dialog())->ShowWebContentsModalDialog();
28  }
29
30  virtual void Hide() OVERRIDE {
31  }
32
33  virtual void Close() OVERRIDE {
34    GetConstrainedWindowMac(dialog())->CloseWebContentsModalDialog();
35  }
36
37  virtual void Focus() OVERRIDE {
38    GetConstrainedWindowMac(dialog())->FocusWebContentsModalDialog();
39  }
40
41  virtual void Pulse() OVERRIDE {
42    GetConstrainedWindowMac(dialog())->PulseWebContentsModalDialog();
43  }
44
45  virtual void HostChanged(
46      web_modal::WebContentsModalDialogHost* new_host) OVERRIDE {
47  }
48
49  virtual NativeWebContentsModalDialog dialog() OVERRIDE {
50    return dialog_;
51  }
52
53 private:
54  static ConstrainedWindowMac* GetConstrainedWindowMac(
55      NativeWebContentsModalDialog dialog) {
56    return static_cast<ConstrainedWindowMac*>(dialog);
57  }
58
59  // In mac this is a pointer to a ConstrainedWindowMac.
60  // TODO(gbillock): Replace this casting system with a more typesafe call path.
61  NativeWebContentsModalDialog dialog_;
62
63  DISALLOW_COPY_AND_ASSIGN(NativeWebContentsModalDialogManagerCocoa);
64};
65
66}  // namespace
67
68namespace web_modal {
69
70SingleWebContentsDialogManager*
71    WebContentsModalDialogManager::CreateNativeWebModalManager(
72        NativeWebContentsModalDialog dialog,
73        SingleWebContentsDialogManagerDelegate* native_delegate) {
74  return new NativeWebContentsModalDialogManagerCocoa(dialog);
75}
76
77}  // namespace web_modal
78