1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/tab_modal_confirm_dialog_browsertest.h" 6 7#include "base/bind.h" 8#include "base/strings/utf_string_conversions.h" 9#include "chrome/browser/lifetime/application_lifetime.h" 10#include "chrome/browser/ui/browser.h" 11#include "chrome/browser/ui/browser_dialogs.h" 12#include "chrome/browser/ui/tabs/tab_strip_model.h" 13#include "chrome/test/base/ui_test_utils.h" 14#include "content/public/browser/page_navigator.h" 15#include "content/public/browser/web_contents.h" 16#include "testing/gtest/include/gtest/gtest.h" 17#include "ui/base/window_open_disposition.h" 18 19MockTabModalConfirmDialogDelegate::MockTabModalConfirmDialogDelegate( 20 content::WebContents* web_contents, 21 Delegate* delegate) 22 : TabModalConfirmDialogDelegate(web_contents), 23 delegate_(delegate) { 24} 25 26MockTabModalConfirmDialogDelegate::~MockTabModalConfirmDialogDelegate() { 27} 28 29string16 MockTabModalConfirmDialogDelegate::GetTitle() { 30 return string16(); 31} 32 33string16 MockTabModalConfirmDialogDelegate::GetMessage() { 34 return string16(); 35} 36 37void MockTabModalConfirmDialogDelegate::OnAccepted() { 38 if (delegate_) 39 delegate_->OnAccepted(); 40} 41 42void MockTabModalConfirmDialogDelegate::OnCanceled() { 43 if (delegate_) 44 delegate_->OnCanceled(); 45} 46 47void MockTabModalConfirmDialogDelegate::OnClosed() { 48 if (delegate_) 49 delegate_->OnClosed(); 50} 51 52TabModalConfirmDialogTest::TabModalConfirmDialogTest() 53 : delegate_(NULL), 54 dialog_(NULL), 55 accepted_count_(0), 56 canceled_count_(0), 57 closed_count_(0) { 58} 59 60void TabModalConfirmDialogTest::SetUpOnMainThread() { 61 delegate_ = new MockTabModalConfirmDialogDelegate( 62 browser()->tab_strip_model()->GetActiveWebContents(), this); 63 dialog_ = TabModalConfirmDialog::Create( 64 delegate_, browser()->tab_strip_model()->GetActiveWebContents()); 65 content::RunAllPendingInMessageLoop(); 66} 67 68void TabModalConfirmDialogTest::CleanUpOnMainThread() { 69 content::RunAllPendingInMessageLoop(); 70} 71 72void TabModalConfirmDialogTest::OnAccepted() { 73 ++accepted_count_; 74} 75 76void TabModalConfirmDialogTest::OnCanceled() { 77 ++canceled_count_; 78} 79 80void TabModalConfirmDialogTest::OnClosed() { 81 ++closed_count_; 82} 83 84IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, Accept) { 85 dialog_->AcceptTabModalDialog(); 86 EXPECT_EQ(1, accepted_count_); 87 EXPECT_EQ(0, canceled_count_); 88 EXPECT_EQ(0, closed_count_); 89} 90 91IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, Cancel) { 92 dialog_->CancelTabModalDialog(); 93 EXPECT_EQ(0, accepted_count_); 94 EXPECT_EQ(1, canceled_count_); 95 EXPECT_EQ(0, closed_count_); 96} 97 98IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, CancelSelf) { 99 delegate_->Cancel(); 100 EXPECT_EQ(0, accepted_count_); 101 EXPECT_EQ(1, canceled_count_); 102 EXPECT_EQ(0, closed_count_); 103} 104 105IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, Close) { 106 dialog_->CloseDialog(); 107 EXPECT_EQ(0, accepted_count_); 108 EXPECT_EQ(0, canceled_count_); 109 EXPECT_EQ(1, closed_count_); 110} 111 112IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, CloseSelf) { 113 delegate_->Close(); 114 EXPECT_EQ(0, accepted_count_); 115 EXPECT_EQ(0, canceled_count_); 116 EXPECT_EQ(1, closed_count_); 117} 118 119IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, Navigate) { 120 content::OpenURLParams params(GURL("about:blank"), 121 content::Referrer(), 122 CURRENT_TAB, 123 content::PAGE_TRANSITION_LINK, 124 false); 125 browser()->tab_strip_model()->GetActiveWebContents()->OpenURL(params); 126 127 EXPECT_EQ(0, accepted_count_); 128 EXPECT_EQ(0, canceled_count_); 129 EXPECT_EQ(1, closed_count_); 130} 131 132IN_PROC_BROWSER_TEST_F(TabModalConfirmDialogTest, Quit) { 133 base::MessageLoopForUI::current()->PostTask(FROM_HERE, 134 base::Bind(&chrome::AttemptExit)); 135 content::RunMessageLoop(); 136 EXPECT_EQ(0, accepted_count_); 137 EXPECT_EQ(0, canceled_count_); 138 EXPECT_EQ(1, closed_count_); 139} 140