File: tab_modal_confirm_dialog_delegate.h

package info (click to toggle)
chromium 138.0.7204.157-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,864 kB
  • sloc: cpp: 34,936,859; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,967; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (147 lines) | stat: -rw-r--r-- 5,456 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_UI_TAB_MODAL_CONFIRM_DIALOG_DELEGATE_H_
#define CHROME_BROWSER_UI_TAB_MODAL_CONFIRM_DIALOG_DELEGATE_H_

#include <optional>
#include <string>

#include "base/functional/callback.h"
#include "base/memory/raw_ptr.h"
#include "content/public/browser/web_contents_observer.h"
#include "ui/base/window_open_disposition.h"

namespace content {
class WebContents;
}

namespace gfx {
class Image;
}

class TabModalConfirmDialogCloseDelegate {
 public:
  TabModalConfirmDialogCloseDelegate() = default;

  TabModalConfirmDialogCloseDelegate(
      const TabModalConfirmDialogCloseDelegate&) = delete;
  TabModalConfirmDialogCloseDelegate& operator=(
      const TabModalConfirmDialogCloseDelegate&) = delete;

  virtual ~TabModalConfirmDialogCloseDelegate() = default;

  virtual void CloseDialog() = 0;
};

// This class acts as the delegate for a simple tab-modal dialog confirming
// whether the user wants to execute a certain action.
class TabModalConfirmDialogDelegate : public content::WebContentsObserver {
 public:
  explicit TabModalConfirmDialogDelegate(content::WebContents* web_contents);

  TabModalConfirmDialogDelegate(const TabModalConfirmDialogDelegate&) = delete;
  TabModalConfirmDialogDelegate& operator=(
      const TabModalConfirmDialogDelegate&) = delete;

  ~TabModalConfirmDialogDelegate() override;

  void set_close_delegate(TabModalConfirmDialogCloseDelegate* close_delegate) {
    close_delegate_ = close_delegate;
  }

  // Accepts the confirmation prompt and calls OnAccepted() if no other call
  // to Accept(), Cancel() or Close() has been made before.
  // This method is safe to call even from an OnAccepted(), OnCanceled(),
  // OnClosed() or OnLinkClicked() callback.
  void Accept();

  // Cancels the confirmation prompt and calls OnCanceled() if no other call
  // to Accept(), Cancel() or Close() has been made before.
  // This method is safe to call even from an OnAccepted(), OnCanceled(),
  // OnClosed() or OnLinkClicked() callback.
  void Cancel();

  // Called when the dialog is closed without selecting an option, e.g. by
  // pressing the close button on the dialog, using a window manager gesture,
  // closing the parent tab or navigating in the parent tab.
  // Calls OnClosed() and closes the dialog if no other call to Accept(),
  // Cancel() or Close() has been made before.
  // This method is safe to call even from an OnAccepted(), OnCanceled(),
  // OnClosed() or OnLinkClicked() callback.
  void Close();

  // Called when the link is clicked. Calls OnLinkClicked() if the dialog is
  // not in the process of closing. The |disposition| specifies how the
  // resulting document should be loaded (based on the event flags present when
  // the link was clicked).
  void LinkClicked(WindowOpenDisposition disposition);

  // The title of the dialog. Note that the title is not shown on all platforms.
  virtual std::u16string GetTitle() = 0;
  virtual std::u16string GetDialogMessage() = 0;

  // Icon to show for the dialog. If this method is not overridden, a default
  // icon (like the application icon) is shown.
  virtual gfx::Image* GetIcon();

  // Title for the accept and the cancel buttons.
  // The default implementation uses IDS_OK and IDS_CANCEL.
  virtual int GetDialogButtons() const;
  virtual std::u16string GetAcceptButtonTitle();
  virtual std::u16string GetCancelButtonTitle();

  // Returns the text of the link to be displayed, if any. Otherwise returns
  // an empty string.
  virtual std::u16string GetLinkText() const;

  // GTK stock icon names for the accept and cancel buttons, respectively.
  // The icons are only used on GTK. If these methods are not overriden,
  // the buttons have no stock icons.
  virtual const char* GetAcceptButtonIcon();
  virtual const char* GetCancelButtonIcon();

  // Allow the delegate to customize which button is default, and which is
  // initially focused. If returning std::nullopt, the dialog uses default
  // behavior.
  virtual std::optional<int> GetDefaultDialogButton();
  virtual std::optional<int> GetInitiallyFocusedButton();

  // content::WebContentObserver:
  void DidStartLoading() override;

 protected:
  TabModalConfirmDialogCloseDelegate* close_delegate() {
    return close_delegate_;
  }

 private:
  // It is guaranteed that exactly one of OnAccepted(), OnCanceled() or
  // OnClosed() is eventually called. These method are private to enforce this
  // guarantee. Access to them is controlled by Accept(), Cancel() and Close().

  // Called when the user accepts or cancels the dialog, respectively.
  virtual void OnAccepted();
  virtual void OnCanceled();

  // Called when the dialog is closed.
  virtual void OnClosed();

  // Called when the link is clicked. Acces to the method is controlled by
  // LinkClicked(), which checks that the dialog is not in the process of
  // closing. It's correct to close the dialog by calling Accept(), Cancel()
  // or Close() from this callback.
  virtual void OnLinkClicked(WindowOpenDisposition disposition);

  // Close the dialog.
  void CloseDialog();

  raw_ptr<TabModalConfirmDialogCloseDelegate> close_delegate_;

  // True iff we are in the process of closing, to avoid running callbacks
  // multiple times.
  bool closing_;
};

#endif  // CHROME_BROWSER_UI_TAB_MODAL_CONFIRM_DIALOG_DELEGATE_H_