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

Side by Side Diff: content/browser/renderer_host/render_view_host_manager_browsertest.cc

Issue 9015022: Replace most of Browser::GetSelectedTabContents calls into Browser::GetSelectedWebContents. I've ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 8 years, 11 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/file_util.h" 5 #include "base/file_util.h"
6 #include "base/memory/ref_counted.h" 6 #include "base/memory/ref_counted.h"
7 #include "base/path_service.h" 7 #include "base/path_service.h"
8 #include "chrome/browser/ui/browser.h" 8 #include "chrome/browser/ui/browser.h"
9 #include "chrome/test/base/in_process_browser_test.h" 9 #include "chrome/test/base/in_process_browser_test.h"
10 #include "chrome/test/base/ui_test_utils.h" 10 #include "chrome/test/base/ui_test_utils.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 std::string replacement_path; 53 std::string replacement_path;
54 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement( 54 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement(
55 "files/click-noreferrer-links.html", 55 "files/click-noreferrer-links.html",
56 https_server.host_port_pair(), 56 https_server.host_port_pair(),
57 &replacement_path)); 57 &replacement_path));
58 ui_test_utils::NavigateToURL(browser(), 58 ui_test_utils::NavigateToURL(browser(),
59 test_server()->GetURL(replacement_path)); 59 test_server()->GetURL(replacement_path));
60 60
61 // Get the original SiteInstance for later comparison. 61 // Get the original SiteInstance for later comparison.
62 scoped_refptr<SiteInstance> orig_site_instance( 62 scoped_refptr<SiteInstance> orig_site_instance(
63 browser()->GetSelectedTabContents()->GetSiteInstance()); 63 browser()->GetSelectedWebContents()->GetSiteInstance());
64 EXPECT_TRUE(orig_site_instance != NULL); 64 EXPECT_TRUE(orig_site_instance != NULL);
65 65
66 // Test clicking a rel=noreferrer + target=blank link. 66 // Test clicking a rel=noreferrer + target=blank link.
67 bool success = false; 67 bool success = false;
68 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( 68 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
69 browser()->GetSelectedTabContents()->GetRenderViewHost(), L"", 69 browser()->GetSelectedWebContents()->GetRenderViewHost(), L"",
70 L"window.domAutomationController.send(clickNoRefTargetBlankLink());", 70 L"window.domAutomationController.send(clickNoRefTargetBlankLink());",
71 &success)); 71 &success));
72 EXPECT_TRUE(success); 72 EXPECT_TRUE(success);
73 73
74 // Wait for the tab to open. 74 // Wait for the tab to open.
75 if (browser()->tab_count() < 2) 75 if (browser()->tab_count() < 2)
76 ui_test_utils::WaitForNewTab(browser()); 76 ui_test_utils::WaitForNewTab(browser());
77 77
78 // Opens in new tab. 78 // Opens in new tab.
79 EXPECT_EQ(2, browser()->tab_count()); 79 EXPECT_EQ(2, browser()->tab_count());
80 EXPECT_EQ(1, browser()->active_index()); 80 EXPECT_EQ(1, browser()->active_index());
81 EXPECT_EQ("/files/title2.html", 81 EXPECT_EQ("/files/title2.html",
82 browser()->GetSelectedTabContents()->GetURL().path()); 82 browser()->GetSelectedWebContents()->GetURL().path());
83 83
84 // Wait for the cross-site transition in the new tab to finish. 84 // Wait for the cross-site transition in the new tab to finish.
85 ui_test_utils::WaitForLoadStop(browser()->GetSelectedTabContents()); 85 ui_test_utils::WaitForLoadStop(browser()->GetSelectedWebContents());
86 EXPECT_FALSE(browser()->GetSelectedTabContents()-> 86 EXPECT_FALSE(browser()->GetSelectedWebContents()->
87 GetRenderManagerForTesting()->pending_render_view_host()); 87 GetRenderManagerForTesting()->pending_render_view_host());
88 88
89 // Should have a new SiteInstance. 89 // Should have a new SiteInstance.
90 scoped_refptr<SiteInstance> noref_blank_site_instance( 90 scoped_refptr<SiteInstance> noref_blank_site_instance(
91 browser()->GetSelectedTabContents()->GetSiteInstance()); 91 browser()->GetSelectedWebContents()->GetSiteInstance());
92 EXPECT_NE(orig_site_instance, noref_blank_site_instance); 92 EXPECT_NE(orig_site_instance, noref_blank_site_instance);
93 } 93 }
94 94
95 // Test for crbug.com/24447. Following a cross-site link with just 95 // Test for crbug.com/24447. Following a cross-site link with just
96 // target=_blank should not create a new SiteInstance. 96 // target=_blank should not create a new SiteInstance.
97 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, 97 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest,
98 DontSwapProcessWithOnlyTargetBlank) { 98 DontSwapProcessWithOnlyTargetBlank) {
99 // Start two servers with different sites. 99 // Start two servers with different sites.
100 ASSERT_TRUE(test_server()->Start()); 100 ASSERT_TRUE(test_server()->Start());
101 net::TestServer https_server( 101 net::TestServer https_server(
102 net::TestServer::TYPE_HTTPS, 102 net::TestServer::TYPE_HTTPS,
103 FilePath(FILE_PATH_LITERAL("chrome/test/data"))); 103 FilePath(FILE_PATH_LITERAL("chrome/test/data")));
104 ASSERT_TRUE(https_server.Start()); 104 ASSERT_TRUE(https_server.Start());
105 105
106 // Load a page with links that open in a new window. 106 // Load a page with links that open in a new window.
107 std::string replacement_path; 107 std::string replacement_path;
108 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement( 108 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement(
109 "files/click-noreferrer-links.html", 109 "files/click-noreferrer-links.html",
110 https_server.host_port_pair(), 110 https_server.host_port_pair(),
111 &replacement_path)); 111 &replacement_path));
112 ui_test_utils::NavigateToURL(browser(), 112 ui_test_utils::NavigateToURL(browser(),
113 test_server()->GetURL(replacement_path)); 113 test_server()->GetURL(replacement_path));
114 114
115 // Get the original SiteInstance for later comparison. 115 // Get the original SiteInstance for later comparison.
116 scoped_refptr<SiteInstance> orig_site_instance( 116 scoped_refptr<SiteInstance> orig_site_instance(
117 browser()->GetSelectedTabContents()->GetSiteInstance()); 117 browser()->GetSelectedWebContents()->GetSiteInstance());
118 EXPECT_TRUE(orig_site_instance != NULL); 118 EXPECT_TRUE(orig_site_instance != NULL);
119 119
120 // Test clicking a target=blank link. 120 // Test clicking a target=blank link.
121 bool success = false; 121 bool success = false;
122 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( 122 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
123 browser()->GetSelectedTabContents()->GetRenderViewHost(), L"", 123 browser()->GetSelectedWebContents()->GetRenderViewHost(), L"",
124 L"window.domAutomationController.send(clickTargetBlankLink());", 124 L"window.domAutomationController.send(clickTargetBlankLink());",
125 &success)); 125 &success));
126 EXPECT_TRUE(success); 126 EXPECT_TRUE(success);
127 127
128 // Wait for the tab to open. 128 // Wait for the tab to open.
129 if (browser()->tab_count() < 2) 129 if (browser()->tab_count() < 2)
130 ui_test_utils::WaitForNewTab(browser()); 130 ui_test_utils::WaitForNewTab(browser());
131 131
132 // Opens in new tab. 132 // Opens in new tab.
133 EXPECT_EQ(2, browser()->tab_count()); 133 EXPECT_EQ(2, browser()->tab_count());
134 EXPECT_EQ(1, browser()->active_index()); 134 EXPECT_EQ(1, browser()->active_index());
135 135
136 // Wait for the cross-site transition in the new tab to finish. 136 // Wait for the cross-site transition in the new tab to finish.
137 ui_test_utils::WaitForLoadStop(browser()->GetSelectedTabContents()); 137 ui_test_utils::WaitForLoadStop(browser()->GetSelectedWebContents());
138 EXPECT_EQ("/files/title2.html", 138 EXPECT_EQ("/files/title2.html",
139 browser()->GetSelectedTabContents()->GetURL().path()); 139 browser()->GetSelectedWebContents()->GetURL().path());
140 140
141 // Should have the same SiteInstance. 141 // Should have the same SiteInstance.
142 scoped_refptr<SiteInstance> blank_site_instance( 142 scoped_refptr<SiteInstance> blank_site_instance(
143 browser()->GetSelectedTabContents()->GetSiteInstance()); 143 browser()->GetSelectedWebContents()->GetSiteInstance());
144 EXPECT_EQ(orig_site_instance, blank_site_instance); 144 EXPECT_EQ(orig_site_instance, blank_site_instance);
145 } 145 }
146 146
147 // Test for crbug.com/24447. Following a cross-site link with rel=noreferrer 147 // Test for crbug.com/24447. Following a cross-site link with rel=noreferrer
148 // and no target=_blank should not create a new SiteInstance. 148 // and no target=_blank should not create a new SiteInstance.
149 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, 149 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest,
150 DontSwapProcessWithOnlyRelNoreferrer) { 150 DontSwapProcessWithOnlyRelNoreferrer) {
151 // Start two servers with different sites. 151 // Start two servers with different sites.
152 ASSERT_TRUE(test_server()->Start()); 152 ASSERT_TRUE(test_server()->Start());
153 net::TestServer https_server( 153 net::TestServer https_server(
154 net::TestServer::TYPE_HTTPS, 154 net::TestServer::TYPE_HTTPS,
155 FilePath(FILE_PATH_LITERAL("chrome/test/data"))); 155 FilePath(FILE_PATH_LITERAL("chrome/test/data")));
156 ASSERT_TRUE(https_server.Start()); 156 ASSERT_TRUE(https_server.Start());
157 157
158 // Load a page with links that open in a new window. 158 // Load a page with links that open in a new window.
159 std::string replacement_path; 159 std::string replacement_path;
160 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement( 160 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement(
161 "files/click-noreferrer-links.html", 161 "files/click-noreferrer-links.html",
162 https_server.host_port_pair(), 162 https_server.host_port_pair(),
163 &replacement_path)); 163 &replacement_path));
164 ui_test_utils::NavigateToURL(browser(), 164 ui_test_utils::NavigateToURL(browser(),
165 test_server()->GetURL(replacement_path)); 165 test_server()->GetURL(replacement_path));
166 166
167 // Get the original SiteInstance for later comparison. 167 // Get the original SiteInstance for later comparison.
168 scoped_refptr<SiteInstance> orig_site_instance( 168 scoped_refptr<SiteInstance> orig_site_instance(
169 browser()->GetSelectedTabContents()->GetSiteInstance()); 169 browser()->GetSelectedWebContents()->GetSiteInstance());
170 EXPECT_TRUE(orig_site_instance != NULL); 170 EXPECT_TRUE(orig_site_instance != NULL);
171 171
172 // Test clicking a rel=noreferrer link. 172 // Test clicking a rel=noreferrer link.
173 bool success = false; 173 bool success = false;
174 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( 174 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
175 browser()->GetSelectedTabContents()->GetRenderViewHost(), L"", 175 browser()->GetSelectedWebContents()->GetRenderViewHost(), L"",
176 L"window.domAutomationController.send(clickNoRefLink());", 176 L"window.domAutomationController.send(clickNoRefLink());",
177 &success)); 177 &success));
178 EXPECT_TRUE(success); 178 EXPECT_TRUE(success);
179 179
180 // Wait for the cross-site transition in the current tab to finish. 180 // Wait for the cross-site transition in the current tab to finish.
181 ui_test_utils::WaitForLoadStop(browser()->GetSelectedTabContents()); 181 ui_test_utils::WaitForLoadStop(browser()->GetSelectedWebContents());
182 182
183 // Opens in same tab. 183 // Opens in same tab.
184 EXPECT_EQ(1, browser()->tab_count()); 184 EXPECT_EQ(1, browser()->tab_count());
185 EXPECT_EQ(0, browser()->active_index()); 185 EXPECT_EQ(0, browser()->active_index());
186 EXPECT_EQ("/files/title2.html", 186 EXPECT_EQ("/files/title2.html",
187 browser()->GetSelectedTabContents()->GetURL().path()); 187 browser()->GetSelectedWebContents()->GetURL().path());
188 188
189 // Should have the same SiteInstance. 189 // Should have the same SiteInstance.
190 scoped_refptr<SiteInstance> noref_site_instance( 190 scoped_refptr<SiteInstance> noref_site_instance(
191 browser()->GetSelectedTabContents()->GetSiteInstance()); 191 browser()->GetSelectedWebContents()->GetSiteInstance());
192 EXPECT_EQ(orig_site_instance, noref_site_instance); 192 EXPECT_EQ(orig_site_instance, noref_site_instance);
193 } 193 }
194 194
195 // Test for crbug.com/76666. A cross-site navigation that fails with a 204 195 // Test for crbug.com/76666. A cross-site navigation that fails with a 204
196 // error should not make us ignore future renderer-initiated navigations. 196 // error should not make us ignore future renderer-initiated navigations.
197 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, ClickLinkAfter204Error) { 197 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, ClickLinkAfter204Error) {
198 // Start two servers with different sites. 198 // Start two servers with different sites.
199 ASSERT_TRUE(test_server()->Start()); 199 ASSERT_TRUE(test_server()->Start());
200 net::TestServer https_server( 200 net::TestServer https_server(
201 net::TestServer::TYPE_HTTPS, 201 net::TestServer::TYPE_HTTPS,
202 FilePath(FILE_PATH_LITERAL("chrome/test/data"))); 202 FilePath(FILE_PATH_LITERAL("chrome/test/data")));
203 ASSERT_TRUE(https_server.Start()); 203 ASSERT_TRUE(https_server.Start());
204 204
205 // Load a page with links that open in a new window. 205 // Load a page with links that open in a new window.
206 // The links will point to the HTTPS server. 206 // The links will point to the HTTPS server.
207 std::string replacement_path; 207 std::string replacement_path;
208 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement( 208 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement(
209 "files/click-noreferrer-links.html", 209 "files/click-noreferrer-links.html",
210 https_server.host_port_pair(), 210 https_server.host_port_pair(),
211 &replacement_path)); 211 &replacement_path));
212 ui_test_utils::NavigateToURL(browser(), 212 ui_test_utils::NavigateToURL(browser(),
213 test_server()->GetURL(replacement_path)); 213 test_server()->GetURL(replacement_path));
214 214
215 // Get the original SiteInstance for later comparison. 215 // Get the original SiteInstance for later comparison.
216 scoped_refptr<SiteInstance> orig_site_instance( 216 scoped_refptr<SiteInstance> orig_site_instance(
217 browser()->GetSelectedTabContents()->GetSiteInstance()); 217 browser()->GetSelectedWebContents()->GetSiteInstance());
218 EXPECT_TRUE(orig_site_instance != NULL); 218 EXPECT_TRUE(orig_site_instance != NULL);
219 219
220 // Load a cross-site page that fails with a 204 error. 220 // Load a cross-site page that fails with a 204 error.
221 ui_test_utils::NavigateToURL(browser(), https_server.GetURL("nocontent")); 221 ui_test_utils::NavigateToURL(browser(), https_server.GetURL("nocontent"));
222 222
223 // We should still be looking at the normal page. 223 // We should still be looking at the normal page.
224 scoped_refptr<SiteInstance> post_nav_site_instance( 224 scoped_refptr<SiteInstance> post_nav_site_instance(
225 browser()->GetSelectedTabContents()->GetSiteInstance()); 225 browser()->GetSelectedWebContents()->GetSiteInstance());
226 EXPECT_EQ(orig_site_instance, post_nav_site_instance); 226 EXPECT_EQ(orig_site_instance, post_nav_site_instance);
227 EXPECT_EQ("/files/click-noreferrer-links.html", 227 EXPECT_EQ("/files/click-noreferrer-links.html",
228 browser()->GetSelectedTabContents()->GetURL().path()); 228 browser()->GetSelectedWebContents()->GetURL().path());
229 229
230 // Renderer-initiated navigations should work. 230 // Renderer-initiated navigations should work.
231 bool success = false; 231 bool success = false;
232 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( 232 EXPECT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
233 browser()->GetSelectedTabContents()->GetRenderViewHost(), L"", 233 browser()->GetSelectedWebContents()->GetRenderViewHost(), L"",
234 L"window.domAutomationController.send(clickNoRefLink());", 234 L"window.domAutomationController.send(clickNoRefLink());",
235 &success)); 235 &success));
236 EXPECT_TRUE(success); 236 EXPECT_TRUE(success);
237 237
238 // Wait for the cross-site transition in the current tab to finish. 238 // Wait for the cross-site transition in the current tab to finish.
239 ui_test_utils::WaitForLoadStop(browser()->GetSelectedTabContents()); 239 ui_test_utils::WaitForLoadStop(browser()->GetSelectedWebContents());
240 240
241 // Opens in same tab. 241 // Opens in same tab.
242 EXPECT_EQ(1, browser()->tab_count()); 242 EXPECT_EQ(1, browser()->tab_count());
243 EXPECT_EQ(0, browser()->active_index()); 243 EXPECT_EQ(0, browser()->active_index());
244 EXPECT_EQ("/files/title2.html", 244 EXPECT_EQ("/files/title2.html",
245 browser()->GetSelectedTabContents()->GetURL().path()); 245 browser()->GetSelectedWebContents()->GetURL().path());
246 246
247 // Should have the same SiteInstance. 247 // Should have the same SiteInstance.
248 scoped_refptr<SiteInstance> noref_site_instance( 248 scoped_refptr<SiteInstance> noref_site_instance(
249 browser()->GetSelectedTabContents()->GetSiteInstance()); 249 browser()->GetSelectedWebContents()->GetSiteInstance());
250 EXPECT_EQ(orig_site_instance, noref_site_instance); 250 EXPECT_EQ(orig_site_instance, noref_site_instance);
251 } 251 }
252 252
253 // This class holds onto RenderViewHostObservers for as long as their observed 253 // This class holds onto RenderViewHostObservers for as long as their observed
254 // RenderViewHosts are alive. This allows us to confirm that all hosts have 254 // RenderViewHosts are alive. This allows us to confirm that all hosts have
255 // properly been shutdown. 255 // properly been shutdown.
256 class RenderViewHostObserverArray { 256 class RenderViewHostObserverArray {
257 public: 257 public:
258 ~RenderViewHostObserverArray() { 258 ~RenderViewHostObserverArray() {
259 // In case some would be left in there with a dead pointer to us. 259 // In case some would be left in there with a dead pointer to us.
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
309 // a running browser. 309 // a running browser.
310 AddBlankTabAndShow(browser()); 310 AddBlankTabAndShow(browser());
311 311
312 // Load a random page and then navigate to view-source: of it. 312 // Load a random page and then navigate to view-source: of it.
313 // This is one way to cause two rvh instances for the same instance id. 313 // This is one way to cause two rvh instances for the same instance id.
314 GURL navigated_url(test_server()->GetURL("files/title2.html")); 314 GURL navigated_url(test_server()->GetURL("files/title2.html"));
315 ui_test_utils::NavigateToURL(browser(), navigated_url); 315 ui_test_utils::NavigateToURL(browser(), navigated_url);
316 316
317 // Observe the newly created render_view_host to make sure it will not leak. 317 // Observe the newly created render_view_host to make sure it will not leak.
318 RenderViewHostObserverArray rvh_observers; 318 RenderViewHostObserverArray rvh_observers;
319 rvh_observers.AddObserverToRVH(browser()->GetSelectedTabContents()-> 319 rvh_observers.AddObserverToRVH(browser()->GetSelectedWebContents()->
320 GetRenderViewHost()); 320 GetRenderViewHost());
321 321
322 GURL view_source_url(chrome::kViewSourceScheme + std::string(":") + 322 GURL view_source_url(chrome::kViewSourceScheme + std::string(":") +
323 navigated_url.spec()); 323 navigated_url.spec());
324 ui_test_utils::NavigateToURL(browser(), view_source_url); 324 ui_test_utils::NavigateToURL(browser(), view_source_url);
325 rvh_observers.AddObserverToRVH(browser()->GetSelectedTabContents()-> 325 rvh_observers.AddObserverToRVH(browser()->GetSelectedWebContents()->
326 GetRenderViewHost()); 326 GetRenderViewHost());
327 327
328 // Now navigate to a different instance so that we swap out again. 328 // Now navigate to a different instance so that we swap out again.
329 ui_test_utils::NavigateToURL(browser(), 329 ui_test_utils::NavigateToURL(browser(),
330 https_server.GetURL("files/title2.html")); 330 https_server.GetURL("files/title2.html"));
331 rvh_observers.AddObserverToRVH(browser()->GetSelectedTabContents()-> 331 rvh_observers.AddObserverToRVH(browser()->GetSelectedWebContents()->
332 GetRenderViewHost()); 332 GetRenderViewHost());
333 333
334 // This used to leak a render view host. 334 // This used to leak a render view host.
335 browser()->CloseTabContents(browser()->GetSelectedTabContents()); 335 browser()->CloseTabContents(browser()->GetSelectedWebContents());
336 EXPECT_EQ(0U, rvh_observers.GetNumObservers()); 336 EXPECT_EQ(0U, rvh_observers.GetNumObservers());
337 } 337 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698