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_
|