Index: chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_cocoa.mm |
diff --git a/chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_cocoa.mm b/chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_cocoa.mm |
index 5d025f6c8f6e5d865c7591cc6d5070712107f76d..22e12543a832ae36f9b32525eae8ebb1b4baaef8 100644 |
--- a/chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_cocoa.mm |
+++ b/chrome/browser/ui/cocoa/web_contents_modal_dialog_manager_cocoa.mm |
@@ -4,10 +4,12 @@ |
#include "components/web_modal/web_contents_modal_dialog_manager.h" |
+#import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sheet.h" |
#include "chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.h" |
#include "components/web_modal/single_web_contents_dialog_manager.h" |
using web_modal::NativeWebContentsModalDialog; |
+using web_modal::SingleWebContentsDialogManagerDelegate; |
namespace { |
@@ -15,29 +17,35 @@ class NativeWebContentsModalDialogManagerCocoa |
: public web_modal::SingleWebContentsDialogManager { |
public: |
NativeWebContentsModalDialogManagerCocoa( |
- NativeWebContentsModalDialog dialog) |
- : dialog_(dialog) { |
+ NativeWebContentsModalDialog dialog, |
+ SingleWebContentsDialogManagerDelegate* native_delegate) |
+ : native_delegate_(native_delegate), |
+ dialog_(dialog), |
+ sheet_([[CustomConstrainedWindowSheet alloc] |
+ initWithCustomWindow:dialog]) {} |
+ |
+ ~NativeWebContentsModalDialogManagerCocoa() override { |
+ Close(); |
} |
- ~NativeWebContentsModalDialogManagerCocoa() override {} |
- |
- // SingleWebContentsDialogManager overrides |
+ // SingleWebContentsDialogManager overrides. |
void Show() override { |
- GetConstrainedWindowMac(dialog())->ShowWebContentsModalDialog(); |
+ window_.reset(new ConstrainedWindowMac( |
Mike Wittman
2015/02/25 20:40:53
I think this preserves the existing creation/show/
|
+ nullptr, native_delegate_->GetWebContents(), sheet_)); |
} |
void Hide() override {} |
void Close() override { |
- GetConstrainedWindowMac(dialog())->CloseWebContentsModalDialog(); |
+ window_->CloseWebContentsModalDialog(); |
Mike Wittman
2015/02/25 20:40:53
Add null check. window_ can be null here if the di
|
} |
void Focus() override { |
- GetConstrainedWindowMac(dialog())->FocusWebContentsModalDialog(); |
+ window_->FocusWebContentsModalDialog(); |
Mike Wittman
2015/02/25 20:40:53
DCHECK(window_.get())
This shouldn't get called u
|
} |
void Pulse() override { |
- GetConstrainedWindowMac(dialog())->PulseWebContentsModalDialog(); |
+ window_->PulseWebContentsModalDialog(); |
Mike Wittman
2015/02/25 20:40:53
Ditto.
|
} |
void HostChanged(web_modal::WebContentsModalDialogHost* new_host) override {} |
@@ -45,14 +53,10 @@ class NativeWebContentsModalDialogManagerCocoa |
NativeWebContentsModalDialog dialog() override { return dialog_; } |
private: |
- static ConstrainedWindowMac* GetConstrainedWindowMac( |
- NativeWebContentsModalDialog dialog) { |
- return static_cast<ConstrainedWindowMac*>(dialog); |
- } |
- |
- // In mac this is a pointer to a ConstrainedWindowMac. |
- // TODO(gbillock): Replace this casting system with a more typesafe call path. |
+ SingleWebContentsDialogManagerDelegate* native_delegate_; |
tapted
2015/02/25 06:23:28
Lifetime comment?
|
NativeWebContentsModalDialog dialog_; |
+ base::scoped_nsobject<CustomConstrainedWindowSheet> sheet_; |
+ scoped_ptr<ConstrainedWindowMac> window_; |
DISALLOW_COPY_AND_ASSIGN(NativeWebContentsModalDialogManagerCocoa); |
}; |
@@ -65,7 +69,7 @@ SingleWebContentsDialogManager* |
WebContentsModalDialogManager::CreateNativeWebModalManager( |
NativeWebContentsModalDialog dialog, |
SingleWebContentsDialogManagerDelegate* native_delegate) { |
- return new NativeWebContentsModalDialogManagerCocoa(dialog); |
+ return new NativeWebContentsModalDialogManagerCocoa(dialog, native_delegate); |
} |
} // namespace web_modal |