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..dfa0902c72b640e4ed18f97060c3654c5b884375 |
--- /dev/null |
+++ b/chrome/browser/ui/cocoa/extensions/chooser_dialog_cocoa.mm |
@@ -0,0 +1,68 @@ |
+// 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 |
+ initWithChooserController:chooser_controller_]); |
+ 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); |
+} |
+ |
+ChooserDialogCocoa::~ChooserDialogCocoa() {} |
+ |
+void ChooserDialogCocoa::OnConstrainedWindowClosed( |
+ ConstrainedWindowMac* window) { |
+ base::ThreadTaskRunnerHandle::Get()->DeleteSoon(FROM_HERE, this); |
+} |
+ |
+void ChooserDialogCocoa::OnOptionsInitialized() { |
+ [chooser_dialog_cocoa_controller_ onOptionsInitialized]; |
+} |
+ |
+void ChooserDialogCocoa::OnOptionAdded(size_t index) { |
+ [chooser_dialog_cocoa_controller_ |
+ onOptionAdded:static_cast<NSInteger>(index)]; |
Robert Sesek
2016/05/23 20:13:53
NSUInteger is an unsigned version that should be i
juncai
2016/05/27 21:30:37
Done.
|
+} |
+ |
+void ChooserDialogCocoa::OnOptionRemoved(size_t index) { |
+ [chooser_dialog_cocoa_controller_ |
+ onOptionRemoved:static_cast<NSInteger>(index)]; |
+} |
+ |
+void ChooserDialogCocoa::Dismissed() { |
+ 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. |
+ new ChooserDialogCocoa(web_contents(), chooser_controller); |
+ } |
+} |