#ifndef UI_VIEWS_WIDGET_WIDGET_DELEGATE_H_
#define UI_VIEWS_WIDGET_WIDGET_DELEGATE_H_
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/types/pass_key.h"
#include "ui/accessibility/ax_enums.mojom.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/base/models/image_model.h"
#include "ui/base/mojom/ui_base_types.mojom-shared.h"
#include "ui/base/mojom/window_show_state.mojom-forward.h"
#include "ui/views/metadata/view_factory.h"
#include "ui/views/view.h"
#include "ui/views/widget/widget.h"
class AutoPipSettingView;
class DesktopMediaPickerDialogView;
class DigitalIdentityMultiStepDialogDelegate;
class ExtensionsMenuCoordinator;
class ExternalProtocolNoHandlersTelSchemeDialog;
class ForceInstalledDeprecatedAppsDialogView;
class ForceInstalledPreinstalledDeprecatedAppDialogView;
class HoverDetectionBubbleView;
class ImmersiveModeControllerMacInteractiveTest;
class JavaScriptTabModalDialogViewViews;
class LoginHandlerViewsDialog;
class MediaGalleriesDialogTest;
class MediaGalleriesDialogViews;
class MessageBoxDialog;
class OverlayWindowWidgetDelegate;
class ParentAccessView;
class PresentationReceiverWindowView;
class PrivacySandboxDialog;
class ProcessSharingInfobarDelegate;
class ProfilePickerView;
class SSLClientCertificateSelector;
class ScheduledRebootDialog;
class ScreenCaptureNotificationUIViews;
class SearchEngineChoiceDialog;
class ShareThisTabDialogView;
class SigninViewControllerDelegateViews;
class TabModalConfirmDialogViews;
class TestBaseWidgetDelegate;
class UpdateRecommendedMessageBox;
class WebDialogBrowserTest;
FORWARD_DECLARE_TEST(AcceleratorCommandsFullscreenBrowserTest,
ToggleFullscreen);
FORWARD_DECLARE_TEST(TabStripScrollContainerTest, AnchoredWidgetHidesOnScroll);
#if !BUILDFLAG(IS_CHROMEOS)
class DownloadBubbleContentsViewTest;
class DownloadBubbleSecurityViewTest;
class DownloadToolbarUIController;
#endif
namespace arc {
class ArcTaskWindowBuilder;
class ArcVmDataMigrationConfirmationDialog;
}
namespace ash {
class AccessibilityPanel;
class ActiveSessionAuthControllerImpl;
class AmbientWidgetDelegate;
class AppListView;
class AppsCollectionsDismissDialog;
class AssistantWebContainerView;
class AuthDialogContentsViewPixelTest;
class AuthDialogContentsViewTest;
class BootingAnimationController;
class CaptureModeSessionFocusCycler;
class ClientControlledStateTestWidgetDelegate;
class ConnectionErrorDialogDelegateView;
class DeferredUpdateDialog;
class DeskButtonWidgetDelegateView;
class DisclaimerView;
class DockedMagnifierTest;
class DropSenderView;
class DropTargetView;
class ExitWarningWidgetDelegateView;
class FrameCaptionButtonContainerViewTest;
class FrameSizeButtonTestWidgetDelegate;
class GuestSessionConfirmationDialog;
class HotseatWidgetDelegateView;
class IdleAppNameNotificationDelegateView;
class InSessionAuthDialog;
class InSessionAuthDialogControllerImpl;
class InformedRestoreController;
class KioskExternalUpdateNotificationView;
class LayoutWidgetDelegateView;
class LocalAuthenticationWithPinControllerImpl;
class LockDebugView;
class LockDebugViewDataDispatcherTransformer;
class LockScreen;
class LoginShelfWidgetDelegate;
class LoginTestBase;
class LoginTestWidgetDelegate;
class MahiPanelWidget;
class MaximizeDelegateView;
class FrameViewAshTestWidgetDelegate;
class PipTest;
class QuickInsertSubmenuView;
class QuickInsertView;
class ResizableWidgetDelegate;
class RootWindowControllerTest;
class ShelfNavigationWidgetDelegate;
class ShelfWidgetDelegateView;
class ShellTest;
class SimpleWebViewDialog;
class StatusAreaWidgetDelegate;
class StuckWidgetDelegate;
class SystemDialogDelegateView;
class SystemUIComponentsStyleViewerView;
class TestChildModalParent;
class TestTextInputView;
class TestWidgetBuilderDelegate;
class TestWidgetDelegateAsh;
class TestWindow;
class VirtualTrackpadView;
class WallpaperWidgetDelegate;
class WideFrameView;
class WidgetWithSystemUIComponentView;
class WindowCycleView;
FORWARD_DECLARE_TEST(ExtendedDesktopTest, SystemModal);
FORWARD_DECLARE_TEST(MruWindowTrackerOrderTest, Basic);
FORWARD_DECLARE_TEST(ShellTest, CreateWindowWithPreferredSize);
namespace hud_display {
class HUDDisplayView;
}
namespace sharesheet {
class TestWidgetDelegate;
}
namespace shell {
class ToplevelWindow;
}
}
namespace autofill {
class PopupBaseView;
namespace payments {
class PaymentsWindowUserConsentDialogView;
}
}
namespace constrained_window {
class BrowserModalHelper;
}
namespace content {
class ShellPlatformDelegate;
}
namespace crostini {
class AppRestartDialog;
}
namespace exo {
class ShellSurfaceBase;
}
namespace extensions {
class WebFileHandlersPermissionHandler;
}
namespace eye_dropper {
class EyeDropperView;
}
namespace gfx {
class Rect;
}
namespace javascript_dialogs {
class AppModalDialogViewViews;
}
namespace message_center {
class MessagePopupView;
}
namespace native_app_window {
class NativeAppWindowViews;
}
namespace plus_addresses {
class PlusAddressCreationDialogDelegate;
}
namespace remoting {
class MessageBoxCore;
}
namespace ui::ime {
class CandidateViewTest;
}
namespace views {
class BubbleDialogDelegate;
class BubbleDialogModelHost;
class ClientView;
class DefaultWidgetDelegate;
class DialogDelegate;
class FocusTraversalTest;
class MoveTestWidgetDelegate;
class FrameView;
class ShapedWidgetDelegate;
class TableViewFocusTest;
class View;
class WebDialogView;
FORWARD_DECLARE_TEST(BubbleUmaLoggerTest, LogMetricFromDelegate);
FORWARD_DECLARE_TEST(FocusManagerTest, AdvanceFocusStaysInWidget);
FORWARD_DECLARE_TEST(NativeWidgetAuraTest, TestPropertiesWhenAddedToLayout);
FORWARD_DECLARE_TEST(NativeWidgetAuraTest, TransientChildModalWindowVisibility);
FORWARD_DECLARE_TEST(NativeViewHostAuraTest,
FocusManagerUpdatedDuringDestruction);
namespace borealis {
class BorealisDisallowedDialog;
class BorealisLaunchErrorDialog;
}
namespace examples {
class ExamplesWindowContents;
}
namespace test {
FORWARD_DECLARE_TEST(DesktopWidgetTest, LockPaintAsActiveAndCloseParent);
}
}
namespace web_app {
class IsolatedWebAppInstallerViewController;
class SubAppsInstallDialogController;
}
namespace webid {
class TestAccountSelectionView;
}
namespace views {
namespace test {
class GetNativeThemeFromDestructorView;
class TestingWidgetDelegateView;
FORWARD_DECLARE_TEST(WidgetOwnsNativeWidgetTest, WidgetDelegateView);
}
using TitleChangedCallback = base::RepeatingCallback<void()>;
using AccessibleTitleChangedCallback = base::RepeatingCallback<void()>;
class VIEWS_EXPORT WidgetDelegate {
public:
using ClientViewFactory =
base::OnceCallback<std::unique_ptr<ClientView>(Widget*,
View*)>;
using OverlayViewFactory = base::OnceCallback<std::unique_ptr<View>()>;
using FrameViewFactory =
base::RepeatingCallback<std::unique_ptr<FrameView>(Widget*)>;
struct Params {
Params();
~Params();
ax::mojom::Role accessible_role = ax::mojom::Role::kWindow;
std::u16string accessible_title;
bool can_fullscreen = false;
bool can_maximize = false;
bool can_minimize = false;
bool can_resize = false;
#if defined(USE_AURA)
bool center_title = false;
#endif
bool focus_traverses_out = false;
bool enable_arrow_key_traversal = false;
ui::ImageModel icon;
ui::ImageModel app_icon;
std::optional<View*> initially_focused_view;
base::RepeatingCallback<gfx::Rect()> desired_bounds_delegate;
std::string internal_name;
ui::mojom::ModalType modal_type = ui::mojom::ModalType::kNone;
bool show_close_button = true;
bool show_icon = false;
bool show_title = true;
std::u16string title;
bool use_desktop_widget_override = false;
};
class OwnedByWidgetPassKey {
private:
friend class ::AutoPipSettingView;
friend class ::DigitalIdentityMultiStepDialogDelegate;
#if !BUILDFLAG(IS_CHROMEOS)
friend class ::DownloadBubbleContentsViewTest;
friend class ::DownloadBubbleSecurityViewTest;
friend class ::DownloadToolbarUIController;
#endif
friend class ::ExtensionsMenuCoordinator;
friend class ::ExternalProtocolNoHandlersTelSchemeDialog;
friend class ::ForceInstalledDeprecatedAppsDialogView;
friend class ::ForceInstalledPreinstalledDeprecatedAppDialogView;
friend class ::HoverDetectionBubbleView;
friend class ::LoginHandlerViewsDialog;
friend class ::MediaGalleriesDialogTest;
friend class ::MessageBoxDialog;
friend class ::OverlayWindowWidgetDelegate;
friend class ::ParentAccessView;
friend class ::PrivacySandboxDialog;
friend class ::ProcessSharingInfobarDelegate;
friend class ::ProfilePickerView;
friend class ::ScheduledRebootDialog;
friend class ::SearchEngineChoiceDialog;
friend class ::TabModalConfirmDialogViews;
friend class ::TestBaseWidgetDelegate;
friend class ::UpdateRecommendedMessageBox;
friend class ::WebDialogBrowserTest;
FRIEND_TEST_ALL_PREFIXES(::TabStripScrollContainerTest,
AnchoredWidgetHidesOnScroll);
friend class ::arc::ArcTaskWindowBuilder;
friend class ::arc::ArcVmDataMigrationConfirmationDialog;
friend class ::ash::AccessibilityPanel;
friend class ::ash::ActiveSessionAuthControllerImpl;
friend class ::ash::AmbientWidgetDelegate;
friend class ::ash::AuthDialogContentsViewPixelTest;
friend class ::ash::AuthDialogContentsViewTest;
friend class ::ash::BootingAnimationController;
friend class ::ash::CaptureModeSessionFocusCycler;
friend class ::ash::DeferredUpdateDialog;
friend class ::ash::DisclaimerView;
friend class ::ash::GuestSessionConfirmationDialog;
friend class ::ash::InSessionAuthDialog;
friend class ::ash::InSessionAuthDialogControllerImpl;
friend class ::ash::LocalAuthenticationWithPinControllerImpl;
friend class ::ash::LockDebugView;
friend class ::ash::LockDebugViewDataDispatcherTransformer;
friend class ::ash::LockScreen;
friend class ::ash::LoginShelfWidgetDelegate;
friend class ::ash::LoginTestBase;
friend class ::ash::LoginTestWidgetDelegate;
friend class ::ash::MahiPanelWidget;
friend class ::ash::ShelfNavigationWidgetDelegate;
friend class ::ash::ShelfWidgetDelegateView;
friend class ::ash::ShellTest;
friend class ::ash::SimpleWebViewDialog;
friend class ::ash::StatusAreaWidgetDelegate;
friend class ::ash::StuckWidgetDelegate;
friend class ::ash::SystemUIComponentsStyleViewerView;
friend class ::ash::VirtualTrackpadView;
friend class ::ash::hud_display::HUDDisplayView;
friend class ::constrained_window::BrowserModalHelper;
friend class ::content::ShellPlatformDelegate;
friend class ::crostini::AppRestartDialog;
friend class ::exo::ShellSurfaceBase;
friend class ::extensions::WebFileHandlersPermissionHandler;
friend class ::javascript_dialogs::AppModalDialogViewViews;
friend class ::remoting::MessageBoxCore;
friend class BubbleDialogModelHost;
friend class FocusTraversalTest;
FRIEND_TEST_ALL_PREFIXES(BubbleUmaLoggerTest, LogMetricFromDelegate);
friend class borealis::BorealisDisallowedDialog;
friend class borealis::BorealisLaunchErrorDialog;
friend class ::web_app::IsolatedWebAppInstallerViewController;
friend class ::web_app::SubAppsInstallDialogController;
OwnedByWidgetPassKey() = default;
};
class RegisterWillCloseCallbackPassKey {
private:
friend class ::JavaScriptTabModalDialogViewViews;
friend class ::autofill::payments::PaymentsWindowUserConsentDialogView;
friend class DialogDelegate;
friend class WebDialogView;
RegisterWillCloseCallbackPassKey() = default;
};
class RegisterDeleteCallbackPassKey {
private:
friend class ::DesktopMediaPickerDialogView;
friend class ::MediaGalleriesDialogViews;
friend class ::PresentationReceiverWindowView;
friend class ::SSLClientCertificateSelector;
friend class ::ScreenCaptureNotificationUIViews;
friend class ::ShareThisTabDialogView;
friend class ::SigninViewControllerDelegateViews;
friend class ::ash::InformedRestoreController;
friend class ::native_app_window::NativeAppWindowViews;
friend class ::plus_addresses::PlusAddressCreationDialogDelegate;
friend class ::remoting::MessageBoxCore;
friend class DefaultWidgetDelegate;
friend class TableViewFocusTest;
FRIEND_TEST_ALL_PREFIXES(FocusManagerTest, AdvanceFocusStaysInWidget);
FRIEND_TEST_ALL_PREFIXES(NativeWidgetAuraTest,
TestPropertiesWhenAddedToLayout);
FRIEND_TEST_ALL_PREFIXES(NativeWidgetAuraTest,
TransientChildModalWindowVisibility);
FRIEND_TEST_ALL_PREFIXES(test::DesktopWidgetTest,
LockPaintAsActiveAndCloseParent);
RegisterDeleteCallbackPassKey() = default;
};
WidgetDelegate();
WidgetDelegate(const WidgetDelegate&) = delete;
WidgetDelegate& operator=(const WidgetDelegate&) = delete;
virtual ~WidgetDelegate();
void SetCanActivate(bool can_activate);
virtual void OnWidgetMove();
virtual void OnDisplayChanged();
virtual void OnWorkAreaChanged();
virtual void OnWidgetInitialized() {}
virtual bool OnCloseRequested(Widget::ClosedReason close_reason);
virtual View* GetInitiallyFocusedView();
bool HasConfiguredInitiallyFocusedView() const;
virtual BubbleDialogDelegate* AsBubbleDialogDelegate();
virtual DialogDelegate* AsDialogDelegate();
virtual bool CanResize() const;
virtual bool CanFullscreen() const;
virtual bool CanMaximize() const;
virtual bool CanMinimize() const;
virtual bool CanActivate() const;
virtual ui::mojom::ModalType GetModalType() const;
virtual ax::mojom::Role GetAccessibleWindowRole();
virtual std::u16string GetAccessibleWindowTitle() const;
virtual std::u16string GetWindowTitle() const;
virtual bool ShouldShowWindowTitle() const;
virtual bool ShouldShowCloseButton() const;
virtual ui::ImageModel GetWindowAppIcon();
virtual ui::ImageModel GetWindowIcon();
virtual bool ShouldShowWindowIcon() const;
virtual bool ExecuteWindowsCommand(int command_id);
virtual std::string GetWindowName() const;
virtual bool ShouldSaveWindowPlacement() const;
virtual void SaveWindowPlacement(const gfx::Rect& bounds,
ui::mojom::WindowShowState show_state);
virtual bool GetSavedWindowPlacement(
const Widget* widget,
gfx::Rect* bounds,
ui::mojom::WindowShowState* show_state) const;
virtual void WindowClosing();
void DeleteDelegate();
virtual void WidgetIsZombie(Widget* widget) {}
virtual void OnWindowBeginUserBoundsChange() {}
virtual void OnWindowEndUserBoundsChange() {}
virtual Widget* GetWidget();
virtual const Widget* GetWidget() const;
virtual View* GetContentsView();
View* TransferOwnershipOfContentsView();
virtual ClientView* CreateClientView(Widget* widget);
virtual std::unique_ptr<FrameView> CreateFrameView(Widget* widget);
virtual View* CreateOverlayView();
virtual bool WidgetHasHitTestMask() const;
virtual void GetWidgetHitTestMask(SkPath* mask) const;
virtual bool ShouldDescendIntoChildForEventHandling(
gfx::NativeView child,
const gfx::Point& location);
virtual void GetAccessiblePanes(std::vector<View*>* panes) {}
gfx::Rect GetDesiredWidgetBounds();
void SetAccessibleWindowRole(ax::mojom::Role role);
void SetAccessibleTitle(std::u16string title);
void SetCanFullscreen(bool can_fullscreen);
void SetCanMaximize(bool can_maximize);
void SetCanMinimize(bool can_minimize);
void SetCanResize(bool can_resize);
void SetFocusTraversesOut(bool focus_traverses_out);
void SetEnableArrowKeyTraversal(bool enable_arrow_key_traversal);
void SetIcon(ui::ImageModel icon);
void SetAppIcon(ui::ImageModel icon);
void SetInitiallyFocusedView(View* initially_focused_view);
void SetModalType(ui::mojom::ModalType modal_type);
void SetShowCloseButton(bool show_close_button);
void SetShowIcon(bool show_icon);
void SetShowTitle(bool show_title);
void SetTitle(const std::u16string& title);
void SetTitle(int title_message_id);
#if defined(USE_AURA)
void SetCenterTitle(bool center_title);
#endif
void SetOwnedByWidget(OwnedByWidgetPassKey);
template <typename T>
T* SetContentsView(std::unique_ptr<T> contents) {
T* raw_contents = contents.get();
SetContentsViewImpl(std::move(contents));
return raw_contents;
}
void SetHasWindowSizeControls(bool has_controls);
void RegisterWidgetInitializedCallback(base::OnceClosure callback);
void RegisterWindowClosingCallback(base::OnceClosure callback);
void RegisterWindowWillCloseCallback(RegisterWillCloseCallbackPassKey,
base::OnceClosure callback);
void RegisterDeleteDelegateCallback(RegisterDeleteCallbackPassKey,
base::OnceClosure callback);
void SetClientViewFactory(ClientViewFactory factory);
void SetFrameViewFactory(FrameViewFactory factory);
void SetOverlayViewFactory(OverlayViewFactory factory);
bool ShouldCenterWindowTitleText() const;
virtual bool MaybeGetMinimumSize(gfx::Size* size) const { return false; }
virtual bool MaybeGetMaximumSize(gfx::Size* size) const { return false; }
bool focus_traverses_out() const { return params_.focus_traverses_out; }
bool enable_arrow_key_traversal() const {
return params_.enable_arrow_key_traversal;
}
virtual bool RotatePaneFocusFromView(views::View* focused_view,
bool forward,
bool enable_wrapping);
void SetTitleChangedCallback(TitleChangedCallback callback);
void SetAccessibleTitleChangedCallback(
AccessibleTitleChangedCallback callback);
bool owned_by_widget() const { return owned_by_widget_; }
void set_internal_name(std::string name) { params_.internal_name = name; }
std::string internal_name() const { return params_.internal_name; }
void set_use_desktop_widget_override(bool use_desktop_widget_override) {
params_.use_desktop_widget_override = use_desktop_widget_override;
}
bool use_desktop_widget_override() {
return params_.use_desktop_widget_override;
}
bool has_desired_bounds_delegate() const {
return static_cast<bool>(params_.desired_bounds_delegate);
}
void set_desired_bounds_delegate(
base::RepeatingCallback<gfx::Rect()> desired_bounds_delegate) {
params_.desired_bounds_delegate = std::move(desired_bounds_delegate);
}
private:
using ClosureVector = std::vector<base::OnceClosure>;
friend class Widget;
base::WeakPtr<WidgetDelegate> AttachWidgetAndGetHandle(Widget* widget);
void WidgetInitialized();
void WidgetDestroying();
void WindowWillClose();
void SetContentsViewImpl(std::unique_ptr<View> contents);
raw_ptr<Widget, AcrossTasksDanglingUntriaged> widget_ = nullptr;
Params params_;
raw_ptr<View, AcrossTasksDanglingUntriaged> default_contents_view_ = nullptr;
bool contents_view_taken_ = false;
bool can_activate_ = true;
raw_ptr<View, AcrossTasksDanglingUntriaged> unowned_contents_view_ = nullptr;
std::unique_ptr<View> owned_contents_view_;
bool owned_by_widget_ = false;
bool can_delete_this_ = true;
std::unique_ptr<ClosureVector> widget_initialized_callbacks_;
ClosureVector window_will_close_callbacks_;
ClosureVector window_closing_callbacks_;
ClosureVector delete_delegate_callbacks_;
ClientViewFactory client_view_factory_;
FrameViewFactory frame_view_factory_;
OverlayViewFactory overlay_view_factory_;
TitleChangedCallback title_changed_callback_;
AccessibleTitleChangedCallback accessible_title_changed_callback_;
base::WeakPtrFactory<WidgetDelegate> weak_ptr_factory_{this};
};
class VIEWS_EXPORT WidgetDelegateView : public WidgetDelegate, public View {
METADATA_HEADER(WidgetDelegateView, View)
public:
using WdvPassKey = base::PassKey<WidgetDelegateView>;
explicit WidgetDelegateView(WdvPassKey) {}
WidgetDelegateView(const WidgetDelegateView&) = delete;
WidgetDelegateView& operator=(const WidgetDelegateView&) = delete;
~WidgetDelegateView() override;
Widget* GetWidget() override;
const Widget* GetWidget() const override;
View* GetContentsView() override;
private:
friend class ::ImmersiveModeControllerMacInteractiveTest;
friend class ::PresentationReceiverWindowView;
friend class ::ProfilePickerView;
friend class ::ScreenCaptureNotificationUIViews;
FRIEND_TEST_ALL_PREFIXES(::AcceleratorCommandsFullscreenBrowserTest,
ToggleFullscreen);
friend class ::ash::AppListView;
friend class ::ash::AppsCollectionsDismissDialog;
friend class ::ash::AssistantWebContainerView;
friend class ::ash::ClientControlledStateTestWidgetDelegate;
friend class ::ash::ConnectionErrorDialogDelegateView;
friend class ::ash::DeskButtonWidgetDelegateView;
friend class ::ash::DockedMagnifierTest;
friend class ::ash::DropSenderView;
friend class ::ash::DropTargetView;
friend class ::ash::ExitWarningWidgetDelegateView;
friend class ::ash::FrameCaptionButtonContainerViewTest;
friend class ::ash::FrameSizeButtonTestWidgetDelegate;
friend class ::ash::HotseatWidgetDelegateView;
friend class ::ash::IdleAppNameNotificationDelegateView;
friend class ::ash::KioskExternalUpdateNotificationView;
friend class ::ash::LayoutWidgetDelegateView;
friend class ::ash::MaximizeDelegateView;
friend class ::ash::FrameViewAshTestWidgetDelegate;
friend class ::ash::PipTest;
friend class ::ash::QuickInsertSubmenuView;
friend class ::ash::QuickInsertView;
friend class ::ash::ResizableWidgetDelegate;
friend class ::ash::RootWindowControllerTest;
friend class ::ash::ShellTest;
friend class ::ash::SystemDialogDelegateView;
friend class ::ash::SystemUIComponentsStyleViewerView;
friend class ::ash::TestChildModalParent;
friend class ::ash::TestTextInputView;
friend class ::ash::TestWidgetBuilderDelegate;
friend class ::ash::TestWidgetDelegateAsh;
friend class ::ash::TestWindow;
friend class ::ash::WallpaperWidgetDelegate;
friend class ::ash::WideFrameView;
friend class ::ash::WidgetWithSystemUIComponentView;
friend class ::ash::WindowCycleView;
FRIEND_TEST_ALL_PREFIXES(::ash::ExtendedDesktopTest, SystemModal);
FRIEND_TEST_ALL_PREFIXES(::ash::MruWindowTrackerOrderTest, Basic);
FRIEND_TEST_ALL_PREFIXES(::ash::ShellTest, CreateWindowWithPreferredSize);
friend class ::ash::sharesheet::TestWidgetDelegate;
friend class ::ash::shell::ToplevelWindow;
friend class ::autofill::PopupBaseView;
friend class ::eye_dropper::EyeDropperView;
friend class ::message_center::MessagePopupView;
friend class ::native_app_window::NativeAppWindowViews;
friend class ::ui::ime::CandidateViewTest;
friend class MoveTestWidgetDelegate;
friend class ShapedWidgetDelegate;
FRIEND_TEST_ALL_PREFIXES(NativeViewHostAuraTest,
FocusManagerUpdatedDuringDestruction);
friend class examples::ExamplesWindowContents;
friend class test::GetNativeThemeFromDestructorView;
friend class test::TestingWidgetDelegateView;
friend class webid::TestAccountSelectionView;
FRIEND_TEST_ALL_PREFIXES(test::WidgetOwnsNativeWidgetTest,
WidgetDelegateView);
WidgetDelegateView();
static WdvPassKey CreatePassKey() { return WdvPassKey(); }
};
BEGIN_VIEW_BUILDER(VIEWS_EXPORT, WidgetDelegateView, View)
END_VIEW_BUILDER
}
DEFINE_VIEW_BUILDER(VIEWS_EXPORT, WidgetDelegateView)
#endif