1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_UI_COCOA_CONSTRAINED_WINDOW_CONSTRAINED_WINDOW_MAC_ 6 #define CHROME_BROWSER_UI_COCOA_CONSTRAINED_WINDOW_CONSTRAINED_WINDOW_MAC_ 7 8 #import <Cocoa/Cocoa.h> 9 10 #include "base/mac/scoped_nsobject.h" 11 #include "components/web_modal/native_web_contents_modal_dialog.h" 12 13 namespace content { 14 class WebContents; 15 } 16 class ConstrainedWindowMac; 17 @protocol ConstrainedWindowSheet; 18 19 // A delegate for a constrained window. The delegate is notified when the 20 // window closes. 21 class ConstrainedWindowMacDelegate { 22 public: 23 virtual void OnConstrainedWindowClosed(ConstrainedWindowMac* window) = 0; 24 }; 25 26 // Constrained window implementation for Mac. 27 // Normally an instance of this class is owned by the delegate. The delegate 28 // should delete the instance when the window is closed. 29 class ConstrainedWindowMac { 30 public: 31 ConstrainedWindowMac( 32 ConstrainedWindowMacDelegate* delegate, 33 content::WebContents* web_contents, 34 id<ConstrainedWindowSheet> sheet); 35 virtual ~ConstrainedWindowMac(); 36 37 void ShowWebContentsModalDialog(); 38 // Closes the constrained window and deletes this instance. 39 void CloseWebContentsModalDialog(); 40 void FocusWebContentsModalDialog(); 41 void PulseWebContentsModalDialog(); 42 web_modal::NativeWebContentsModalDialog GetNativeDialog(); 43 44 private: 45 // Gets the parent window of the dialog. 46 NSWindow* GetParentWindow() const; 47 48 ConstrainedWindowMacDelegate* delegate_; // weak, owns us. 49 50 // The WebContents that owns and constrains this ConstrainedWindowMac. Weak. 51 content::WebContents* web_contents_; 52 53 base::scoped_nsprotocol<id<ConstrainedWindowSheet>> sheet_; 54 55 // This is true if the constrained window has been shown. 56 bool shown_; 57 }; 58 59 #endif // CHROME_BROWSER_UI_COCOA_CONSTRAINED_WINDOW_CONSTRAINED_WINDOW_MAC_ 60