summaryrefslogtreecommitdiffstats
path: root/chrome/browser/dom_ui/dom_ui_unittest.cc
blob: e335293f2be45e86c7dd2524a441d2bf8cc1e42d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
// Copyright (c) 2009 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/dom_ui/new_tab_ui.h"
#include "chrome/browser/renderer_host/test_render_view_host.h"
#include "chrome/common/url_constants.h"
#include "testing/gtest/include/gtest/gtest.h"

class DOMUITest : public RenderViewHostTestHarness {
 public:
  DOMUITest() {}

 private:
  DISALLOW_COPY_AND_ASSIGN(DOMUITest);
};

// Tests that the New Tab Page flags are correctly set and propogated by
// WebContents when we first navigate to a DOM UI page, then to a standard
// non-DOM-UI page.
TEST_F(DOMUITest, DOMUIToStandard) {
  // Start a pending load.
  GURL new_tab_url(chrome::kChromeUINewTabURL);
  controller()->LoadURL(new_tab_url, GURL(), PageTransition::LINK);

  // The navigation entry should be pending with no committed entry.
  ASSERT_TRUE(controller()->GetPendingEntry());
  ASSERT_FALSE(controller()->GetLastCommittedEntry());

  // Check the things the pending DOM UI should have set.
  EXPECT_FALSE(contents()->ShouldDisplayURL());
  EXPECT_FALSE(contents()->ShouldDisplayFavIcon());
  EXPECT_TRUE(contents()->IsBookmarkBarAlwaysVisible());
  EXPECT_TRUE(contents()->FocusLocationBarByDefault());

  // Now commit the load.
  rvh()->SendNavigate(1, new_tab_url);

  // The same flags should be set as before now that the load has committed.
  // Note that the location bar isn't focused now. Once the load commits, we
  // don't care about this flag, so this value is OK.
  EXPECT_FALSE(contents()->ShouldDisplayURL());
  EXPECT_FALSE(contents()->ShouldDisplayFavIcon());
  EXPECT_TRUE(contents()->IsBookmarkBarAlwaysVisible());
  EXPECT_FALSE(contents()->FocusLocationBarByDefault());

  // Start a pending navigation to a regular page.
  GURL next_url("http://google.com/");
  controller()->LoadURL(next_url, GURL(), PageTransition::LINK);

  // Check the flags. Some should reflect the new page (URL, title), some should
  // reflect the old one (bookmark bar) until it has committed.
  EXPECT_TRUE(contents()->ShouldDisplayURL());
  EXPECT_TRUE(contents()->ShouldDisplayFavIcon());
  EXPECT_TRUE(contents()->IsBookmarkBarAlwaysVisible());
  EXPECT_FALSE(contents()->FocusLocationBarByDefault());

  // Commit the regular page load. Note that we must send it to the "pending"
  // RenderViewHost, since this transition will also cause a process transition,
  // and our RVH pointer will be the "committed" one.
  static_cast<TestRenderViewHost*>(
      contents()->render_manager()->pending_render_view_host())->SendNavigate(
          2, next_url);

  // The state should now reflect a regular page.
  EXPECT_TRUE(contents()->ShouldDisplayURL());
  EXPECT_TRUE(contents()->ShouldDisplayFavIcon());
  EXPECT_FALSE(contents()->IsBookmarkBarAlwaysVisible());
  EXPECT_FALSE(contents()->FocusLocationBarByDefault());
}

TEST_F(DOMUITest, DOMUIToDOMUI) {
  // Do a load (this state is tested above).
  GURL new_tab_url(chrome::kChromeUINewTabURL);
  controller()->LoadURL(new_tab_url, GURL(), PageTransition::LINK);
  rvh()->SendNavigate(1, new_tab_url);

  // Start another pending load of the new tab page.
  controller()->LoadURL(new_tab_url, GURL(), PageTransition::LINK);
  rvh()->SendNavigate(2, new_tab_url);

  // The flags should be the same as the non-pending state.
  EXPECT_FALSE(contents()->ShouldDisplayURL());
  EXPECT_FALSE(contents()->ShouldDisplayFavIcon());
  EXPECT_TRUE(contents()->IsBookmarkBarAlwaysVisible());
  EXPECT_FALSE(contents()->FocusLocationBarByDefault());
}

TEST_F(DOMUITest, StandardToDOMUI) {
  // Start a pending navigation to a regular page.
  GURL std_url("http://google.com/");
  controller()->LoadURL(std_url, GURL(), PageTransition::LINK);

  // The state should now reflect the default.
  EXPECT_TRUE(contents()->ShouldDisplayURL());
  EXPECT_TRUE(contents()->ShouldDisplayFavIcon());
  EXPECT_FALSE(contents()->IsBookmarkBarAlwaysVisible());
  EXPECT_FALSE(contents()->FocusLocationBarByDefault());

  // Commit the load, the state should be the same.
  rvh()->SendNavigate(1, std_url);
  EXPECT_TRUE(contents()->ShouldDisplayURL());
  EXPECT_TRUE(contents()->ShouldDisplayFavIcon());
  EXPECT_FALSE(contents()->IsBookmarkBarAlwaysVisible());
  EXPECT_FALSE(contents()->FocusLocationBarByDefault());

  // Start a pending load for a DOMUI.
  GURL new_tab_url(chrome::kChromeUINewTabURL);
  controller()->LoadURL(new_tab_url, GURL(), PageTransition::LINK);
  EXPECT_FALSE(contents()->ShouldDisplayURL());
  EXPECT_FALSE(contents()->ShouldDisplayFavIcon());
  EXPECT_FALSE(contents()->IsBookmarkBarAlwaysVisible());
  EXPECT_TRUE(contents()->FocusLocationBarByDefault());

  // Committing DOM UI is tested above.
}