Chromium Code Reviews| Index: chrome/browser/ui/views/extensions/chooser_dialog_view.cc |
| diff --git a/chrome/browser/ui/views/extensions/chooser_dialog_view.cc b/chrome/browser/ui/views/extensions/chooser_dialog_view.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f4b347adec12b04471a325e5617540a59722236c |
| --- /dev/null |
| +++ b/chrome/browser/ui/views/extensions/chooser_dialog_view.cc |
| @@ -0,0 +1,85 @@ |
| +// 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. |
| + |
| +#include "chrome/browser/ui/views/extensions/chooser_dialog_view.h" |
| + |
| +#include "base/strings/utf_string_conversions.h" |
| +#include "chrome/browser/extensions/chrome_extension_chooser_dialog.h" |
| +#include "chrome/grit/generated_resources.h" |
| +#include "components/chooser_controller/chooser_controller.h" |
| +#include "components/constrained_window/constrained_window_views.h" |
| +#include "components/url_formatter/elide_url.h" |
| +#include "components/web_modal/web_contents_modal_dialog_manager.h" |
| +#include "content/public/browser/browser_thread.h" |
| +#include "extensions/browser/extension_registry.h" |
| +#include "ui/base/l10n/l10n_util.h" |
| +#include "ui/views/controls/table/table_view.h" |
| +#include "url/origin.h" |
| + |
| +ChooserDialogView::ChooserDialogView(content::WebContents* web_contents, |
| + ChooserController* controller) |
| + : ChooserContentView(nullptr, views::BubbleBorder::FLOAT, controller), |
| + web_contents_(web_contents) {} |
| + |
| +ChooserDialogView::~ChooserDialogView() {} |
| + |
| +base::string16 ChooserDialogView::GetWindowTitle() const { |
| + base::string16 chooser_title; |
| + url::Origin origin = chooser_controller()->GetOrigin(); |
| + content::BrowserContext* browser_context = web_contents_->GetBrowserContext(); |
| + extensions::ExtensionRegistry* extension_registry = |
| + extensions::ExtensionRegistry::Get(browser_context); |
| + if (extension_registry) { |
| + const extensions::Extension* extension = |
| + extension_registry->enabled_extensions().GetExtensionOrAppByURL( |
| + GURL(origin.Serialize())); |
| + if (extension) |
| + chooser_title = base::UTF8ToUTF16(extension->name()); |
| + } |
| + |
| + if (chooser_title.empty()) { |
| + chooser_title = url_formatter::FormatOriginForSecurityDisplay( |
| + origin, url_formatter::SchemeDisplay::OMIT_CRYPTOGRAPHIC); |
| + } |
| + |
| + return l10n_util::GetStringFUTF16(IDS_CHOOSER_BUBBLE_PROMPT, chooser_title); |
| +} |
| + |
| +ui::ModalType ChooserDialogView::GetModalType() const { |
| + return ui::MODAL_TYPE_CHILD; |
| +} |
| + |
| +void ChooserDialogView::DeleteDelegate() { |
| + delete this; |
|
msw
2016/06/03 19:46:24
Is this actually needed? DialogDelegateView::Delet
juncai
2016/06/07 23:19:39
removed.
Done.
|
| +} |
| + |
| +bool ChooserDialogView::Accept() { |
| + if (chooser_controller()) |
| + chooser_controller()->Select(table_view()->selection_model().active()); |
| + return true; |
| +} |
| + |
| +bool ChooserDialogView::Cancel() { |
| + if (chooser_controller()) |
| + chooser_controller()->Cancel(); |
| + return true; |
| +} |
| + |
| +bool ChooserDialogView::Close() { |
| + if (chooser_controller()) |
| + chooser_controller()->Close(); |
| + return true; |
| +} |
| + |
| +void ChromeExtensionChooserDialog::ShowDialog( |
| + ChooserController* chooser_controller) const { |
| + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| + |
| + web_modal::WebContentsModalDialogManager* manager = |
| + web_modal::WebContentsModalDialogManager::FromWebContents(web_contents_); |
| + if (manager) |
| + constrained_window::ShowWebModalDialogViews( |
| + new ChooserDialogView(web_contents_, chooser_controller), |
| + web_contents_); |
| +} |