172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/logging.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h"
113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/history/history_types.h"
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h"
134a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser_list.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/url_constants.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/browser_with_test_window_test.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/test/test_browser_window.h"
173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/test/testing_profile.h"
18dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/test_tab_contents.h"
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "googleurl/src/gurl.h"
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gmock/include/gmock/gmock.h"
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "testing/gtest/include/gtest/gtest.h"
2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/rect.h"
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace {
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TestTabContentsDelegate : public HtmlDialogTabContentsDelegate {
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  explicit TestTabContentsDelegate(Profile* profile)
29513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    : HtmlDialogTabContentsDelegate(profile) {}
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~TestTabContentsDelegate() {
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void MoveContents(TabContents* source, const gfx::Rect& pos) {}
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TestTabContentsDelegate);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass HtmlDialogTabContentsDelegateTest : public BrowserWithTestWindowTest {
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void SetUp() {
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    BrowserWithTestWindowTest::SetUp();
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    test_tab_contents_delegate_.reset(new TestTabContentsDelegate(profile()));
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void TearDown() {
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    test_tab_contents_delegate_.reset(NULL);
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    BrowserWithTestWindowTest::TearDown();
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  scoped_ptr<TestTabContentsDelegate> test_tab_contents_delegate_;
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(HtmlDialogTabContentsDelegateTest, DoNothingMethodsTest) {
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // None of the following calls should do anything.
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_TRUE(test_tab_contents_delegate_->IsPopup(NULL));
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  scoped_refptr<history::HistoryAddPageArgs> should_add_args(
603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      new history::HistoryAddPageArgs(
613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          GURL(), base::Time::Now(), 0, 0, GURL(), history::RedirectList(),
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          PageTransition::TYPED, history::SOURCE_SYNCED, false));
633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  EXPECT_FALSE(test_tab_contents_delegate_->ShouldAddNavigationToHistory(
643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                   *should_add_args, NavigationType::NEW_PAGE));
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_tab_contents_delegate_->NavigationStateChanged(NULL, 0);
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_tab_contents_delegate_->ActivateContents(NULL);
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_tab_contents_delegate_->LoadingStateChanged(NULL);
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_tab_contents_delegate_->CloseContents(NULL);
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_tab_contents_delegate_->UpdateTargetURL(NULL, GURL());
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_tab_contents_delegate_->MoveContents(NULL, gfx::Rect());
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, browser()->tab_count());
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(1U, BrowserList::size());
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(HtmlDialogTabContentsDelegateTest, OpenURLFromTabTest) {
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_tab_contents_delegate_->OpenURLFromTab(
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NULL, GURL(chrome::kAboutBlankURL), GURL(),
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    NEW_FOREGROUND_TAB, PageTransition::LINK);
79513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // This should create a new foreground tab in the existing browser.
80513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  EXPECT_EQ(1, browser()->tab_count());
81513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  EXPECT_EQ(1U, BrowserList::size());
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
84513209b27ff55e2841eac0e4120199c23acce758Ben MurdochTEST_F(HtmlDialogTabContentsDelegateTest, AddNewContentsForegroundTabTest) {
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  TabContents* contents =
863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      new TabContents(profile(), NULL, MSG_ROUTING_NONE, NULL, NULL);
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_tab_contents_delegate_->AddNewContents(
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NULL, contents, NEW_FOREGROUND_TAB, gfx::Rect(), false);
89513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // This should create a new foreground tab in the existing browser.
90513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  EXPECT_EQ(1, browser()->tab_count());
91513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  EXPECT_EQ(1U, BrowserList::size());
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTEST_F(HtmlDialogTabContentsDelegateTest, DetachTest) {
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(profile(), test_tab_contents_delegate_->profile());
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_tab_contents_delegate_->Detach();
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(NULL, test_tab_contents_delegate_->profile());
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Now, none of the following calls should do anything.
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_tab_contents_delegate_->OpenURLFromTab(
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NULL, GURL(chrome::kAboutBlankURL), GURL(),
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      NEW_FOREGROUND_TAB, PageTransition::LINK);
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  test_tab_contents_delegate_->AddNewContents(NULL, NULL, NEW_FOREGROUND_TAB,
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                              gfx::Rect(), false);
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(0, browser()->tab_count());
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  EXPECT_EQ(1U, BrowserList::size());
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace
109