blob: c5c233c4326a49dbbaf86537ae9d50e89aa227b8 [file] [log] [blame]
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/browser_dialogs.h"
#include <memory>
#include "build/build_config.h"
#include "chrome/browser/extensions/api/chrome_device_permissions_prompt.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/views/bookmarks/bookmark_editor_view.h"
#include "chrome/browser/ui/views/frame/browser_view.h"
#include "chrome/browser/ui/views/task_manager_view.h"
#include "components/constrained_window/constrained_window_views.h"
#include "components/permissions/chooser_controller.h"
#include "ui/base/interaction/element_identifier.h"
#include "ui/views/bubble/bubble_dialog_model_host.h"
#include "ui/views/interaction/element_tracker_views.h"
// This file provides definitions of desktop browser dialog-creation methods for
// all toolkit-views platforms.
// static
void BookmarkEditor::Show(gfx::NativeWindow parent_window,
Profile* profile,
const EditDetails& details,
Configuration configuration,
OnSaveCallback on_save_callback) {
auto editor = std::make_unique<BookmarkEditorView>(
profile, details.parent_node, details, configuration,
std::move(on_save_callback));
editor->Show(parent_window);
editor.release(); // BookmarkEditorView is self-deleting
}
void ChromeDevicePermissionsPrompt::ShowDialog() {
ShowDialogViews();
}
namespace chrome {
#if !BUILDFLAG(IS_MAC)
task_manager::TaskManagerTableModel* ShowTaskManager(Browser* browser) {
return task_manager::TaskManagerView::Show(browser);
}
void HideTaskManager() {
task_manager::TaskManagerView::Hide();
}
#endif
views::Widget* ShowBrowserModal(Browser* browser,
std::unique_ptr<ui::DialogModel> dialog_model) {
return constrained_window::ShowBrowserModal(
std::move(dialog_model), browser->window()->GetNativeWindow());
}
// TODO(pbos): Move bubble showing out of this file (like ShowBrowserModal) so
// that this code can be used for showing bubbles outside Browser too.
void ShowBubble(Browser* browser,
ui::ElementIdentifier anchor_element_id,
std::unique_ptr<ui::DialogModel> dialog_model) {
views::View* const anchor_view =
views::ElementTrackerViews::GetInstance()->GetUniqueView(
anchor_element_id,
views::ElementTrackerViews::GetContextForView(
BrowserView::GetBrowserViewForBrowser(browser)));
DCHECK(anchor_view);
// TODO(pbos): Add a version of BubbleBorder::Arrow that infers position
// automatically based on the anchor's position relative to its widget.
auto bubble = std::make_unique<views::BubbleDialogModelHost>(
std::move(dialog_model), anchor_view, views::BubbleBorder::TOP_RIGHT);
views::BubbleDialogDelegate::CreateBubble(std::move(bubble))->Show();
}
} // namespace chrome