0

Use a virtual base class to provide GetWidget().

This addresses issues with:
* Failure to override both GetWidget() variants
* Having to override just to specify which base class provides the
  implementation

Bug: none
Change-Id: I87ec1f524d876e4488135ecbcff54aa9591e4e47
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1996948
Commit-Queue: Peter Kasting <pkasting@chromium.org>
Reviewed-by: Scott Violet <sky@chromium.org>
Reviewed-by: Allen Bauer <kylixrd@chromium.org>
Cr-Commit-Position: refs/heads/master@{#730791}
This commit is contained in:
Peter Kasting
2020-01-13 20:43:43 +00:00
committed by Commit Bot
parent f765bb1cee
commit b653a4a87f
84 changed files with 270 additions and 369 deletions
ash
chrome/browser
components
extensions/components/native_app_window
remoting/host/chromeos
ui

@ -46,10 +46,11 @@ class PanedWidgetDelegate : public views::WidgetDelegate {
std::copy(accessible_panes_.begin(), accessible_panes_.end(),
std::back_inserter(*panes));
}
views::Widget* GetWidget() override { return widget_; }
const views::Widget* GetWidget() const override { return widget_; }
private:
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override { return widget_; }
views::Widget* widget_;
std::vector<views::View*> accessible_panes_;
};

@ -21,14 +21,15 @@ class TestWindowDelegate : public views::WidgetDelegate {
// views::WidgetDelegate:
void DeleteDelegate() override { delete this; }
views::Widget* GetWidget() override { return widget_; }
const views::Widget* GetWidget() const override { return widget_; }
bool CanActivate() const override { return false; }
bool CanResize() const override { return true; }
bool CanMaximize() const override { return true; }
bool ShouldAdvanceFocusToTopLevelWidget() const override { return true; }
private:
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override { return widget_; }
views::Widget* widget_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(TestWindowDelegate);

@ -29,12 +29,13 @@ class LoginTestBase::WidgetDelegate : public views::WidgetDelegate {
// views::WidgetDelegate:
void DeleteDelegate() override { delete this; }
views::View* GetInitiallyFocusedView() override { return content_; }
views::Widget* GetWidget() override { return content_->GetWidget(); }
const views::Widget* GetWidget() const override {
private:
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override {
return content_->GetWidget();
}
private:
views::View* content_;
DISALLOW_COPY_AND_ASSIGN(WidgetDelegate);

@ -22,11 +22,12 @@ class LockScreenWidgetDelegate : public views::WidgetDelegate {
views::View* GetInitiallyFocusedView() override {
return widget_->GetContentsView();
}
views::Widget* GetWidget() override { return widget_; }
const views::Widget* GetWidget() const override { return widget_; }
void DeleteDelegate() override { delete this; }
private:
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override { return widget_; }
views::Widget* widget_;
DISALLOW_COPY_AND_ASSIGN(LockScreenWidgetDelegate);

@ -90,8 +90,6 @@ class ShelfNavigationWidget::Delegate : public views::AccessiblePaneView,
// views::WidgetDelegate:
bool CanActivate() const override;
views::Widget* GetWidget() override { return View::GetWidget(); }
const views::Widget* GetWidget() const override { return View::GetWidget(); }
BackButton* back_button() const { return back_button_; }
HomeButton* home_button() const { return home_button_; }

@ -111,8 +111,6 @@ class ShelfWidget::DelegateView : public views::WidgetDelegate,
// views::WidgetDelegate:
void DeleteDelegate() override { delete this; }
views::Widget* GetWidget() override { return View::GetWidget(); }
const views::Widget* GetWidget() const override { return View::GetWidget(); }
bool CanActivate() const override;
void ReorderChildLayers(ui::Layer* parent_layer) override;

@ -135,14 +135,6 @@ const char* StatusAreaWidgetDelegate::GetClassName() const {
return "ash/StatusAreaWidgetDelegate";
}
views::Widget* StatusAreaWidgetDelegate::GetWidget() {
return View::GetWidget();
}
const views::Widget* StatusAreaWidgetDelegate::GetWidget() const {
return View::GetWidget();
}
void StatusAreaWidgetDelegate::OnGestureEvent(ui::GestureEvent* event) {
views::Widget* target_widget =
static_cast<views::View*>(event->target())->GetWidget();

@ -44,8 +44,6 @@ class ASH_EXPORT StatusAreaWidgetDelegate : public views::AccessiblePaneView,
// views::AccessiblePaneView:
View* GetDefaultFocusableChild() override;
const char* GetClassName() const override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
// ui::EventHandler:
void OnGestureEvent(ui::GestureEvent* event) override;

@ -53,8 +53,6 @@ class TestWindowDelegate : public views::WidgetDelegate {
// views::WidgetDelegate:
void DeleteDelegate() override { delete this; }
views::Widget* GetWidget() override { return widget_; }
const views::Widget* GetWidget() const override { return widget_; }
bool CanActivate() const override { return true; }
bool CanResize() const override { return true; }
bool CanMaximize() const override { return true; }
@ -63,6 +61,9 @@ class TestWindowDelegate : public views::WidgetDelegate {
void set_widget(views::Widget* widget) { widget_ = widget; }
private:
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override { return widget_; }
views::Widget* widget_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(TestWindowDelegate);

@ -35,12 +35,13 @@ class LoginTestWidgetDelegate : public views::WidgetDelegate {
// views::WidgetDelegate:
void DeleteDelegate() override { delete this; }
views::Widget* GetWidget() override { return widget_; }
const views::Widget* GetWidget() const override { return widget_; }
bool CanActivate() const override { return true; }
bool ShouldAdvanceFocusToTopLevelWidget() const override { return true; }
private:
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override { return widget_; }
views::Widget* widget_;
DISALLOW_COPY_AND_ASSIGN(LoginTestWidgetDelegate);

@ -4511,8 +4511,6 @@ class TestWindowDelegateWithWidget : public views::WidgetDelegate {
// views::WidgetDelegate:
void DeleteDelegate() override { delete this; }
views::Widget* GetWidget() override { return widget_; }
const views::Widget* GetWidget() const override { return widget_; }
bool CanActivate() const override { return true; }
bool CanResize() const override { return can_resize_; }
bool CanMaximize() const override { return true; }
@ -4521,6 +4519,9 @@ class TestWindowDelegateWithWidget : public views::WidgetDelegate {
void set_widget(views::Widget* widget) { widget_ = widget; }
private:
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override { return widget_; }
bool can_resize_;
views::Widget* widget_ = nullptr;

@ -82,14 +82,6 @@ void AccessibilityPanel::Close() {
widget_->Close();
}
const views::Widget* AccessibilityPanel::GetWidget() const {
return widget_;
}
views::Widget* AccessibilityPanel::GetWidget() {
return widget_;
}
content::WebContents* AccessibilityPanel::GetWebContents() {
return web_contents_;
}
@ -102,6 +94,10 @@ views::View* AccessibilityPanel::GetContentsView() {
return web_view_;
}
const views::Widget* AccessibilityPanel::GetWidgetImpl() const {
return widget_;
}
bool AccessibilityPanel::HandleContextMenu(
content::RenderFrameHost* render_frame_host,
const content::ContextMenuParams& params) {

@ -38,8 +38,6 @@ class AccessibilityPanel : public views::WidgetDelegate,
void Close();
// WidgetDelegate:
const views::Widget* GetWidget() const override;
views::Widget* GetWidget() override;
void DeleteDelegate() override;
views::View* GetContentsView() override;
@ -50,6 +48,9 @@ class AccessibilityPanel : public views::WidgetDelegate,
private:
class AccessibilityPanelWebContentsObserver;
// WidgetDelegate:
const views::Widget* GetWidgetImpl() const override;
// content::WebContentsDelegate:
bool HandleContextMenu(content::RenderFrameHost* render_frame_host,
const content::ContextMenuParams& params) override;

@ -111,10 +111,6 @@ views::View* ExternalProtocolDialog::GetContentsView() {
return message_box_view_;
}
const views::Widget* ExternalProtocolDialog::GetWidget() const {
return message_box_view_->GetWidget();
}
views::Widget* ExternalProtocolDialog::GetWidget() {
const views::Widget* ExternalProtocolDialog::GetWidgetImpl() const {
return message_box_view_->GetWidget();
}

@ -35,10 +35,11 @@ class ExternalProtocolDialog : public views::DialogDelegate {
base::string16 GetWindowTitle() const override;
void DeleteDelegate() override;
views::View* GetContentsView() override;
const views::Widget* GetWidget() const override;
views::Widget* GetWidget() override;
private:
// views::DialogDelegate:
const views::Widget* GetWidgetImpl() const override;
// The message box view whose commands we handle.
views::MessageBoxView* message_box_view_;

@ -80,14 +80,6 @@ views::View* DeepScanningDialogViews::GetContentsView() {
return contents_view_.get();
}
views::Widget* DeepScanningDialogViews::GetWidget() {
return contents_view_->GetWidget();
}
const views::Widget* DeepScanningDialogViews::GetWidget() const {
return contents_view_->GetWidget();
}
void DeepScanningDialogViews::DeleteDelegate() {
delete this;
}
@ -126,6 +118,10 @@ void DeepScanningDialogViews::ShowResult(bool success) {
DeepScanningDialogViews::~DeepScanningDialogViews() = default;
const views::Widget* DeepScanningDialogViews::GetWidgetImpl() const {
return contents_view_->GetWidget();
}
void DeepScanningDialogViews::UpdateDialog() {
DCHECK(shown_);
DCHECK(scan_success_.has_value());

@ -38,8 +38,6 @@ class DeepScanningDialogViews : public views::DialogDelegate {
bool Cancel() override;
bool ShouldShowCloseButton() const override;
views::View* GetContentsView() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
void DeleteDelegate() override;
ui::ModalType GetModalType() const override;
@ -50,6 +48,9 @@ class DeepScanningDialogViews : public views::DialogDelegate {
private:
~DeepScanningDialogViews() override;
// views::DialogDelegate:
const views::Widget* GetWidgetImpl() const override;
// Update the UI depending on |scan_success_|.
void UpdateDialog();

@ -78,8 +78,6 @@ class ConstrainedDialogWebView : public views::WebView,
// views::WidgetDelegate:
views::View* GetInitiallyFocusedView() override;
void WindowClosing() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
base::string16 GetWindowTitle() const override;
base::string16 GetAccessibleWindowTitle() const override;
views::View* GetContentsView() override;
@ -288,14 +286,6 @@ void ConstrainedDialogWebView::WindowClosing() {
GetWebDialogDelegate()->OnDialogClosed(std::string());
}
views::Widget* ConstrainedDialogWebView::GetWidget() {
return View::GetWidget();
}
const views::Widget* ConstrainedDialogWebView::GetWidget() const {
return View::GetWidget();
}
base::string16 ConstrainedDialogWebView::GetWindowTitle() const {
return impl_->closed_via_webui() ? base::string16()
: GetWebDialogDelegate()->GetDialogTitle();

@ -239,10 +239,6 @@ void DropdownBarHost::GetWidgetBounds(gfx::Rect* bounds) {
*bounds = browser_view_->bounds();
}
views::Widget* DropdownBarHost::GetWidget() {
return host_.get();
}
const views::Widget* DropdownBarHost::GetWidget() const {
const views::Widget* DropdownBarHost::GetWidgetImpl() const {
return host_.get();
}

@ -140,10 +140,6 @@ class DropdownBarHost : public ui::AcceleratorTarget,
return animation_.get();
}
// views::WidgetDelegate:
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
private:
// Set the view whose position in the |browser_view_| view hierarchy
// determines the z-order of |host_| relative to views with layers and
@ -152,6 +148,9 @@ class DropdownBarHost : public ui::AcceleratorTarget,
// Implemented in platform-specific files.
void SetHostViewNative(views::View* host_view);
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override;
// The BrowserView that created us.
BrowserView* browser_view_;

@ -100,18 +100,14 @@ views::View* ChooserDialogView::GetContentsView() {
return device_chooser_content_view_;
}
views::Widget* ChooserDialogView::GetWidget() {
return device_chooser_content_view_->GetWidget();
}
const views::Widget* ChooserDialogView::GetWidget() const {
return device_chooser_content_view_->GetWidget();
}
void ChooserDialogView::OnSelectionChanged() {
DialogModelChanged();
}
const views::Widget* ChooserDialogView::GetWidgetImpl() const {
return device_chooser_content_view_->GetWidget();
}
void ChromeExtensionChooserDialog::ShowDialogImpl(
std::unique_ptr<ChooserController> chooser_controller) const {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);

@ -37,8 +37,6 @@ class ChooserDialogView : public views::DialogDelegateView,
// views::DialogDelegateView:
views::View* GetContentsView() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
// views::TableViewObserver:
void OnSelectionChanged() override;
@ -48,6 +46,9 @@ class ChooserDialogView : public views::DialogDelegateView,
}
private:
// views::DialogDelegateView:
const views::Widget* GetWidgetImpl() const override;
DeviceChooserContentView* device_chooser_content_view_;
DISALLOW_COPY_AND_ASSIGN(ChooserDialogView);

@ -131,14 +131,6 @@ void ExtensionDialog::DeleteDelegate() {
Release();
}
views::Widget* ExtensionDialog::GetWidget() {
return GetExtensionView()->GetWidget();
}
const views::Widget* ExtensionDialog::GetWidget() const {
return GetExtensionView()->GetWidget();
}
views::View* ExtensionDialog::GetContentsView() {
return GetExtensionView();
}
@ -244,3 +236,7 @@ ExtensionViewViews* ExtensionDialog::GetExtensionView(
extensions::ExtensionViewHost* host) {
return static_cast<ExtensionViewViews*>(host->view());
}
const views::Widget* ExtensionDialog::GetWidgetImpl() const {
return GetExtensionView()->GetWidget();
}

@ -75,8 +75,6 @@ class ExtensionDialog : public views::DialogDelegate,
base::string16 GetWindowTitle() const override;
void WindowClosing() override;
void DeleteDelegate() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
views::View* GetContentsView() override;
// content::NotificationObserver:
@ -105,6 +103,9 @@ class ExtensionDialog : public views::DialogDelegate,
static ExtensionViewViews* GetExtensionView(
extensions::ExtensionViewHost* host);
// views::DialogDelegate:
const views::Widget* GetWidgetImpl() const override;
// Window Title
base::string16 window_title_;

@ -107,6 +107,10 @@ void MediaGalleriesDialogViews::AcceptDialogForTesting() {
web_modal::WebContentsModalDialogManager::TestApi(manager).CloseAllDialogs();
}
const views::Widget* MediaGalleriesDialogViews::GetWidgetImpl() const {
return contents_->GetWidget();
}
void MediaGalleriesDialogViews::InitChildViews() {
// Outer dialog layout.
contents_->RemoveAllChildViews(true);
@ -237,14 +241,6 @@ void MediaGalleriesDialogViews::DeleteDelegate() {
controller_->DialogFinished(accepted_);
}
views::Widget* MediaGalleriesDialogViews::GetWidget() {
return contents_->GetWidget();
}
const views::Widget* MediaGalleriesDialogViews::GetWidget() const {
return contents_->GetWidget();
}
views::View* MediaGalleriesDialogViews::GetContentsView() {
return contents_;
}

@ -42,8 +42,6 @@ class MediaGalleriesDialogViews : public MediaGalleriesDialog,
base::string16 GetWindowTitle() const override;
bool ShouldShowCloseButton() const override;
void DeleteDelegate() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
views::View* GetContentsView() override;
bool IsDialogButtonEnabled(ui::DialogButton button) const override;
ui::ModalType GetModalType() const override;
@ -69,6 +67,9 @@ class MediaGalleriesDialogViews : public MediaGalleriesDialog,
// MediaGalleriesDialog:
void AcceptDialogForTesting() override;
// views::DialogDelegate:
const views::Widget* GetWidgetImpl() const override;
void InitChildViews();
// Adds a checkbox or updates an existing checkbox. Returns true if a new one

@ -156,14 +156,6 @@ ui::ModalType ExternalProtocolDialog::GetModalType() const {
return ui::MODAL_TYPE_CHILD;
}
views::Widget* ExternalProtocolDialog::GetWidget() {
return message_box_view_->GetWidget();
}
const views::Widget* ExternalProtocolDialog::GetWidget() const {
return message_box_view_->GetWidget();
}
void ExternalProtocolDialog::ShowRememberSelectionCheckbox() {
message_box_view_->SetCheckBoxLabel(
l10n_util::GetStringUTF16(IDS_EXTERNAL_PROTOCOL_CHECKBOX_TEXT));
@ -175,3 +167,7 @@ void ExternalProtocolDialog::SetRememberSelectionCheckboxCheckedForTesting(
ShowRememberSelectionCheckbox();
message_box_view_->SetCheckBoxSelected(checked);
}
const views::Widget* ExternalProtocolDialog::GetWidgetImpl() const {
return message_box_view_->GetWidget();
}

@ -41,8 +41,6 @@ class ExternalProtocolDialog : public views::DialogDelegateView,
bool Accept() override;
views::View* GetContentsView() override;
ui::ModalType GetModalType() const override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
private:
friend class test::ExternalProtocolDialogTestApi;
@ -50,6 +48,9 @@ class ExternalProtocolDialog : public views::DialogDelegateView,
void ShowRememberSelectionCheckbox();
void SetRememberSelectionCheckboxCheckedForTesting(bool checked);
// views::DialogDelegateView:
const views::Widget* GetWidgetImpl() const override;
const GURL url_;
const base::string16 program_name_;
const base::Optional<url::Origin> initiating_origin_;

@ -2400,14 +2400,6 @@ void BrowserView::OnWidgetMove() {
location_bar_view->GetOmniboxView()->CloseOmniboxPopup();
}
views::Widget* BrowserView::GetWidget() {
return View::GetWidget();
}
const views::Widget* BrowserView::GetWidget() const {
return View::GetWidget();
}
void BrowserView::RevealTabStripIfNeeded() {
if (!immersive_mode_controller_->IsEnabled())
return;

@ -476,8 +476,6 @@ class BrowserView : public BrowserWindow,
void OnWindowBeginUserBoundsChange() override;
void OnWindowEndUserBoundsChange() override;
void OnWidgetMove() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
void GetAccessiblePanes(std::vector<View*>* panes) override;
// views::WidgetObserver:

@ -70,14 +70,15 @@ class OverlayMediaNotificationWidgetDelegate : public views::WidgetDelegate {
// views::WidgetDelegate:
bool ShouldShowWindowTitle() const override { return false; }
views::Widget* GetWidget() override { return widget_; }
const views::Widget* GetWidget() const override { return widget_; }
views::NonClientFrameView* CreateNonClientFrameView(
views::Widget* widget) override {
return new OverlayMediaNotificationFrameView();
}
private:
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override { return widget_; }
// Owns OverlayMediaNotificationWidgetDelegate.
OverlayMediaNotificationView* widget_;
};

@ -147,10 +147,6 @@ class LoginHandlerViews : public LoginHandler {
}
views::View* GetContentsView() override { return login_view_; }
views::Widget* GetWidget() override { return login_view_->GetWidget(); }
const views::Widget* GetWidget() const override {
return login_view_->GetWidget();
}
private:
~Dialog() override {
@ -158,6 +154,11 @@ class LoginHandlerViews : public LoginHandler {
handler_->OnDialogDestroyed();
}
// views::DialogDelegate:
const views::Widget* GetWidgetImpl() const override {
return login_view_->GetWidget();
}
LoginHandlerViews* handler_;
// The LoginView that contains the user's login information.
LoginView* login_view_;

@ -179,14 +179,15 @@ class OverlayWindowWidgetDelegate : public views::WidgetDelegate {
}
bool ShouldShowWindowTitle() const override { return false; }
void DeleteDelegate() override { delete this; }
views::Widget* GetWidget() override { return widget_; }
const views::Widget* GetWidget() const override { return widget_; }
views::NonClientFrameView* CreateNonClientFrameView(
views::Widget* widget) override {
return new OverlayWindowFrameView(widget);
}
private:
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override { return widget_; }
// Owns OverlayWindowWidgetDelegate.
views::Widget* widget_;

@ -59,14 +59,6 @@ views::View* SigninViewControllerDelegateViews::GetContentsView() {
return content_view_;
}
views::Widget* SigninViewControllerDelegateViews::GetWidget() {
return content_view_->GetWidget();
}
const views::Widget* SigninViewControllerDelegateViews::GetWidget() const {
return content_view_->GetWidget();
}
void SigninViewControllerDelegateViews::DeleteDelegate() {
ResetSigninViewControllerDelegate();
delete this;
@ -224,6 +216,10 @@ void SigninViewControllerDelegateViews::DisplayModal() {
content_view_->RequestFocus();
}
const views::Widget* SigninViewControllerDelegateViews::GetWidgetImpl() const {
return content_view_->GetWidget();
}
// --------------------------------------------------------------------
// SigninViewControllerDelegate static methods
// --------------------------------------------------------------------

@ -39,8 +39,6 @@ class SigninViewControllerDelegateViews
// views::DialogDelegateView:
views::View* GetContentsView() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
void DeleteDelegate() override;
ui::ModalType GetModalType() const override;
bool ShouldShowCloseButton() const override;
@ -90,6 +88,9 @@ class SigninViewControllerDelegateViews
Browser* browser() { return browser_; }
// views::DialogDelegateView:
const views::Widget* GetWidgetImpl() const override;
SigninViewController* signin_view_controller_; // Not owned.
content::WebContents* const web_contents_; // Not owned.
Browser* const browser_; // Not owned.

@ -208,14 +208,6 @@ views::View* SimpleMessageBoxViews::GetContentsView() {
return message_box_view_;
}
views::Widget* SimpleMessageBoxViews::GetWidget() {
return message_box_view_->GetWidget();
}
const views::Widget* SimpleMessageBoxViews::GetWidget() const {
return message_box_view_->GetWidget();
}
bool SimpleMessageBoxViews::ShouldShowCloseButton() const {
return can_close_;
}
@ -286,6 +278,10 @@ void SimpleMessageBoxViews::Done() {
std::move(result_callback_).Run(result_);
}
const views::Widget* SimpleMessageBoxViews::GetWidgetImpl() const {
return message_box_view_->GetWidget();
}
namespace chrome {
void ShowWarningMessageBox(gfx::NativeWindow parent,

@ -36,8 +36,6 @@ class SimpleMessageBoxViews : public views::DialogDelegate,
void DeleteDelegate() override;
ui::ModalType GetModalType() const override;
views::View* GetContentsView() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
bool ShouldShowCloseButton() const override;
// views::WidgetObserver:
@ -57,6 +55,9 @@ class SimpleMessageBoxViews : public views::DialogDelegate,
void Run(MessageBoxResultCallback result_callback);
void Done();
// views::DialogDelegate:
const views::Widget* GetWidgetImpl() const override;
const base::string16 window_title_;
const chrome::MessageBoxType type_;
chrome::MessageBoxResult result_;

@ -89,14 +89,6 @@ views::View* TabModalConfirmDialogViews::GetContentsView() {
return message_box_view_;
}
views::Widget* TabModalConfirmDialogViews::GetWidget() {
return message_box_view_->GetWidget();
}
const views::Widget* TabModalConfirmDialogViews::GetWidget() const {
return message_box_view_->GetWidget();
}
void TabModalConfirmDialogViews::DeleteDelegate() {
delete this;
}
@ -119,6 +111,10 @@ void TabModalConfirmDialogViews::CloseDialog() {
GetWidget()->Close();
}
const views::Widget* TabModalConfirmDialogViews::GetWidgetImpl() const {
return message_box_view_->GetWidget();
}
void TabModalConfirmDialogViews::LinkClicked(views::Link* source,
int event_flags) {
delegate_->LinkClicked(ui::DispositionFromEventFlags(event_flags));

@ -42,8 +42,6 @@ class TabModalConfirmDialogViews : public TabModalConfirmDialog,
bool Close() override;
bool ShouldShowCloseButton() const override;
views::View* GetContentsView() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
void DeleteDelegate() override;
ui::ModalType GetModalType() const override;
@ -55,6 +53,9 @@ class TabModalConfirmDialogViews : public TabModalConfirmDialog,
void CancelTabModalDialog() override;
void CloseDialog() override;
// views::DialogDelegate:
const views::Widget* GetWidgetImpl() const override;
void LinkClicked(views::Link* source, int event_flags);
views::View* GetInitiallyFocusedView() override;

@ -122,14 +122,6 @@ views::View* ViewEventTestBase::GetContentsView() {
return content_view_;
}
const views::Widget* ViewEventTestBase::GetWidget() const {
return content_view_->GetWidget();
}
views::Widget* ViewEventTestBase::GetWidget() {
return content_view_->GetWidget();
}
ViewEventTestBase::~ViewEventTestBase() {
TestingBrowserProcess::DeleteInstance();
}
@ -175,3 +167,7 @@ void ViewEventTestBase::RunTestMethod(base::OnceClosure task) {
if (HasFatalFailure())
Done();
}
const views::Widget* ViewEventTestBase::GetWidgetImpl() const {
return content_view_->GetWidget();
}

@ -94,8 +94,6 @@ class ViewEventTestBase : public views::WidgetDelegate, public testing::Test {
// views::WidgetDelegate:
bool CanResize() const override;
views::View* GetContentsView() override;
const views::Widget* GetWidget() const override;
views::Widget* GetWidget() override;
protected:
~ViewEventTestBase() override;
@ -130,6 +128,9 @@ class ViewEventTestBase : public views::WidgetDelegate, public testing::Test {
// failures invokes Done.
void RunTestMethod(base::OnceClosure task);
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override;
// The content of the Window.
views::View* content_view_ = nullptr;

@ -74,10 +74,10 @@ class TestParentView : public views::View {
TestParentView& operator=(const TestParentView&) = delete;
~TestParentView() override = default;
views::Widget* GetWidget() override { return widget_.get(); }
const views::Widget* GetWidget() const override { return widget_.get(); }
private:
// views::View:
const views::Widget* GetWidgetImpl() const override { return widget_.get(); }
std::unique_ptr<views::Widget> widget_;
};

@ -95,10 +95,6 @@ views::View* UpdateRecommendedMessageBox::GetContentsView() {
return message_box_view_;
}
views::Widget* UpdateRecommendedMessageBox::GetWidget() {
return message_box_view_->GetWidget();
}
const views::Widget* UpdateRecommendedMessageBox::GetWidget() const {
const views::Widget* UpdateRecommendedMessageBox::GetWidgetImpl() const {
return message_box_view_->GetWidget();
}

@ -31,8 +31,7 @@ class UpdateRecommendedMessageBox : public views::DialogDelegate {
void DeleteDelegate() override;
ui::ModalType GetModalType() const override;
views::View* GetContentsView() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
const views::Widget* GetWidgetImpl() const override;
views::MessageBoxView* message_box_view_;

@ -129,11 +129,7 @@ void JavaScriptAppModalDialogViews::WindowClosing() {
parent_->OnClose();
}
views::Widget* JavaScriptAppModalDialogViews::GetWidget() {
return message_box_view_->GetWidget();
}
const views::Widget* JavaScriptAppModalDialogViews::GetWidget() const {
const views::Widget* JavaScriptAppModalDialogViews::GetWidgetImpl() const {
return message_box_view_->GetWidget();
}

@ -43,10 +43,11 @@ class JavaScriptAppModalDialogViews : public NativeAppModalDialog,
views::View* GetInitiallyFocusedView() override;
bool ShouldShowCloseButton() const override;
void WindowClosing() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
private:
// views::DialogDelegate:
const views::Widget* GetWidgetImpl() const override;
// A pointer to the AppModalDialog that owns us.
std::unique_ptr<JavaScriptAppModalDialog> parent_;

@ -171,14 +171,6 @@ void FullscreenShellSurface::WindowClosing() {
widget_ = nullptr;
}
views::Widget* FullscreenShellSurface::GetWidget() {
return widget_;
}
const views::Widget* FullscreenShellSurface::GetWidget() const {
return widget_;
}
views::View* FullscreenShellSurface::GetContentsView() {
return this;
}
@ -224,6 +216,10 @@ void FullscreenShellSurface::SetChildAxTreeId(ui::AXTreeID child_ax_tree_id) {
child_ax_tree_id_ = child_ax_tree_id;
}
const views::Widget* FullscreenShellSurface::GetWidgetImpl() const {
return widget_;
}
void FullscreenShellSurface::UpdateHostWindowBounds() {
// This method applies multiple changes to the window tree. Use ScopedPause
// to ensure that occlusion isn't recomputed before all changes have been

@ -69,8 +69,6 @@ class FullscreenShellSurface : public SurfaceTreeHost,
bool CanMinimize() const override;
bool ShouldShowWindowTitle() const override;
void WindowClosing() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
views::View* GetContentsView() override;
bool WidgetHasHitTestMask() const override;
void GetWidgetHitTestMask(SkPath* mask) const override;
@ -84,6 +82,9 @@ class FullscreenShellSurface : public SurfaceTreeHost,
void SetChildAxTreeId(ui::AXTreeID child_ax_tree_id);
private:
// views::WidgetDelegate:
const views::Widget* GetWidgetImpl() const override;
// Keep the bounds in sync with the root surface bounds.
void UpdateHostWindowBounds() override;

@ -695,14 +695,6 @@ void ShellSurfaceBase::WindowClosing() {
widget_ = nullptr;
}
views::Widget* ShellSurfaceBase::GetWidget() {
return widget_;
}
const views::Widget* ShellSurfaceBase::GetWidget() const {
return widget_;
}
views::View* ShellSurfaceBase::GetContentsView() {
return this;
}
@ -1081,6 +1073,10 @@ views::NonClientFrameView* ShellSurfaceBase::CreateNonClientFrameViewInternal(
////////////////////////////////////////////////////////////////////////////////
// ShellSurfaceBase, private:
const views::Widget* ShellSurfaceBase::GetWidgetImpl() const {
return widget_;
}
float ShellSurfaceBase::GetScale() const {
return 1.f;
}

@ -162,8 +162,6 @@ class ShellSurfaceBase : public SurfaceTreeHost,
gfx::ImageSkia GetWindowIcon() override;
bool OnCloseRequested(views::Widget::ClosedReason close_reason) override;
void WindowClosing() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
views::View* GetContentsView() override;
views::NonClientFrameView* CreateNonClientFrameView(
views::Widget* widget) override;
@ -265,6 +263,9 @@ class ShellSurfaceBase : public SurfaceTreeHost,
FRIEND_TEST_ALL_PREFIXES(ShellSurfaceTest,
HostWindowBoundsUpdatedAfterCommitWidget);
// WidgetDelegate:
const views::Widget* GetWidgetImpl() const override;
// Called on widget creation to initialize its window state.
// TODO(reveman): Remove virtual functions below to avoid FBC problem.
virtual void InitializeWindowState(ash::WindowState* window_state) = 0;

@ -212,14 +212,6 @@ void NativeAppWindowViews::DeleteDelegate() {
app_window_->OnNativeClose();
}
views::Widget* NativeAppWindowViews::GetWidget() {
return widget_;
}
const views::Widget* NativeAppWindowViews::GetWidget() const {
return widget_;
}
bool NativeAppWindowViews::ShouldDescendIntoChildForEventHandling(
gfx::NativeView child,
const gfx::Point& location) {
@ -438,4 +430,8 @@ void NativeAppWindowViews::OnViewWasResized() {
observer.OnPositionRequiresUpdate();
}
const views::Widget* NativeAppWindowViews::GetWidgetImpl() const {
return widget_;
}
} // namespace native_app_window

@ -99,8 +99,6 @@ class NativeAppWindowViews : public extensions::NativeAppWindow,
void SaveWindowPlacement(const gfx::Rect& bounds,
ui::WindowShowState show_state) override;
void DeleteDelegate() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
bool ShouldDescendIntoChildForEventHandling(
gfx::NativeView child,
const gfx::Point& location) override;
@ -158,6 +156,9 @@ class NativeAppWindowViews : public extensions::NativeAppWindow,
// Informs modal dialogs that they need to update their positions.
void OnViewWasResized();
// WidgetDelegate:
const views::Widget* GetWidgetImpl() const override;
extensions::AppWindow* app_window_ = nullptr; // Not owned.
views::WebView* web_view_ = nullptr;
views::Widget* widget_ = nullptr;

@ -42,14 +42,15 @@ class MessageBox::Core : public views::DialogDelegateView {
ui::ModalType GetModalType() const override;
base::string16 GetWindowTitle() const override;
views::View* GetContentsView() override;
views::Widget* GetWidget() override;
const views::Widget* GetWidget() const override;
void DeleteDelegate() override;
// Called by MessageBox::Core when it is destroyed.
void OnMessageBoxDestroyed();
private:
// views::DialogDelegateView:
const views::Widget* GetWidgetImpl() const override;
const base::string16 title_label_;
ResultCallback result_callback_;
MessageBox* message_box_;
@ -120,14 +121,6 @@ views::View* MessageBox::Core::GetContentsView() {
return message_box_view_;
}
views::Widget* MessageBox::Core::GetWidget() {
return message_box_view_->GetWidget();
}
const views::Widget* MessageBox::Core::GetWidget() const {
return message_box_view_->GetWidget();
}
void MessageBox::Core::DeleteDelegate() {
if (message_box_) {
message_box_->core_ = nullptr;
@ -142,6 +135,10 @@ void MessageBox::Core::OnMessageBoxDestroyed() {
result_callback_.Reset();
}
const views::Widget* MessageBox::Core::GetWidgetImpl() const {
return message_box_view_->GetWidget();
}
MessageBox::MessageBox(const base::string16& title_label,
const base::string16& message_label,
const base::string16& ok_label,

@ -294,7 +294,13 @@ SearchBoxViewBase::SearchBoxViewBase(SearchBoxViewDelegate* delegate)
content_container_->AddChildView(close_button_);
}
SearchBoxViewBase::~SearchBoxViewBase() = default;
SearchBoxViewBase::~SearchBoxViewBase() {
// |search_box_| tries to call methods on us, and so must be destroyed before
// we are. Remove it from the tree first, which will blur it; it must be
// blurred before being deleted.
content_container_->RemoveChildView(search_box_);
delete search_box_;
}
void SearchBoxViewBase::Init() {
SetPaintToLayer();

@ -261,6 +261,7 @@ jumbo_component("views") {
"widget/widget.h",
"widget/widget_delegate.h",
"widget/widget_deletion_observer.h",
"widget/widget_getter.h",
"widget/widget_observer.h",
"widget/widget_removals_observer.h",
"widget/widget_utils.h",

@ -56,8 +56,6 @@ class TestBubbleFrameViewWidgetDelegate : public WidgetDelegate {
~TestBubbleFrameViewWidgetDelegate() override = default;
// WidgetDelegate:
Widget* GetWidget() override { return widget_; }
const Widget* GetWidget() const override { return widget_; }
View* GetContentsView() override {
if (!contents_view_) {
StaticSizedView* contents_view =
@ -75,6 +73,9 @@ class TestBubbleFrameViewWidgetDelegate : public WidgetDelegate {
}
private:
// WidgetDelegate:
const Widget* GetWidgetImpl() const override { return widget_; }
Widget* const widget_;
View* contents_view_ = nullptr; // Owned by |widget_|.
bool should_show_close_ = false;
@ -114,12 +115,6 @@ class TestBubbleFrameView : public BubbleFrameView {
}
// BubbleFrameView:
Widget* GetWidget() override { return widget_.get(); }
const Widget* GetWidget() const override {
return widget_.get();
}
gfx::Rect GetAvailableScreenBounds(const gfx::Rect& rect) const override {
return available_bounds_;
}
@ -133,6 +128,9 @@ class TestBubbleFrameView : public BubbleFrameView {
}
private:
// BubbleFrameView:
const Widget* GetWidgetImpl() const override { return widget_.get(); }
const gfx::Rect available_bounds_ = gfx::Rect(0, 0, 1000, 1000);
gfx::Rect available_anchor_window_bounds_;

@ -1590,12 +1590,13 @@ class RemoveFocusChangeListenerDelegate : public WidgetDelegate {
// WidgetDelegate:
void DeleteDelegate() override;
Widget* GetWidget() override { return widget_; }
const Widget* GetWidget() const override { return widget_; }
void SetFocusChangeListener(FocusChangeListener* listener);
private:
// WidgetDelegate:
const Widget* GetWidgetImpl() const override { return widget_; }
Widget* widget_;
FocusChangeListener* listener_;

@ -230,14 +230,6 @@ bool WebDialogView::ShouldShowWindowTitle() const {
return ShouldShowDialogTitle();
}
views::Widget* WebDialogView::GetWidget() {
return View::GetWidget();
}
const views::Widget* WebDialogView::GetWidget() const {
return View::GetWidget();
}
////////////////////////////////////////////////////////////////////////////////
// WebDialogDelegate implementation:

@ -106,8 +106,6 @@ class WEBVIEW_EXPORT WebDialogView : public ClientView,
View* GetInitiallyFocusedView() override;
bool ShouldShowWindowTitle() const override;
bool ShouldShowCloseButton() const override;
Widget* GetWidget() override;
const Widget* GetWidget() const override;
// ui::WebDialogDelegate:
ui::ModalType GetDialogModalType() const override;

@ -862,10 +862,11 @@ class AdvanceFocusWidgetDelegate : public WidgetDelegate {
bool ShouldAdvanceFocusToTopLevelWidget() const override {
return should_advance_focus_to_parent_;
}
Widget* GetWidget() override { return widget_; }
const Widget* GetWidget() const override { return widget_; }
private:
// WidgetDelegate:
const Widget* GetWidgetImpl() const override { return widget_; }
Widget* widget_;
bool should_advance_focus_to_parent_;

@ -53,14 +53,6 @@ View* FocusManagerTest::GetContentsView() {
return contents_view_;
}
Widget* FocusManagerTest::GetWidget() {
return contents_view_->GetWidget();
}
const Widget* FocusManagerTest::GetWidget() const {
return contents_view_->GetWidget();
}
void FocusManagerTest::GetAccessiblePanes(std::vector<View*>* panes) {
std::copy(accessible_panes_.begin(), accessible_panes_.end(),
std::back_inserter(*panes));
@ -86,6 +78,10 @@ void FocusManagerTest::SetAccessiblePanes(const std::vector<View*>& panes) {
accessible_panes_ = panes;
}
const Widget* FocusManagerTest::GetWidgetImpl() const {
return contents_view_->GetWidget();
}
////////////////////////////////////////////////////////////////////////////////
// TestFocusChangeListener

@ -31,8 +31,6 @@ class FocusManagerTest : public ViewsTestBase, public WidgetDelegate {
// WidgetDelegate:
View* GetContentsView() override;
Widget* GetWidget() override;
const Widget* GetWidget() const override;
void GetAccessiblePanes(std::vector<View*>* panes) override;
protected:
@ -47,6 +45,9 @@ class FocusManagerTest : public ViewsTestBase, public WidgetDelegate {
void SetAccessiblePanes(const std::vector<View*>& panes);
private:
// WidgetDelegate:
const Widget* GetWidgetImpl() const override;
View* contents_view_;
FocusChangeListener* focus_change_listener_ = nullptr;
WidgetFocusChangeListener* widget_focus_change_listener_ = nullptr;

@ -111,14 +111,6 @@ void TestDesktopWidgetDelegate::WindowClosing() {
widget_ = nullptr;
}
Widget* TestDesktopWidgetDelegate::GetWidget() {
return widget_;
}
const Widget* TestDesktopWidgetDelegate::GetWidget() const {
return widget_;
}
View* TestDesktopWidgetDelegate::GetContentsView() {
return contents_view_ ? contents_view_ : WidgetDelegate::GetContentsView();
}
@ -133,6 +125,10 @@ bool TestDesktopWidgetDelegate::OnCloseRequested(
return can_close_;
}
const Widget* TestDesktopWidgetDelegate::GetWidgetImpl() const {
return widget_;
}
TestInitialFocusWidgetDelegate::TestInitialFocusWidgetDelegate(
gfx::NativeWindow context)
: view_(new View) {

@ -166,13 +166,14 @@ class TestDesktopWidgetDelegate : public WidgetDelegate {
// WidgetDelegate:
void WindowClosing() override;
Widget* GetWidget() override;
const Widget* GetWidget() const override;
View* GetContentsView() override;
bool ShouldAdvanceFocusToTopLevelWidget() const override;
bool OnCloseRequested(Widget::ClosedReason close_reason) override;
private:
// WidgetDelegate:
const Widget* GetWidgetImpl() const override;
Widget* widget_;
View* contents_view_ = nullptr;
int window_closing_count_ = 0;

@ -154,15 +154,11 @@ View::~View() {
// Tree operations -------------------------------------------------------------
const Widget* View::GetWidget() const {
const Widget* View::GetWidgetImpl() const {
// The root view holds a reference to this view hierarchy's Widget.
return parent_ ? parent_->GetWidget() : nullptr;
}
Widget* View::GetWidget() {
return const_cast<Widget*>(const_cast<const View*>(this)->GetWidget());
}
void View::ReorderChildView(View* view, int index) {
DCHECK_EQ(view->parent_, this);
const auto i = std::find(children_.begin(), children_.end(), view);

@ -49,6 +49,7 @@
#include "ui/views/paint_info.h"
#include "ui/views/view_targeter.h"
#include "ui/views/views_export.h"
#include "ui/views/widget/widget_getter.h"
using ui::OSExchangeData;
@ -271,7 +272,8 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
public ui::EventTarget,
public ui::EventHandler,
public ui::PropertyHandler,
public views::metadata::MetaDataProvider {
public metadata::MetaDataProvider,
public virtual WidgetGetter {
public:
using Views = std::vector<View*>;
@ -390,9 +392,7 @@ class VIEWS_EXPORT View : public ui::LayerDelegate,
// Tree operations -----------------------------------------------------------
// Get the Widget that hosts this View, if any.
virtual const Widget* GetWidget() const;
virtual Widget* GetWidget();
const Widget* GetWidgetImpl() const override;
// Adds |view| as a child of this view, optionally at |index|.
// Returns the raw pointer for callers which want to hold a pointer to the

@ -614,14 +614,6 @@ void DesktopNativeWidgetAura::FrameTypeChanged() {
UpdateWindowTransparency();
}
Widget* DesktopNativeWidgetAura::GetWidget() {
return native_widget_delegate_->AsWidget();
}
const Widget* DesktopNativeWidgetAura::GetWidget() const {
return native_widget_delegate_->AsWidget();
}
gfx::NativeView DesktopNativeWidgetAura::GetNativeView() const {
return content_window_;
}
@ -1282,4 +1274,8 @@ void DesktopNativeWidgetAura::RootWindowDestroyed() {
}
}
const Widget* DesktopNativeWidgetAura::GetWidgetImpl() const {
return native_widget_delegate_->AsWidget();
}
} // namespace views

@ -114,8 +114,6 @@ class VIEWS_EXPORT DesktopNativeWidgetAura
bool ShouldUseNativeFrame() const override;
bool ShouldWindowContentsBeTransparent() const override;
void FrameTypeChanged() override;
Widget* GetWidget() override;
const Widget* GetWidget() const override;
gfx::NativeView GetNativeView() const override;
Widget* GetTopLevelWidget() override;
const ui::Compositor* GetCompositor() const override;
@ -261,6 +259,9 @@ class VIEWS_EXPORT DesktopNativeWidgetAura
// Notify the root view of our widget of a native accessibility event.
void NotifyAccessibilityEvent(ax::mojom::Event event_type);
// internal::NativeWidgetPrivate
const Widget* GetWidgetImpl() const override;
std::unique_ptr<aura::WindowTreeHost> host_;
DesktopWindowTreeHost* desktop_window_tree_host_;

@ -129,8 +129,6 @@ class HitTestWidgetDelegate : public WidgetDelegate {
// WidgetDelegate:
bool CanResize() const override { return can_resize_; }
Widget* GetWidget() override { return widget_; }
Widget* GetWidget() const override { return widget_; }
NonClientFrameView* CreateNonClientFrameView(Widget* widget) override {
DCHECK(widget_ == widget);
if (!frame_view_)
@ -140,6 +138,9 @@ class HitTestWidgetDelegate : public WidgetDelegate {
void DeleteDelegate() override { delete this; }
private:
// WidgetDelegate:
const Widget* GetWidgetImpl() const override { return widget_; }
Widget* const widget_;
HitTestNonClientFrameView* frame_view_ = nullptr;
bool can_resize_ = false;

@ -289,14 +289,6 @@ void NativeWidgetAura::FrameTypeChanged() {
GetWidget()->GetRootView()->SchedulePaint();
}
Widget* NativeWidgetAura::GetWidget() {
return delegate_->AsWidget();
}
const Widget* NativeWidgetAura::GetWidget() const {
return delegate_->AsWidget();
}
gfx::NativeView NativeWidgetAura::GetNativeView() const {
return window_;
}
@ -1065,6 +1057,10 @@ void NativeWidgetAura::SetInitialFocus(ui::WindowShowState show_state) {
window_->Focus();
}
const Widget* NativeWidgetAura::GetWidgetImpl() const {
return delegate_->AsWidget();
}
////////////////////////////////////////////////////////////////////////////////
// Widget, public:

@ -74,8 +74,6 @@ class VIEWS_EXPORT NativeWidgetAura : public internal::NativeWidgetPrivate,
bool ShouldUseNativeFrame() const override;
bool ShouldWindowContentsBeTransparent() const override;
void FrameTypeChanged() override;
Widget* GetWidget() override;
const Widget* GetWidget() const override;
gfx::NativeView GetNativeView() const override;
gfx::NativeWindow GetNativeWindow() const override;
Widget* GetTopLevelWidget() override;
@ -222,6 +220,9 @@ class VIEWS_EXPORT NativeWidgetAura : public internal::NativeWidgetPrivate,
private:
void SetInitialFocus(ui::WindowShowState show_state);
// internal::NativeWidgetPrivate:
const Widget* GetWidgetImpl() const override;
internal::NativeWidgetDelegate* delegate_;
// WARNING: set to NULL when destroyed. As the Widget is not necessarily

@ -332,8 +332,7 @@ class PropertyTestWidgetDelegate : public WidgetDelegate {
bool CanMinimize() const override { return true; }
bool CanResize() const override { return true; }
void DeleteDelegate() override { delete this; }
Widget* GetWidget() override { return widget_; }
const Widget* GetWidget() const override { return widget_; }
const Widget* GetWidgetImpl() const override { return widget_; }
Widget* widget_;
DISALLOW_COPY_AND_ASSIGN(PropertyTestWidgetDelegate);

@ -94,8 +94,6 @@ class VIEWS_EXPORT NativeWidgetMac : public internal::NativeWidgetPrivate,
bool ShouldUseNativeFrame() const override;
bool ShouldWindowContentsBeTransparent() const override;
void FrameTypeChanged() override;
Widget* GetWidget() override;
const Widget* GetWidget() const override;
gfx::NativeView GetNativeView() const override;
gfx::NativeWindow GetNativeWindow() const override;
Widget* GetTopLevelWidget() override;
@ -247,6 +245,9 @@ class VIEWS_EXPORT NativeWidgetMac : public internal::NativeWidgetPrivate,
friend class views::test::WidgetTest;
class ZoomFocusMonitor;
// internal::NativeWidgetPrivate:
const Widget* GetWidgetImpl() const override;
internal::NativeWidgetDelegate* delegate_;
std::unique_ptr<NativeWidgetMacNSWindowHost> ns_window_host_;

@ -250,14 +250,6 @@ void NativeWidgetMac::FrameTypeChanged() {
GetWidget()->GetRootView()->SchedulePaint();
}
Widget* NativeWidgetMac::GetWidget() {
return delegate_->AsWidget();
}
const Widget* NativeWidgetMac::GetWidget() const {
return delegate_->AsWidget();
}
gfx::NativeView NativeWidgetMac::GetNativeView() const {
// Returns a BridgedContentView, unless there is no views::RootView set.
return [GetNativeWindow().GetNativeNSWindow() contentView];
@ -876,6 +868,10 @@ ui::EventDispatchDetails NativeWidgetMac::DispatchKeyEventPostIME(
return ui::EventDispatchDetails();
}
const Widget* NativeWidgetMac::GetWidgetImpl() const {
return delegate_->AsWidget();
}
////////////////////////////////////////////////////////////////////////////////
// Widget:

@ -1799,10 +1799,11 @@ class CustomTitleWidgetDelegate : public WidgetDelegate {
// WidgetDelegate:
base::string16 GetWindowTitle() const override { return title_; }
bool ShouldShowWindowTitle() const override { return should_show_title_; }
Widget* GetWidget() override { return widget_; }
const Widget* GetWidget() const override { return widget_; }
private:
// WidgetDelegate:
const Widget* GetWidgetImpl() const override { return widget_; }
Widget* widget_;
base::string16 title_;
bool should_show_title_;

@ -13,6 +13,7 @@
#include "ui/gfx/native_widget_types.h"
#include "ui/views/widget/native_widget.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_getter.h"
namespace gfx {
class ImageSkia;
@ -43,7 +44,8 @@ namespace internal {
// NativeWidget implementations. This file should not be included
// in code that does not fall into one of these use cases.
//
class VIEWS_EXPORT NativeWidgetPrivate : public NativeWidget {
class VIEWS_EXPORT NativeWidgetPrivate : public NativeWidget,
public virtual WidgetGetter {
public:
~NativeWidgetPrivate() override = default;
@ -92,11 +94,6 @@ class VIEWS_EXPORT NativeWidgetPrivate : public NativeWidget {
virtual bool ShouldWindowContentsBeTransparent() const = 0;
virtual void FrameTypeChanged() = 0;
// Returns the Widget associated with this NativeWidget. This function is
// guaranteed to return non-NULL for the lifetime of the NativeWidget.
virtual Widget* GetWidget() = 0;
virtual const Widget* GetWidget() const = 0;
// Returns the NativeView/Window associated with this NativeWidget.
virtual gfx::NativeView GetNativeView() const = 0;
virtual gfx::NativeWindow GetNativeWindow() const = 0;

@ -354,14 +354,6 @@ void RootView::OnEventProcessingFinished(ui::Event* event) {
////////////////////////////////////////////////////////////////////////////////
// RootView, View overrides:
const Widget* RootView::GetWidget() const {
return widget_;
}
Widget* RootView::GetWidget() {
return const_cast<Widget*>(const_cast<const RootView*>(this)->GetWidget());
}
bool RootView::IsDrawn() const {
return GetVisible();
}
@ -810,6 +802,10 @@ ui::EventDispatchDetails RootView::PostDispatchEvent(ui::EventTarget* target,
return details;
}
const Widget* RootView::GetWidgetImpl() const {
return widget_;
}
BEGIN_METADATA(RootView)
METADATA_PARENT_CLASS(View)
END_METADATA()

@ -110,8 +110,6 @@ class VIEWS_EXPORT RootView : public View,
void OnEventProcessingFinished(ui::Event* event) override;
// View:
const Widget* GetWidget() const override;
Widget* GetWidget() override;
bool IsDrawn() const override;
bool OnMousePressed(const ui::MouseEvent& event) override;
bool OnMouseDragged(const ui::MouseEvent& event) override;
@ -175,6 +173,9 @@ class VIEWS_EXPORT RootView : public View,
//////////////////////////////////////////////////////////////////////////////
// Tree operations -----------------------------------------------------------
// View:
const Widget* GetWidgetImpl() const override;
// The host Widget
Widget* widget_;

@ -98,8 +98,6 @@ class DefaultWidgetDelegate : public WidgetDelegate {
// WidgetDelegate:
void DeleteDelegate() override { delete this; }
Widget* GetWidget() override { return widget_; }
const Widget* GetWidget() const override { return widget_; }
bool ShouldAdvanceFocusToTopLevelWidget() const override {
// In most situations where a Widget is used without a delegate the Widget
// is used as a container, so that we want focus to advance to the top-level
@ -108,6 +106,9 @@ class DefaultWidgetDelegate : public WidgetDelegate {
}
private:
// WidgetDelegate:
const Widget* GetWidgetImpl() const override { return widget_; }
Widget* widget_;
DISALLOW_COPY_AND_ASSIGN(DefaultWidgetDelegate);

@ -205,14 +205,6 @@ void WidgetDelegateView::DeleteDelegate() {
delete this;
}
Widget* WidgetDelegateView::GetWidget() {
return View::GetWidget();
}
const Widget* WidgetDelegateView::GetWidget() const {
return View::GetWidget();
}
views::View* WidgetDelegateView::GetContentsView() {
return this;
}

@ -13,6 +13,7 @@
#include "ui/base/ui_base_types.h"
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_getter.h"
namespace gfx {
class ImageSkia;
@ -27,7 +28,7 @@ class NonClientFrameView;
class View;
// Handles events on Widgets in context-specific ways.
class VIEWS_EXPORT WidgetDelegate {
class VIEWS_EXPORT WidgetDelegate : public virtual WidgetGetter {
public:
WidgetDelegate();
@ -149,10 +150,6 @@ class VIEWS_EXPORT WidgetDelegate {
virtual void OnWindowBeginUserBoundsChange() {}
virtual void OnWindowEndUserBoundsChange() {}
// Returns the Widget associated with this delegate.
virtual Widget* GetWidget() = 0;
virtual const Widget* GetWidget() const = 0;
// Returns the View that is contained within this Widget.
virtual View* GetContentsView();
@ -212,10 +209,9 @@ class VIEWS_EXPORT WidgetDelegate {
DISALLOW_COPY_AND_ASSIGN(WidgetDelegate);
};
// A WidgetDelegate implementation that is-a View. Used to override GetWidget()
// to call View's GetWidget() for the common case where a WidgetDelegate
// implementation is-a View. Note that WidgetDelegateView is not owned by
// view's hierarchy and is expected to be deleted on DeleteDelegate call.
// A WidgetDelegate implementation that is-a View. Note that WidgetDelegateView
// is not owned by view's hierarchy and is expected to be deleted on
// DeleteDelegate call.
class VIEWS_EXPORT WidgetDelegateView : public WidgetDelegate, public View {
public:
METADATA_HEADER(WidgetDelegateView);
@ -225,8 +221,6 @@ class VIEWS_EXPORT WidgetDelegateView : public WidgetDelegate, public View {
// WidgetDelegate:
void DeleteDelegate() override;
Widget* GetWidget() override;
const Widget* GetWidget() const override;
views::View* GetContentsView() override;
private:

@ -0,0 +1,34 @@
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_VIEWS_WIDGET_WIDGET_GETTER_H_
#define UI_VIEWS_WIDGET_WIDGET_GETTER_H_
namespace views {
class Widget;
// Make this class a virtual base of any base class which needs to expose a
// GetWidget() method, then override GetWidgetImpl() as appropriate.
//
// Having GetWidgetImpl() be the override, not GetWidget() directly, avoids the
// need for subclasses to either override both GetWidget() methods or risk
// obscure compilation or name-hiding errors from only overriding one. Using
// this as a virtual base avoids the need to explicitly qualify GetWidget()
// calls with a base class name when multiple bases expose it, as in e.g.
// View + WidgetDelegate.
class WidgetGetter {
public:
Widget* GetWidget() {
return const_cast<Widget*>(
static_cast<const WidgetGetter*>(this)->GetWidget());
}
const Widget* GetWidget() const { return GetWidgetImpl(); }
private:
virtual const Widget* GetWidgetImpl() const = 0;
};
} // namespace views
#endif // UI_VIEWS_WIDGET_WIDGET_GETTER_H_

@ -344,14 +344,6 @@ void DialogDelegateView::DeleteDelegate() {
delete this;
}
Widget* DialogDelegateView::GetWidget() {
return View::GetWidget();
}
const Widget* DialogDelegateView::GetWidget() const {
return View::GetWidget();
}
View* DialogDelegateView::GetContentsView() {
return this;
}

@ -284,10 +284,9 @@ class VIEWS_EXPORT DialogDelegate : public WidgetDelegate {
DISALLOW_COPY_AND_ASSIGN(DialogDelegate);
};
// A DialogDelegate implementation that is-a View. Used to override GetWidget()
// to call View's GetWidget() for the common case where a DialogDelegate
// implementation is-a View. Note that DialogDelegateView is not owned by
// view's hierarchy and is expected to be deleted on DeleteDelegate call.
// A DialogDelegate implementation that is-a View. Note that DialogDelegateView
// is not owned by view's hierarchy and is expected to be deleted on
// DeleteDelegate call.
class VIEWS_EXPORT DialogDelegateView : public DialogDelegate,
public View {
public:
@ -296,8 +295,6 @@ class VIEWS_EXPORT DialogDelegateView : public DialogDelegate,
// DialogDelegate:
void DeleteDelegate() override;
Widget* GetWidget() override;
const Widget* GetWidget() const override;
View* GetContentsView() override;
// View: