Chromium Code Reviews| 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); |
| + } |
| +} |