blob: e21631e36499400d38b365b614995d9a692aa221 [file] [log] [blame]
// Copyright 2012 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/tab_modal_confirm_dialog_browsertest.h"
#include <memory>
#include <utility>
#include "base/functional/bind.h"
#include "base/location.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task/single_thread_task_runner.h"
#include "chrome/browser/lifetime/application_lifetime.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_dialogs.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "content/public/browser/page_navigator.h"
#include "content/public/browser/web_contents.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/test_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/window_open_disposition.h"
MockTabModalConfirmDialogDelegate::MockTabModalConfirmDialogDelegate(
content::WebContents* web_contents,
Delegate* delegate)
: TabModalConfirmDialogDelegate(web_contents), delegate_(delegate) {}
MockTabModalConfirmDialogDelegate::~MockTabModalConfirmDialogDelegate() {}
std::u16string MockTabModalConfirmDialogDelegate::GetTitle() {
return std::u16string();
}
std::u16string MockTabModalConfirmDialogDelegate::GetDialogMessage() {
return std::u16string();
}
void MockTabModalConfirmDialogDelegate::OnAccepted() {
if (delegate_)
delegate_->OnAccepted();
}
void MockTabModalConfirmDialogDelegate::OnCanceled() {
if (delegate_)
delegate_->OnCanceled();
}
void MockTabModalConfirmDialogDelegate::OnClosed() {
if (delegate_)
delegate_->OnClosed();
}
TabModalConfirmDialogTest::TabModalConfirmDialogTest()
: delegate_(nullptr),
dialog_(nullptr),
accepted_count_(0),
canceled_count_(0),
closed_count_(0) {}
void TabModalConfirmDialogTest::SetUpOnMainThread() {
auto delegate = std::make_unique<MockTabModalConfirmDialogDelegate>(
browser()->tab_strip_model()->GetActiveWebContents(), this);
delegate_ = delegate.get();
dialog_ = TabModalConfirmDialog::Create(
std::move(delegate),
browser()->tab_strip_model()->GetActiveWebContents());
content::RunAllPendingInMessageLoop();
}
void TabModalConfirmDialogTest::TearDownOnMainThread() {
content::RunAllPendingInMessageLoop();
}
void TabModalConfirmDialogTest::OnAccepted() {
++accepted_count_;
}
void TabModalConfirmDialogTest::OnCanceled() {
++canceled_count_;
}
void TabModalConfirmDialogTest::OnClosed() {
++closed_count_;
}
IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, Accept) {
dialog_->AcceptTabModalDialog();
EXPECT_EQ(1, accepted_count_);
EXPECT_EQ(0, canceled_count_);
EXPECT_EQ(0, closed_count_);
}
IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, Cancel) {
dialog_->CancelTabModalDialog();
EXPECT_EQ(0, accepted_count_);
EXPECT_EQ(1, canceled_count_);
EXPECT_EQ(0, closed_count_);
}
IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, CancelSelf) {
delegate_->Cancel();
EXPECT_EQ(0, accepted_count_);
EXPECT_EQ(1, canceled_count_);
EXPECT_EQ(0, closed_count_);
}
IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, Close) {
dialog_->CloseDialog();
EXPECT_EQ(0, accepted_count_);
EXPECT_EQ(0, canceled_count_);
EXPECT_EQ(1, closed_count_);
}
IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, CloseSelf) {
delegate_->Close();
EXPECT_EQ(0, accepted_count_);
EXPECT_EQ(0, canceled_count_);
EXPECT_EQ(1, closed_count_);
}
IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, Navigate) {
content::OpenURLParams params(GURL("about:blank"), content::Referrer(),
WindowOpenDisposition::CURRENT_TAB,
ui::PAGE_TRANSITION_LINK, false);
browser()->tab_strip_model()->GetActiveWebContents()->OpenURL(
params, /*navigation_handle_callback=*/{});
EXPECT_EQ(0, accepted_count_);
EXPECT_EQ(0, canceled_count_);
EXPECT_EQ(1, closed_count_);
}
IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, Quit) {
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(&chrome::AttemptExit));
RunUntilBrowserProcessQuits();
EXPECT_EQ(0, accepted_count_);
EXPECT_EQ(0, canceled_count_);
EXPECT_EQ(1, closed_count_);
}