1// Copyright 2014 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 COMPONENTS_WEB_MODAL_SINGLE_WEB_CONTENTS_DIALOG_MANAGER_H_
6#define COMPONENTS_WEB_MODAL_SINGLE_WEB_CONTENTS_DIALOG_MANAGER_H_
7
8#include "components/web_modal/native_web_contents_modal_dialog.h"
9
10namespace content {
11class WebContents;
12}  // namespace content
13
14namespace web_modal {
15
16class WebContentsModalDialogHost;
17
18// Interface from SingleWebContentsDialogManager to
19// WebContentsModalDialogManager.
20class SingleWebContentsDialogManagerDelegate {
21 public:
22  SingleWebContentsDialogManagerDelegate() {}
23  virtual ~SingleWebContentsDialogManagerDelegate() {}
24
25  virtual content::WebContents* GetWebContents() const = 0;
26
27  // Notify the delegate that the dialog is closing. The native
28  // manager will be deleted before the end of this call.
29  virtual void WillClose(NativeWebContentsModalDialog dialog) = 0;
30
31 private:
32  DISALLOW_COPY_AND_ASSIGN(SingleWebContentsDialogManagerDelegate);
33};
34
35// Provides an interface for platform-specific UI implementation for the web
36// contents modal dialog. Each object will manage a single
37// NativeWebContentsModalDialog during its lifecycle.
38//
39// Implementation classes should accept a NativeWebContentsModalDialog at
40// construction time and register to be notified when the dialog is closing,
41// so that it can notify its delegate (WillClose method).
42class SingleWebContentsDialogManager {
43 public:
44  virtual ~SingleWebContentsDialogManager() {}
45
46  // Makes the web contents modal dialog visible. Only one web contents modal
47  // dialog is shown at a time per tab.
48  virtual void Show() = 0;
49
50  // Hides the web contents modal dialog without closing it.
51  virtual void Hide() = 0;
52
53  // Closes the web contents modal dialog.
54  // If this method causes a WillClose() call to the delegate, the manager
55  // will be deleted at the close of that invocation.
56  virtual void Close() = 0;
57
58  // Sets focus on the web contents modal dialog.
59  virtual void Focus() = 0;
60
61  // Runs a pulse animation for the web contents modal dialog.
62  virtual void Pulse() = 0;
63
64  // Called when the host view for the dialog has changed.
65  virtual void HostChanged(WebContentsModalDialogHost* new_host) = 0;
66
67  // Return the dialog under management by this object.
68  virtual NativeWebContentsModalDialog dialog() = 0;
69
70 protected:
71  SingleWebContentsDialogManager() {}
72
73 private:
74  DISALLOW_COPY_AND_ASSIGN(SingleWebContentsDialogManager);
75};
76
77}  // namespace web_modal
78
79#endif  // COMPONENTS_WEB_MODAL_SINGLE_WEB_CONTENTS_DIALOG_MANAGER_H_
80