Index: chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa.mm |
diff --git a/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa.mm b/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..a953016731a293e93f8c47c79aa5d70254922901 |
--- /dev/null |
+++ b/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa.mm |
@@ -0,0 +1,75 @@ |
+// Copyright 2016 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. |
+ |
+#import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa.h" |
+ |
+#include "base/bind.h" |
+#include "base/location.h" |
+#include "base/single_thread_task_runner.h" |
+#include "base/threading/thread_task_runner_handle.h" |
+#include "chrome/browser/extensions/chrome_extension_chooser_dialog.h" |
+#import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_sheet.h" |
+#import "chrome/browser/ui/cocoa/constrained_window/constrained_window_custom_window.h" |
+#import "chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa_controller.h" |
+#include "components/web_modal/web_contents_modal_dialog_manager.h" |
+ |
+ChooserDialogCocoa::ChooserDialogCocoa(content::WebContents* web_contents, |
+ ChooserController* chooser_controller) |
+ : web_contents_(web_contents), chooser_controller_(chooser_controller) { |
+ DCHECK(web_contents_); |
+ DCHECK(chooser_controller_); |
+ chooser_controller_->set_observer(this); |
+ chooser_dialog_cocoa_controller_.reset([[ChooserDialogCocoaController alloc] |
+ initWithChooserDialogCocoa:this |
+ chooserController:chooser_controller_]); |
+} |
+ |
+ChooserDialogCocoa::~ChooserDialogCocoa() {} |
+ |
+void ChooserDialogCocoa::OnConstrainedWindowClosed( |
+ ConstrainedWindowMac* window) { |
+ base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); |
+} |
+ |
+void ChooserDialogCocoa::OnOptionsInitialized() { |
+ if (chooser_dialog_cocoa_controller_) |
+ [chooser_dialog_cocoa_controller_ onOptionsInitialized]; |
+} |
+ |
+void ChooserDialogCocoa::OnOptionAdded(size_t index) { |
+ if (chooser_dialog_cocoa_controller_) |
+ [chooser_dialog_cocoa_controller_ onOptionAdded:index]; |
+} |
+ |
+void ChooserDialogCocoa::OnOptionRemoved(size_t index) { |
+ if (chooser_dialog_cocoa_controller_) |
+ [chooser_dialog_cocoa_controller_ onOptionRemoved:index]; |
+} |
+ |
+void ChooserDialogCocoa::ShowDialog() { |
+ base::scoped_nsobject<NSWindow> window([[ConstrainedWindowCustomWindow alloc] |
+ initWithContentRect:[[chooser_dialog_cocoa_controller_ view] bounds]]); |
+ [[window contentView] addSubview:[chooser_dialog_cocoa_controller_ view]]; |
+ base::scoped_nsobject<CustomConstrainedWindowSheet> sheet( |
+ [[CustomConstrainedWindowSheet alloc] initWithCustomWindow:window]); |
+ constrained_window_ = |
+ CreateAndShowWebModalDialogMac(this, web_contents_, sheet); |
+} |
+ |
+void ChooserDialogCocoa::Dismissed() { |
+ if (constrained_window_) |
+ constrained_window_->CloseWebContentsModalDialog(); |
+} |
+ |
+void ChromeExtensionChooserDialog::ShowDialog( |
+ ChooserController* chooser_controller) const { |
+ web_modal::WebContentsModalDialogManager* manager = |
+ web_modal::WebContentsModalDialogManager::FromWebContents(web_contents()); |
+ if (manager) { |
+ // These objects will delete themselves when the dialog closes. |
+ ChooserDialogCocoa* chooser_dialog = |
+ new ChooserDialogCocoa(web_contents(), chooser_controller); |
+ chooser_dialog->ShowDialog(); |
+ } |
+} |