// Copyright 2015 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 CHROME_BROWSER_UI_COCOA_WEB_CONTENTS_MODAL_DIALOG_MANAGER_VIEWS_MAC_H_ #define CHROME_BROWSER_UI_COCOA_WEB_CONTENTS_MODAL_DIALOG_MANAGER_VIEWS_MAC_H_ #import "base/mac/scoped_nsobject.h" #include "base/macros.h" #include "components/web_modal/single_web_contents_dialog_manager.h" #include "ui/views/widget/widget_observer.h" @class NSWindow; @class WrappedConstrainedWindowSheet; // WebContents dialog manager for a toolkit-views dialog parented off a Cocoa // browser window. Most of the modality behavior is still performed by the Cocoa // based ConstrainedWindowSheetController. This class bridges the expectations // of a toolkit-views dialog to the Cocoa ConstrainedWindowSheetController. // Note that this is not a web_modal::ModalDialogHostObserver. This is because // tabs in a Cocoa browser can't be dragged off their window if they have a tab- // modal dialog open, so the ModalDialogHost is only used by the views plumbing // when creating the dialog. class SingleWebContentsDialogManagerViewsMac : public web_modal::SingleWebContentsDialogManager, public views::WidgetObserver { public: SingleWebContentsDialogManagerViewsMac( NSWindow* dialog, web_modal::SingleWebContentsDialogManagerDelegate* delegate); ~SingleWebContentsDialogManagerViewsMac() override; // SingleWebContentsDialogManager: void Show() override; void Hide() override; void Close() override; void Focus() override; void Pulse() override; void HostChanged(web_modal::WebContentsModalDialogHost* new_host) override; gfx::NativeWindow dialog() override; // views::WidgetObserver: void OnWidgetClosing(views::Widget* widget) override; void OnWidgetDestroying(views::Widget* widget) override; private: base::scoped_nsobject sheet_; // Weak. Owns this. web_modal::SingleWebContentsDialogManagerDelegate* delegate_; // Weak. Owned by parent window. web_modal::WebContentsModalDialogHost* host_; views::Widget* widget_; // Weak. Deletes |this| when closing. DISALLOW_COPY_AND_ASSIGN(SingleWebContentsDialogManagerViewsMac); }; #endif // CHROME_BROWSER_UI_COCOA_WEB_CONTENTS_MODAL_DIALOG_MANAGER_VIEWS_MAC_H_