Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(445)

Side by Side Diff: chrome/browser/ui/webui/web_ui_unittest.cc

Issue 14080004: Remove some chrome-specific methods from content::WebUI. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix browser_test Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/ui/webui/sync_setup_handler_unittest.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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/favicon/favicon_tab_helper.h"
6 #include "chrome/common/url_constants.h"
7 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
8 #include "chrome/test/base/testing_profile.h"
9 #include "content/public/browser/navigation_controller.h"
10 #include "content/public/browser/site_instance.h"
11 #include "content/public/browser/web_contents.h"
12 #include "content/public/browser/web_contents_delegate.h"
13 #include "content/public/common/referrer.h"
14 #include "content/public/test/test_browser_thread.h"
15 #include "content/public/test/test_renderer_host.h"
16 #include "content/public/test/web_contents_tester.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18
19 using content::BrowserThread;
20 using content::NavigationController;
21 using content::RenderViewHost;
22 using content::RenderViewHostTester;
23 using content::SiteInstance;
24 using content::WebContents;
25 using content::WebContentsTester;
26
27 class WebUITest : public ChromeRenderViewHostTestHarness {
28 public:
29 WebUITest() : ui_thread_(BrowserThread::UI, MessageLoop::current()) {}
30
31 // Tests navigating with a Web UI from a fresh (nothing pending or committed)
32 // state, through pending, committed, then another navigation. The first page
33 // ID that we should use is passed as a parameter. We'll use the next two
34 // values. This must be increasing for the life of the tests.
35 static void DoNavigationTest(WebContents* web_contents, int page_id) {
36 NavigationController* controller = &web_contents->GetController();
37 FaviconTabHelper* favicon_tab_helper =
38 FaviconTabHelper::FromWebContents(web_contents);
39
40 // Start a pending load.
41 GURL new_tab_url(chrome::kChromeUINewTabURL);
42 controller->LoadURL(new_tab_url, content::Referrer(),
43 content::PAGE_TRANSITION_LINK,
44 std::string());
45
46 // The navigation entry should be pending with no committed entry.
47 ASSERT_TRUE(controller->GetPendingEntry());
48 ASSERT_FALSE(controller->GetLastCommittedEntry());
49
50 // Check the things the pending Web UI should have set.
51 EXPECT_FALSE(favicon_tab_helper->ShouldDisplayFavicon());
52 EXPECT_TRUE(web_contents->FocusLocationBarByDefault());
53
54 // Now commit the load.
55 RenderViewHostTester::For(
56 web_contents->GetRenderViewHost())->SendNavigate(page_id, new_tab_url);
57
58 // The same flags should be set as before now that the load has committed.
59 EXPECT_FALSE(favicon_tab_helper->ShouldDisplayFavicon());
60 EXPECT_TRUE(web_contents->FocusLocationBarByDefault());
61
62 // Start a pending navigation to a regular page.
63 GURL next_url("http://google.com/");
64 controller->LoadURL(next_url, content::Referrer(),
65 content::PAGE_TRANSITION_LINK,
66 std::string());
67
68 // Check the flags. Some should reflect the new page (URL, title), some
69 // should reflect the old one (bookmark bar) until it has committed.
70 EXPECT_TRUE(favicon_tab_helper->ShouldDisplayFavicon());
71 EXPECT_FALSE(web_contents->FocusLocationBarByDefault());
72
73 // Commit the regular page load. Note that we must send it to the "pending"
74 // RenderViewHost if there is one, since this transition will also cause a
75 // process transition, and our RVH pointer will be the "committed" one.
76 // In the second call to this function from WebUIToStandard, it won't
77 // actually be pending, which is the point of this test.
78 RenderViewHost* pending_rvh =
79 RenderViewHostTester::GetPendingForController(controller);
80 if (pending_rvh) {
81 RenderViewHostTester::For(pending_rvh)->
82 SendNavigate(page_id + 1, next_url);
83 } else {
84 RenderViewHostTester::For(web_contents->GetRenderViewHost())->
85 SendNavigate(page_id + 1, next_url);
86 }
87
88 // The state should now reflect a regular page.
89 EXPECT_TRUE(favicon_tab_helper->ShouldDisplayFavicon());
90 EXPECT_FALSE(web_contents->FocusLocationBarByDefault());
91 }
92
93 private:
94 virtual void SetUp() OVERRIDE {
95 ChromeRenderViewHostTestHarness::SetUp();
96 FaviconTabHelper::CreateForWebContents(web_contents());
97 }
98
99 content::TestBrowserThread ui_thread_;
100
101 DISALLOW_COPY_AND_ASSIGN(WebUITest);
102 };
103
104 // Tests that the New Tab Page flags are correctly set and propogated by
105 // WebContents when we first navigate to a Web UI page, then to a standard
106 // non-DOM-UI page.
107 TEST_F(WebUITest, WebUIToStandard) {
108 DoNavigationTest(web_contents(), 1);
109
110 // Test the case where we're not doing the initial navigation. This is
111 // slightly different than the very-first-navigation case since the
112 // SiteInstance will be the same (the original WebContents must still be
113 // alive), which will trigger different behavior in RenderViewHostManager.
114 scoped_ptr<WebContents> contents2(
115 WebContentsTester::CreateTestWebContents(profile(), NULL));
116 FaviconTabHelper::CreateForWebContents(contents2.get());
117
118 DoNavigationTest(contents2.get(), 101);
119 }
120
121 TEST_F(WebUITest, WebUIToWebUI) {
122 // Do a load (this state is tested above).
123 GURL new_tab_url(chrome::kChromeUINewTabURL);
124 controller().LoadURL(new_tab_url, content::Referrer(),
125 content::PAGE_TRANSITION_LINK,
126 std::string());
127 rvh_tester()->SendNavigate(1, new_tab_url);
128
129 // Start another pending load of the new tab page.
130 controller().LoadURL(new_tab_url, content::Referrer(),
131 content::PAGE_TRANSITION_LINK,
132 std::string());
133 rvh_tester()->SendNavigate(2, new_tab_url);
134
135 // The flags should be the same as the non-pending state.
136 FaviconTabHelper* favicon_tab_helper =
137 FaviconTabHelper::FromWebContents(web_contents());
138 EXPECT_FALSE(favicon_tab_helper->ShouldDisplayFavicon());
139 EXPECT_TRUE(web_contents()->FocusLocationBarByDefault());
140 }
141
142 TEST_F(WebUITest, StandardToWebUI) {
143 // Start a pending navigation to a regular page.
144 GURL std_url("http://google.com/");
145
146 controller().LoadURL(std_url, content::Referrer(),
147 content::PAGE_TRANSITION_LINK,
148 std::string());
149
150 FaviconTabHelper* favicon_tab_helper =
151 FaviconTabHelper::FromWebContents(web_contents());
152 // The state should now reflect the default.
153 EXPECT_TRUE(favicon_tab_helper->ShouldDisplayFavicon());
154 EXPECT_FALSE(web_contents()->FocusLocationBarByDefault());
155
156 // Commit the load, the state should be the same.
157 rvh_tester()->SendNavigate(1, std_url);
158 EXPECT_TRUE(favicon_tab_helper->ShouldDisplayFavicon());
159 EXPECT_FALSE(web_contents()->FocusLocationBarByDefault());
160
161 // Start a pending load for a WebUI.
162 GURL new_tab_url(chrome::kChromeUINewTabURL);
163 controller().LoadURL(new_tab_url, content::Referrer(),
164 content::PAGE_TRANSITION_LINK,
165 std::string());
166 EXPECT_TRUE(favicon_tab_helper->ShouldDisplayFavicon());
167 EXPECT_TRUE(web_contents()->FocusLocationBarByDefault());
168
169 // Committing Web UI is tested above.
170 }
171
172 namespace {
173
174 class TestDelegate : public content::WebContentsDelegate {
175 public:
176 TestDelegate() : focus_count_(0) {}
177
178 virtual void SetFocusToLocationBar(bool select_all) OVERRIDE {
179 focus_count_++;
180 }
181
182 int focus_count() const { return focus_count_; }
183
184 private:
185 int focus_count_;
186 };
187
188 }
189
190 TEST_F(WebUITest, FocusOnNavigate) {
191 // Setup. |wc| will be used to track when we try to focus the location bar.
192 WebContents* wc = WebContentsTester::CreateTestWebContents(
193 web_contents()->GetBrowserContext(),
194 SiteInstance::Create(web_contents()->GetBrowserContext()));
195 TestDelegate delegate;
196 wc->SetDelegate(&delegate);
197 wc->GetController().CopyStateFrom(controller());
198 SetContents(wc);
199 int page_id = 200;
200
201 // Load the NTP.
202 GURL new_tab_url(chrome::kChromeUINewTabURL);
203 controller().LoadURL(new_tab_url, content::Referrer(),
204 content::PAGE_TRANSITION_LINK,
205 std::string());
206 rvh_tester()->SendNavigate(page_id, new_tab_url);
207
208 // Navigate to another page.
209 GURL next_url("http://google.com/");
210 int next_page_id = page_id + 1;
211 controller().LoadURL(next_url, content::Referrer(),
212 content::PAGE_TRANSITION_LINK,
213 std::string());
214 RenderViewHost* old_rvh = rvh();
215 RenderViewHostTester::For(old_rvh)->SendShouldCloseACK(true);
216 RenderViewHostTester::For(
217 pending_rvh())->SendNavigate(next_page_id, next_url);
218 RenderViewHostTester::For(old_rvh)->SimulateSwapOutACK();
219
220 // Navigate back. Should focus the location bar.
221 int focus_called = delegate.focus_count();
222 ASSERT_TRUE(controller().CanGoBack());
223 controller().GoBack();
224 old_rvh = rvh();
225 RenderViewHostTester::For(old_rvh)->SendShouldCloseACK(true);
226 RenderViewHostTester::For(pending_rvh())->SendNavigate(page_id, new_tab_url);
227 RenderViewHostTester::For(old_rvh)->SimulateSwapOutACK();
228 EXPECT_LT(focus_called, delegate.focus_count());
229
230 // Navigate forward. Shouldn't focus the location bar.
231 focus_called = delegate.focus_count();
232 ASSERT_TRUE(controller().CanGoForward());
233 controller().GoForward();
234 old_rvh = rvh();
235 RenderViewHostTester::For(old_rvh)->SendShouldCloseACK(true);
236 RenderViewHostTester::For(
237 pending_rvh())->SendNavigate(next_page_id, next_url);
238 RenderViewHostTester::For(old_rvh)->SimulateSwapOutACK();
239 EXPECT_EQ(focus_called, delegate.focus_count());
240 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/sync_setup_handler_unittest.cc ('k') | chrome/chrome_tests_unit.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698