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

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

Issue 11734018: Revert 174880 due to compilation error in pdf_browsertest.cc (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1374/src/
Patch Set: Created 7 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) 2012 The Chromium Authors. All rights reserved. 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 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/json/json_reader.h" 6 #include "base/json/json_reader.h"
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/utf_string_conversions.h" 9 #include "base/utf_string_conversions.h"
10 #include "content/common/content_constants_internal.h" 10 #include "content/common/content_constants_internal.h"
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 124
125 // Get the original SiteInstance for later comparison. 125 // Get the original SiteInstance for later comparison.
126 scoped_refptr<SiteInstance> orig_site_instance( 126 scoped_refptr<SiteInstance> orig_site_instance(
127 shell()->web_contents()->GetSiteInstance()); 127 shell()->web_contents()->GetSiteInstance());
128 EXPECT_TRUE(orig_site_instance != NULL); 128 EXPECT_TRUE(orig_site_instance != NULL);
129 129
130 // Open a same-site link in a new window. 130 // Open a same-site link in a new window.
131 ShellAddedObserver new_shell_observer; 131 ShellAddedObserver new_shell_observer;
132 bool success = false; 132 bool success = false;
133 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 133 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
134 shell()->web_contents()->GetRenderViewHost(), 134 shell()->web_contents()->GetRenderViewHost(), L"",
135 "", 135 L"window.domAutomationController.send(clickSameSiteTargetedLink());",
136 "window.domAutomationController.send(clickSameSiteTargetedLink());",
137 &success)); 136 &success));
138 EXPECT_TRUE(success); 137 EXPECT_TRUE(success);
139 Shell* new_shell = new_shell_observer.GetShell(); 138 Shell* new_shell = new_shell_observer.GetShell();
140 139
141 // Wait for the navigation in the new window to finish, if it hasn't. 140 // Wait for the navigation in the new window to finish, if it hasn't.
142 WaitForLoadStop(new_shell->web_contents()); 141 WaitForLoadStop(new_shell->web_contents());
143 EXPECT_EQ("/files/navigate_opener.html", 142 EXPECT_EQ("/files/navigate_opener.html",
144 new_shell->web_contents()->GetURL().path()); 143 new_shell->web_contents()->GetURL().path());
145 144
146 // Should have the same SiteInstance. 145 // Should have the same SiteInstance.
147 scoped_refptr<SiteInstance> blank_site_instance( 146 scoped_refptr<SiteInstance> blank_site_instance(
148 new_shell->web_contents()->GetSiteInstance()); 147 new_shell->web_contents()->GetSiteInstance());
149 EXPECT_EQ(orig_site_instance, blank_site_instance); 148 EXPECT_EQ(orig_site_instance, blank_site_instance);
150 149
151 // We should have access to the opened window's location. 150 // We should have access to the opened window's location.
152 success = false; 151 success = false;
153 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 152 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
154 shell()->web_contents()->GetRenderViewHost(), 153 shell()->web_contents()->GetRenderViewHost(), L"",
155 "", 154 L"window.domAutomationController.send(testScriptAccessToWindow());",
156 "window.domAutomationController.send(testScriptAccessToWindow());",
157 &success)); 155 &success));
158 EXPECT_TRUE(success); 156 EXPECT_TRUE(success);
159 157
160 // Now navigate the new window to a different site. 158 // Now navigate the new window to a different site.
161 NavigateToURL(new_shell, https_server.GetURL("files/title1.html")); 159 NavigateToURL(new_shell, https_server.GetURL("files/title1.html"));
162 scoped_refptr<SiteInstance> new_site_instance( 160 scoped_refptr<SiteInstance> new_site_instance(
163 new_shell->web_contents()->GetSiteInstance()); 161 new_shell->web_contents()->GetSiteInstance());
164 EXPECT_NE(orig_site_instance, new_site_instance); 162 EXPECT_NE(orig_site_instance, new_site_instance);
165 163
166 // We should no longer have script access to the opened window's location. 164 // We should no longer have script access to the opened window's location.
167 success = false; 165 success = false;
168 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 166 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
169 shell()->web_contents()->GetRenderViewHost(), 167 shell()->web_contents()->GetRenderViewHost(), L"",
170 "", 168 L"window.domAutomationController.send(testScriptAccessToWindow());",
171 "window.domAutomationController.send(testScriptAccessToWindow());",
172 &success)); 169 &success));
173 EXPECT_FALSE(success); 170 EXPECT_FALSE(success);
174 } 171 }
175 172
176 // Test for crbug.com/24447. Following a cross-site link with rel=noreferrer 173 // Test for crbug.com/24447. Following a cross-site link with rel=noreferrer
177 // and target=_blank should create a new SiteInstance. 174 // and target=_blank should create a new SiteInstance.
178 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, 175 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest,
179 SwapProcessWithRelNoreferrerAndTargetBlank) { 176 SwapProcessWithRelNoreferrerAndTargetBlank) {
180 // Start two servers with different sites. 177 // Start two servers with different sites.
181 ASSERT_TRUE(test_server()->Start()); 178 ASSERT_TRUE(test_server()->Start());
(...skipping 13 matching lines...) Expand all
195 192
196 // Get the original SiteInstance for later comparison. 193 // Get the original SiteInstance for later comparison.
197 scoped_refptr<SiteInstance> orig_site_instance( 194 scoped_refptr<SiteInstance> orig_site_instance(
198 shell()->web_contents()->GetSiteInstance()); 195 shell()->web_contents()->GetSiteInstance());
199 EXPECT_TRUE(orig_site_instance != NULL); 196 EXPECT_TRUE(orig_site_instance != NULL);
200 197
201 // Test clicking a rel=noreferrer + target=blank link. 198 // Test clicking a rel=noreferrer + target=blank link.
202 ShellAddedObserver new_shell_observer; 199 ShellAddedObserver new_shell_observer;
203 bool success = false; 200 bool success = false;
204 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 201 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
205 shell()->web_contents()->GetRenderViewHost(), 202 shell()->web_contents()->GetRenderViewHost(), L"",
206 "", 203 L"window.domAutomationController.send(clickNoRefTargetBlankLink());",
207 "window.domAutomationController.send(clickNoRefTargetBlankLink());",
208 &success)); 204 &success));
209 EXPECT_TRUE(success); 205 EXPECT_TRUE(success);
210 206
211 // Wait for the window to open. 207 // Wait for the window to open.
212 Shell* new_shell = new_shell_observer.GetShell(); 208 Shell* new_shell = new_shell_observer.GetShell();
213 209
214 EXPECT_EQ("/files/title2.html", new_shell->web_contents()->GetURL().path()); 210 EXPECT_EQ("/files/title2.html", new_shell->web_contents()->GetURL().path());
215 211
216 // Wait for the cross-site transition in the new tab to finish. 212 // Wait for the cross-site transition in the new tab to finish.
217 WaitForLoadStop(new_shell->web_contents()); 213 WaitForLoadStop(new_shell->web_contents());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 245
250 // Get the original SiteInstance for later comparison. 246 // Get the original SiteInstance for later comparison.
251 scoped_refptr<SiteInstance> orig_site_instance( 247 scoped_refptr<SiteInstance> orig_site_instance(
252 shell()->web_contents()->GetSiteInstance()); 248 shell()->web_contents()->GetSiteInstance());
253 EXPECT_TRUE(orig_site_instance != NULL); 249 EXPECT_TRUE(orig_site_instance != NULL);
254 250
255 // Test clicking a same-site rel=noreferrer + target=foo link. 251 // Test clicking a same-site rel=noreferrer + target=foo link.
256 ShellAddedObserver new_shell_observer; 252 ShellAddedObserver new_shell_observer;
257 bool success = false; 253 bool success = false;
258 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 254 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
259 shell()->web_contents()->GetRenderViewHost(), 255 shell()->web_contents()->GetRenderViewHost(), L"",
260 "", 256 L"window.domAutomationController.send(clickSameSiteNoRefTargetedLink());",
261 "window.domAutomationController.send(clickSameSiteNoRefTargetedLink());",
262 &success)); 257 &success));
263 EXPECT_TRUE(success); 258 EXPECT_TRUE(success);
264 259
265 // Wait for the window to open. 260 // Wait for the window to open.
266 Shell* new_shell = new_shell_observer.GetShell(); 261 Shell* new_shell = new_shell_observer.GetShell();
267 262
268 // Opens in new window. 263 // Opens in new window.
269 EXPECT_EQ("/files/title2.html", new_shell->web_contents()->GetURL().path()); 264 EXPECT_EQ("/files/title2.html", new_shell->web_contents()->GetURL().path());
270 265
271 // Wait for the cross-site transition in the new tab to finish. 266 // Wait for the cross-site transition in the new tab to finish.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 298
304 // Get the original SiteInstance for later comparison. 299 // Get the original SiteInstance for later comparison.
305 scoped_refptr<SiteInstance> orig_site_instance( 300 scoped_refptr<SiteInstance> orig_site_instance(
306 shell()->web_contents()->GetSiteInstance()); 301 shell()->web_contents()->GetSiteInstance());
307 EXPECT_TRUE(orig_site_instance != NULL); 302 EXPECT_TRUE(orig_site_instance != NULL);
308 303
309 // Test clicking a target=blank link. 304 // Test clicking a target=blank link.
310 ShellAddedObserver new_shell_observer; 305 ShellAddedObserver new_shell_observer;
311 bool success = false; 306 bool success = false;
312 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 307 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
313 shell()->web_contents()->GetRenderViewHost(), 308 shell()->web_contents()->GetRenderViewHost(), L"",
314 "", 309 L"window.domAutomationController.send(clickTargetBlankLink());",
315 "window.domAutomationController.send(clickTargetBlankLink());",
316 &success)); 310 &success));
317 EXPECT_TRUE(success); 311 EXPECT_TRUE(success);
318 312
319 // Wait for the window to open. 313 // Wait for the window to open.
320 Shell* new_shell = new_shell_observer.GetShell(); 314 Shell* new_shell = new_shell_observer.GetShell();
321 315
322 // Wait for the cross-site transition in the new tab to finish. 316 // Wait for the cross-site transition in the new tab to finish.
323 WaitForLoadStop(new_shell->web_contents()); 317 WaitForLoadStop(new_shell->web_contents());
324 EXPECT_EQ("/files/title2.html", 318 EXPECT_EQ("/files/title2.html",
325 new_shell->web_contents()->GetURL().path()); 319 new_shell->web_contents()->GetURL().path());
(...skipping 25 matching lines...) Expand all
351 NavigateToURL(shell(), test_server()->GetURL(replacement_path)); 345 NavigateToURL(shell(), test_server()->GetURL(replacement_path));
352 346
353 // Get the original SiteInstance for later comparison. 347 // Get the original SiteInstance for later comparison.
354 scoped_refptr<SiteInstance> orig_site_instance( 348 scoped_refptr<SiteInstance> orig_site_instance(
355 shell()->web_contents()->GetSiteInstance()); 349 shell()->web_contents()->GetSiteInstance());
356 EXPECT_TRUE(orig_site_instance != NULL); 350 EXPECT_TRUE(orig_site_instance != NULL);
357 351
358 // Test clicking a rel=noreferrer link. 352 // Test clicking a rel=noreferrer link.
359 bool success = false; 353 bool success = false;
360 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 354 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
361 shell()->web_contents()->GetRenderViewHost(), 355 shell()->web_contents()->GetRenderViewHost(), L"",
362 "", 356 L"window.domAutomationController.send(clickNoRefLink());",
363 "window.domAutomationController.send(clickNoRefLink());",
364 &success)); 357 &success));
365 EXPECT_TRUE(success); 358 EXPECT_TRUE(success);
366 359
367 // Wait for the cross-site transition in the current tab to finish. 360 // Wait for the cross-site transition in the current tab to finish.
368 WaitForLoadStop(shell()->web_contents()); 361 WaitForLoadStop(shell()->web_contents());
369 362
370 // Opens in same window. 363 // Opens in same window.
371 EXPECT_EQ(1u, Shell::windows().size()); 364 EXPECT_EQ(1u, Shell::windows().size());
372 EXPECT_EQ("/files/title2.html", shell()->web_contents()->GetURL().path()); 365 EXPECT_EQ("/files/title2.html", shell()->web_contents()->GetURL().path());
373 366
(...skipping 25 matching lines...) Expand all
399 392
400 // Get the original SiteInstance for later comparison. 393 // Get the original SiteInstance for later comparison.
401 scoped_refptr<SiteInstance> orig_site_instance( 394 scoped_refptr<SiteInstance> orig_site_instance(
402 shell()->web_contents()->GetSiteInstance()); 395 shell()->web_contents()->GetSiteInstance());
403 EXPECT_TRUE(orig_site_instance != NULL); 396 EXPECT_TRUE(orig_site_instance != NULL);
404 397
405 // Test clicking a target=foo link. 398 // Test clicking a target=foo link.
406 ShellAddedObserver new_shell_observer; 399 ShellAddedObserver new_shell_observer;
407 bool success = false; 400 bool success = false;
408 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 401 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
409 shell()->web_contents()->GetRenderViewHost(), 402 shell()->web_contents()->GetRenderViewHost(), L"",
410 "", 403 L"window.domAutomationController.send(clickSameSiteTargetedLink());",
411 "window.domAutomationController.send(clickSameSiteTargetedLink());",
412 &success)); 404 &success));
413 EXPECT_TRUE(success); 405 EXPECT_TRUE(success);
414 Shell* new_shell = new_shell_observer.GetShell(); 406 Shell* new_shell = new_shell_observer.GetShell();
415 407
416 // Wait for the navigation in the new tab to finish, if it hasn't. 408 // Wait for the navigation in the new tab to finish, if it hasn't.
417 WaitForLoadStop(new_shell->web_contents()); 409 WaitForLoadStop(new_shell->web_contents());
418 EXPECT_EQ("/files/navigate_opener.html", 410 EXPECT_EQ("/files/navigate_opener.html",
419 new_shell->web_contents()->GetURL().path()); 411 new_shell->web_contents()->GetURL().path());
420 412
421 // Should have the same SiteInstance. 413 // Should have the same SiteInstance.
422 scoped_refptr<SiteInstance> blank_site_instance( 414 scoped_refptr<SiteInstance> blank_site_instance(
423 new_shell->web_contents()->GetSiteInstance()); 415 new_shell->web_contents()->GetSiteInstance());
424 EXPECT_EQ(orig_site_instance, blank_site_instance); 416 EXPECT_EQ(orig_site_instance, blank_site_instance);
425 417
426 // Now navigate the new tab to a different site. 418 // Now navigate the new tab to a different site.
427 NavigateToURL(new_shell, https_server.GetURL("files/title1.html")); 419 NavigateToURL(new_shell, https_server.GetURL("files/title1.html"));
428 scoped_refptr<SiteInstance> new_site_instance( 420 scoped_refptr<SiteInstance> new_site_instance(
429 new_shell->web_contents()->GetSiteInstance()); 421 new_shell->web_contents()->GetSiteInstance());
430 EXPECT_NE(orig_site_instance, new_site_instance); 422 EXPECT_NE(orig_site_instance, new_site_instance);
431 423
432 // Clicking the original link in the first tab should cause us to swap back. 424 // Clicking the original link in the first tab should cause us to swap back.
433 WindowedNotificationObserver navigation_observer( 425 WindowedNotificationObserver navigation_observer(
434 NOTIFICATION_NAV_ENTRY_COMMITTED, 426 NOTIFICATION_NAV_ENTRY_COMMITTED,
435 Source<NavigationController>( 427 Source<NavigationController>(
436 &new_shell->web_contents()->GetController())); 428 &new_shell->web_contents()->GetController()));
437 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 429 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
438 shell()->web_contents()->GetRenderViewHost(), 430 shell()->web_contents()->GetRenderViewHost(), L"",
439 "", 431 L"window.domAutomationController.send(clickSameSiteTargetedLink());",
440 "window.domAutomationController.send(clickSameSiteTargetedLink());",
441 &success)); 432 &success));
442 EXPECT_TRUE(success); 433 EXPECT_TRUE(success);
443 navigation_observer.Wait(); 434 navigation_observer.Wait();
444 435
445 // Should have swapped back and shown the new window again. 436 // Should have swapped back and shown the new window again.
446 scoped_refptr<SiteInstance> revisit_site_instance( 437 scoped_refptr<SiteInstance> revisit_site_instance(
447 new_shell->web_contents()->GetSiteInstance()); 438 new_shell->web_contents()->GetSiteInstance());
448 EXPECT_EQ(orig_site_instance, revisit_site_instance); 439 EXPECT_EQ(orig_site_instance, revisit_site_instance);
449 440
450 // If it navigates away to another process, the original window should 441 // If it navigates away to another process, the original window should
451 // still be able to close it (using a cross-process close message). 442 // still be able to close it (using a cross-process close message).
452 NavigateToURL(new_shell, https_server.GetURL("files/title1.html")); 443 NavigateToURL(new_shell, https_server.GetURL("files/title1.html"));
453 EXPECT_EQ(new_site_instance, 444 EXPECT_EQ(new_site_instance,
454 new_shell->web_contents()->GetSiteInstance()); 445 new_shell->web_contents()->GetSiteInstance());
455 WindowedNotificationObserver close_observer( 446 WindowedNotificationObserver close_observer(
456 NOTIFICATION_WEB_CONTENTS_DESTROYED, 447 NOTIFICATION_WEB_CONTENTS_DESTROYED,
457 Source<WebContents>(new_shell->web_contents())); 448 Source<WebContents>(new_shell->web_contents()));
458 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 449 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
459 shell()->web_contents()->GetRenderViewHost(), 450 shell()->web_contents()->GetRenderViewHost(), L"",
460 "", 451 L"window.domAutomationController.send(testCloseWindow());",
461 "window.domAutomationController.send(testCloseWindow());",
462 &success)); 452 &success));
463 EXPECT_TRUE(success); 453 EXPECT_TRUE(success);
464 close_observer.Wait(); 454 close_observer.Wait();
465 } 455 }
466 456
467 // Test that setting the opener to null in a window affects cross-process 457 // Test that setting the opener to null in a window affects cross-process
468 // navigations, including those to existing entries. http://crbug.com/156669. 458 // navigations, including those to existing entries. http://crbug.com/156669.
469 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, DisownOpener) { 459 IN_PROC_BROWSER_TEST_F(RenderViewHostManagerTest, DisownOpener) {
470 // Start two servers with different sites. 460 // Start two servers with different sites.
471 ASSERT_TRUE(test_server()->Start()); 461 ASSERT_TRUE(test_server()->Start());
(...skipping 13 matching lines...) Expand all
485 475
486 // Get the original SiteInstance for later comparison. 476 // Get the original SiteInstance for later comparison.
487 scoped_refptr<SiteInstance> orig_site_instance( 477 scoped_refptr<SiteInstance> orig_site_instance(
488 shell()->web_contents()->GetSiteInstance()); 478 shell()->web_contents()->GetSiteInstance());
489 EXPECT_TRUE(orig_site_instance != NULL); 479 EXPECT_TRUE(orig_site_instance != NULL);
490 480
491 // Test clicking a target=_blank link. 481 // Test clicking a target=_blank link.
492 ShellAddedObserver new_shell_observer; 482 ShellAddedObserver new_shell_observer;
493 bool success = false; 483 bool success = false;
494 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 484 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
495 shell()->web_contents()->GetRenderViewHost(), 485 shell()->web_contents()->GetRenderViewHost(), L"",
496 "", 486 L"window.domAutomationController.send(clickSameSiteTargetBlankLink());",
497 "window.domAutomationController.send(clickSameSiteTargetBlankLink());",
498 &success)); 487 &success));
499 EXPECT_TRUE(success); 488 EXPECT_TRUE(success);
500 Shell* new_shell = new_shell_observer.GetShell(); 489 Shell* new_shell = new_shell_observer.GetShell();
501 490
502 // Wait for the navigation in the new tab to finish, if it hasn't. 491 // Wait for the navigation in the new tab to finish, if it hasn't.
503 WaitForLoadStop(new_shell->web_contents()); 492 WaitForLoadStop(new_shell->web_contents());
504 EXPECT_EQ("/files/title2.html", 493 EXPECT_EQ("/files/title2.html",
505 new_shell->web_contents()->GetURL().path()); 494 new_shell->web_contents()->GetURL().path());
506 495
507 // Should have the same SiteInstance. 496 // Should have the same SiteInstance.
508 scoped_refptr<SiteInstance> blank_site_instance( 497 scoped_refptr<SiteInstance> blank_site_instance(
509 new_shell->web_contents()->GetSiteInstance()); 498 new_shell->web_contents()->GetSiteInstance());
510 EXPECT_EQ(orig_site_instance, blank_site_instance); 499 EXPECT_EQ(orig_site_instance, blank_site_instance);
511 500
512 // Now navigate the new tab to a different site. 501 // Now navigate the new tab to a different site.
513 NavigateToURL(new_shell, https_server.GetURL("files/title1.html")); 502 NavigateToURL(new_shell, https_server.GetURL("files/title1.html"));
514 scoped_refptr<SiteInstance> new_site_instance( 503 scoped_refptr<SiteInstance> new_site_instance(
515 new_shell->web_contents()->GetSiteInstance()); 504 new_shell->web_contents()->GetSiteInstance());
516 EXPECT_NE(orig_site_instance, new_site_instance); 505 EXPECT_NE(orig_site_instance, new_site_instance);
517 506
518 // Now disown the opener. 507 // Now disown the opener.
519 EXPECT_TRUE(ExecuteJavaScript( 508 EXPECT_TRUE(ExecuteJavaScript(
520 new_shell->web_contents()->GetRenderViewHost(), 509 new_shell->web_contents()->GetRenderViewHost(), L"",
521 "", 510 L"window.opener = null;"));
522 "window.opener = null;"));
523 511
524 // Go back and ensure the opener is still null. 512 // Go back and ensure the opener is still null.
525 { 513 {
526 WindowedNotificationObserver back_nav_load_observer( 514 WindowedNotificationObserver back_nav_load_observer(
527 NOTIFICATION_NAV_ENTRY_COMMITTED, 515 NOTIFICATION_NAV_ENTRY_COMMITTED,
528 Source<NavigationController>( 516 Source<NavigationController>(
529 &new_shell->web_contents()->GetController())); 517 &new_shell->web_contents()->GetController()));
530 new_shell->web_contents()->GetController().GoBack(); 518 new_shell->web_contents()->GetController().GoBack();
531 back_nav_load_observer.Wait(); 519 back_nav_load_observer.Wait();
532 } 520 }
533 success = false; 521 success = false;
534 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 522 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
535 new_shell->web_contents()->GetRenderViewHost(), 523 new_shell->web_contents()->GetRenderViewHost(), L"",
536 "", 524 L"window.domAutomationController.send(window.opener == null);",
537 "window.domAutomationController.send(window.opener == null);",
538 &success)); 525 &success));
539 EXPECT_TRUE(success); 526 EXPECT_TRUE(success);
540 527
541 // Now navigate forward again (creating a new process) and check opener. 528 // Now navigate forward again (creating a new process) and check opener.
542 NavigateToURL(new_shell, https_server.GetURL("files/title1.html")); 529 NavigateToURL(new_shell, https_server.GetURL("files/title1.html"));
543 success = false; 530 success = false;
544 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 531 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
545 new_shell->web_contents()->GetRenderViewHost(), 532 new_shell->web_contents()->GetRenderViewHost(), L"",
546 "", 533 L"window.domAutomationController.send(window.opener == null);",
547 "window.domAutomationController.send(window.opener == null);",
548 &success)); 534 &success));
549 EXPECT_TRUE(success); 535 EXPECT_TRUE(success);
550 } 536 }
551 537
552 // Test for crbug.com/99202. PostMessage calls should still work after 538 // Test for crbug.com/99202. PostMessage calls should still work after
553 // navigating the source and target windows to different sites. 539 // navigating the source and target windows to different sites.
554 // Specifically: 540 // Specifically:
555 // 1) Create 3 windows (opener, "foo", and _blank) and send "foo" cross-process. 541 // 1) Create 3 windows (opener, "foo", and _blank) and send "foo" cross-process.
556 // 2) Fail to post a message from "foo" to opener with the wrong target origin. 542 // 2) Fail to post a message from "foo" to opener with the wrong target origin.
557 // 3) Post a message from "foo" to opener, which replies back to "foo". 543 // 3) Post a message from "foo" to opener, which replies back to "foo".
(...skipping 27 matching lines...) Expand all
585 static_cast<WebContentsImpl*>(opener_contents)-> 571 static_cast<WebContentsImpl*>(opener_contents)->
586 GetRenderManagerForTesting(); 572 GetRenderManagerForTesting();
587 573
588 // 1) Open two more windows, one named. These initially have openers but no 574 // 1) Open two more windows, one named. These initially have openers but no
589 // reference to each other. We will later post a message between them. 575 // reference to each other. We will later post a message between them.
590 576
591 // First, a named target=foo window. 577 // First, a named target=foo window.
592 ShellAddedObserver new_shell_observer; 578 ShellAddedObserver new_shell_observer;
593 bool success = false; 579 bool success = false;
594 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 580 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
595 opener_contents->GetRenderViewHost(), 581 opener_contents->GetRenderViewHost(), L"",
596 "", 582 L"window.domAutomationController.send(clickSameSiteTargetedLink());",
597 "window.domAutomationController.send(clickSameSiteTargetedLink());",
598 &success)); 583 &success));
599 EXPECT_TRUE(success); 584 EXPECT_TRUE(success);
600 Shell* new_shell = new_shell_observer.GetShell(); 585 Shell* new_shell = new_shell_observer.GetShell();
601 586
602 // Wait for the navigation in the new window to finish, if it hasn't, then 587 // Wait for the navigation in the new window to finish, if it hasn't, then
603 // send it to post_message.html on a different site. 588 // send it to post_message.html on a different site.
604 WebContents* foo_contents = new_shell->web_contents(); 589 WebContents* foo_contents = new_shell->web_contents();
605 WaitForLoadStop(foo_contents); 590 WaitForLoadStop(foo_contents);
606 EXPECT_EQ("/files/navigate_opener.html", foo_contents->GetURL().path()); 591 EXPECT_EQ("/files/navigate_opener.html", foo_contents->GetURL().path());
607 NavigateToURL(new_shell, https_server.GetURL("files/post_message.html")); 592 NavigateToURL(new_shell, https_server.GetURL("files/post_message.html"));
608 scoped_refptr<SiteInstance> foo_site_instance( 593 scoped_refptr<SiteInstance> foo_site_instance(
609 foo_contents->GetSiteInstance()); 594 foo_contents->GetSiteInstance());
610 EXPECT_NE(orig_site_instance, foo_site_instance); 595 EXPECT_NE(orig_site_instance, foo_site_instance);
611 596
612 // Second, a target=_blank window. 597 // Second, a target=_blank window.
613 ShellAddedObserver new_shell_observer2; 598 ShellAddedObserver new_shell_observer2;
614 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 599 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
615 shell()->web_contents()->GetRenderViewHost(), 600 shell()->web_contents()->GetRenderViewHost(), L"",
616 "", 601 L"window.domAutomationController.send(clickSameSiteTargetBlankLink());",
617 "window.domAutomationController.send(clickSameSiteTargetBlankLink());",
618 &success)); 602 &success));
619 EXPECT_TRUE(success); 603 EXPECT_TRUE(success);
620 604
621 // Wait for the navigation in the new window to finish, if it hasn't, then 605 // Wait for the navigation in the new window to finish, if it hasn't, then
622 // send it to post_message.html on the original site. 606 // send it to post_message.html on the original site.
623 Shell* new_shell2 = new_shell_observer2.GetShell(); 607 Shell* new_shell2 = new_shell_observer2.GetShell();
624 WebContents* new_contents = new_shell2->web_contents(); 608 WebContents* new_contents = new_shell2->web_contents();
625 WaitForLoadStop(new_contents); 609 WaitForLoadStop(new_contents);
626 EXPECT_EQ("/files/title2.html", new_contents->GetURL().path()); 610 EXPECT_EQ("/files/title2.html", new_contents->GetURL().path());
627 NavigateToURL(new_shell2, test_server()->GetURL("files/post_message.html")); 611 NavigateToURL(new_shell2, test_server()->GetURL("files/post_message.html"));
628 EXPECT_EQ(orig_site_instance, new_contents->GetSiteInstance()); 612 EXPECT_EQ(orig_site_instance, new_contents->GetSiteInstance());
629 RenderViewHostManager* new_manager = 613 RenderViewHostManager* new_manager =
630 static_cast<WebContentsImpl*>(new_contents)->GetRenderManagerForTesting(); 614 static_cast<WebContentsImpl*>(new_contents)->GetRenderManagerForTesting();
631 615
632 // We now have three windows. The opener should have a swapped out RVH 616 // We now have three windows. The opener should have a swapped out RVH
633 // for the new SiteInstance, but the _blank window should not. 617 // for the new SiteInstance, but the _blank window should not.
634 EXPECT_EQ(3u, Shell::windows().size()); 618 EXPECT_EQ(3u, Shell::windows().size());
635 EXPECT_TRUE(opener_manager->GetSwappedOutRenderViewHost(foo_site_instance)); 619 EXPECT_TRUE(opener_manager->GetSwappedOutRenderViewHost(foo_site_instance));
636 EXPECT_FALSE(new_manager->GetSwappedOutRenderViewHost(foo_site_instance)); 620 EXPECT_FALSE(new_manager->GetSwappedOutRenderViewHost(foo_site_instance));
637 621
638 // 2) Fail to post a message from the foo window to the opener if the target 622 // 2) Fail to post a message from the foo window to the opener if the target
639 // origin is wrong. We won't see an error, but we can check for the right 623 // origin is wrong. We won't see an error, but we can check for the right
640 // number of received messages below. 624 // number of received messages below.
641 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 625 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
642 foo_contents->GetRenderViewHost(), 626 foo_contents->GetRenderViewHost(), L"",
643 "", 627 L"window.domAutomationController.send(postToOpener('msg',"
644 "window.domAutomationController.send(postToOpener('msg'," 628 L"'http://google.com'));",
645 "'http://google.com'));",
646 &success)); 629 &success));
647 EXPECT_TRUE(success); 630 EXPECT_TRUE(success);
648 ASSERT_FALSE(opener_manager->GetSwappedOutRenderViewHost(orig_site_instance)); 631 ASSERT_FALSE(opener_manager->GetSwappedOutRenderViewHost(orig_site_instance));
649 632
650 // 3) Post a message from the foo window to the opener. The opener will 633 // 3) Post a message from the foo window to the opener. The opener will
651 // reply, causing the foo window to update its own title. 634 // reply, causing the foo window to update its own title.
652 WindowedNotificationObserver title_observer( 635 WindowedNotificationObserver title_observer(
653 NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED, 636 NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED,
654 Source<WebContents>(foo_contents)); 637 Source<WebContents>(foo_contents));
655 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 638 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
656 foo_contents->GetRenderViewHost(), 639 foo_contents->GetRenderViewHost(), L"",
657 "", 640 L"window.domAutomationController.send(postToOpener('msg','*'));",
658 "window.domAutomationController.send(postToOpener('msg','*'));",
659 &success)); 641 &success));
660 EXPECT_TRUE(success); 642 EXPECT_TRUE(success);
661 ASSERT_FALSE(opener_manager->GetSwappedOutRenderViewHost(orig_site_instance)); 643 ASSERT_FALSE(opener_manager->GetSwappedOutRenderViewHost(orig_site_instance));
662 title_observer.Wait(); 644 title_observer.Wait();
663 645
664 // We should have received only 1 message in the opener and "foo" tabs, 646 // We should have received only 1 message in the opener and "foo" tabs,
665 // and updated the title. 647 // and updated the title.
666 int opener_received_messages = 0; 648 int opener_received_messages = 0;
667 EXPECT_TRUE(ExecuteJavaScriptAndExtractInt( 649 EXPECT_TRUE(ExecuteJavaScriptAndExtractInt(
668 opener_contents->GetRenderViewHost(), 650 opener_contents->GetRenderViewHost(), L"",
669 "", 651 L"window.domAutomationController.send(window.receivedMessages);",
670 "window.domAutomationController.send(window.receivedMessages);",
671 &opener_received_messages)); 652 &opener_received_messages));
672 int foo_received_messages = 0; 653 int foo_received_messages = 0;
673 EXPECT_TRUE(ExecuteJavaScriptAndExtractInt( 654 EXPECT_TRUE(ExecuteJavaScriptAndExtractInt(
674 foo_contents->GetRenderViewHost(), 655 foo_contents->GetRenderViewHost(), L"",
675 "", 656 L"window.domAutomationController.send(window.receivedMessages);",
676 "window.domAutomationController.send(window.receivedMessages);",
677 &foo_received_messages)); 657 &foo_received_messages));
678 EXPECT_EQ(1, foo_received_messages); 658 EXPECT_EQ(1, foo_received_messages);
679 EXPECT_EQ(1, opener_received_messages); 659 EXPECT_EQ(1, opener_received_messages);
680 EXPECT_EQ(ASCIIToUTF16("msg"), foo_contents->GetTitle()); 660 EXPECT_EQ(ASCIIToUTF16("msg"), foo_contents->GetTitle());
681 661
682 // 4) Now post a message from the _blank window to the foo window. The 662 // 4) Now post a message from the _blank window to the foo window. The
683 // foo window will update its title and will not reply. 663 // foo window will update its title and will not reply.
684 WindowedNotificationObserver title_observer2( 664 WindowedNotificationObserver title_observer2(
685 NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED, 665 NOTIFICATION_WEB_CONTENTS_TITLE_UPDATED,
686 Source<WebContents>(foo_contents)); 666 Source<WebContents>(foo_contents));
687 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 667 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
688 new_contents->GetRenderViewHost(), 668 new_contents->GetRenderViewHost(), L"",
689 "", 669 L"window.domAutomationController.send(postToFoo('msg2'));",
690 "window.domAutomationController.send(postToFoo('msg2'));",
691 &success)); 670 &success));
692 EXPECT_TRUE(success); 671 EXPECT_TRUE(success);
693 title_observer2.Wait(); 672 title_observer2.Wait();
694 EXPECT_EQ(ASCIIToUTF16("msg2"), foo_contents->GetTitle()); 673 EXPECT_EQ(ASCIIToUTF16("msg2"), foo_contents->GetTitle());
695 674
696 // This postMessage should have created a swapped out RVH for the new 675 // This postMessage should have created a swapped out RVH for the new
697 // SiteInstance in the target=_blank window. 676 // SiteInstance in the target=_blank window.
698 EXPECT_TRUE(new_manager->GetSwappedOutRenderViewHost(foo_site_instance)); 677 EXPECT_TRUE(new_manager->GetSwappedOutRenderViewHost(foo_site_instance));
699 678
700 // TODO(nasko): Test subframe targeting of postMessage once 679 // TODO(nasko): Test subframe targeting of postMessage once
(...skipping 23 matching lines...) Expand all
724 // Get the original tab and SiteInstance for later comparison. 703 // Get the original tab and SiteInstance for later comparison.
725 WebContents* orig_contents = shell()->web_contents(); 704 WebContents* orig_contents = shell()->web_contents();
726 scoped_refptr<SiteInstance> orig_site_instance( 705 scoped_refptr<SiteInstance> orig_site_instance(
727 orig_contents->GetSiteInstance()); 706 orig_contents->GetSiteInstance());
728 EXPECT_TRUE(orig_site_instance != NULL); 707 EXPECT_TRUE(orig_site_instance != NULL);
729 708
730 // Test clicking a target=foo link. 709 // Test clicking a target=foo link.
731 ShellAddedObserver new_shell_observer; 710 ShellAddedObserver new_shell_observer;
732 bool success = false; 711 bool success = false;
733 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 712 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
734 orig_contents->GetRenderViewHost(), 713 orig_contents->GetRenderViewHost(), L"",
735 "", 714 L"window.domAutomationController.send(clickSameSiteTargetedLink());",
736 "window.domAutomationController.send(clickSameSiteTargetedLink());",
737 &success)); 715 &success));
738 EXPECT_TRUE(success); 716 EXPECT_TRUE(success);
739 Shell* new_shell = new_shell_observer.GetShell(); 717 Shell* new_shell = new_shell_observer.GetShell();
740 718
741 // Wait for the navigation in the new window to finish, if it hasn't. 719 // Wait for the navigation in the new window to finish, if it hasn't.
742 WaitForLoadStop(new_shell->web_contents()); 720 WaitForLoadStop(new_shell->web_contents());
743 EXPECT_EQ("/files/navigate_opener.html", 721 EXPECT_EQ("/files/navigate_opener.html",
744 new_shell->web_contents()->GetURL().path()); 722 new_shell->web_contents()->GetURL().path());
745 723
746 // Should have the same SiteInstance. 724 // Should have the same SiteInstance.
747 scoped_refptr<SiteInstance> blank_site_instance( 725 scoped_refptr<SiteInstance> blank_site_instance(
748 new_shell->web_contents()->GetSiteInstance()); 726 new_shell->web_contents()->GetSiteInstance());
749 EXPECT_EQ(orig_site_instance, blank_site_instance); 727 EXPECT_EQ(orig_site_instance, blank_site_instance);
750 728
751 // Now navigate the original (opener) tab to a different site. 729 // Now navigate the original (opener) tab to a different site.
752 NavigateToURL(shell(), https_server.GetURL("files/title1.html")); 730 NavigateToURL(shell(), https_server.GetURL("files/title1.html"));
753 scoped_refptr<SiteInstance> new_site_instance( 731 scoped_refptr<SiteInstance> new_site_instance(
754 shell()->web_contents()->GetSiteInstance()); 732 shell()->web_contents()->GetSiteInstance());
755 EXPECT_NE(orig_site_instance, new_site_instance); 733 EXPECT_NE(orig_site_instance, new_site_instance);
756 734
757 // The opened tab should be able to navigate the opener back to its process. 735 // The opened tab should be able to navigate the opener back to its process.
758 WindowedNotificationObserver navigation_observer( 736 WindowedNotificationObserver navigation_observer(
759 NOTIFICATION_NAV_ENTRY_COMMITTED, 737 NOTIFICATION_NAV_ENTRY_COMMITTED,
760 Source<NavigationController>( 738 Source<NavigationController>(
761 &orig_contents->GetController())); 739 &orig_contents->GetController()));
762 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 740 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
763 new_shell->web_contents()->GetRenderViewHost(), 741 new_shell->web_contents()->GetRenderViewHost(), L"",
764 "", 742 L"window.domAutomationController.send(navigateOpener());",
765 "window.domAutomationController.send(navigateOpener());",
766 &success)); 743 &success));
767 EXPECT_TRUE(success); 744 EXPECT_TRUE(success);
768 navigation_observer.Wait(); 745 navigation_observer.Wait();
769 746
770 // Should have swapped back into this process. 747 // Should have swapped back into this process.
771 scoped_refptr<SiteInstance> revisit_site_instance( 748 scoped_refptr<SiteInstance> revisit_site_instance(
772 shell()->web_contents()->GetSiteInstance()); 749 shell()->web_contents()->GetSiteInstance());
773 EXPECT_EQ(orig_site_instance, revisit_site_instance); 750 EXPECT_EQ(orig_site_instance, revisit_site_instance);
774 } 751 }
775 752
(...skipping 20 matching lines...) Expand all
796 773
797 // Get the original SiteInstance for later comparison. 774 // Get the original SiteInstance for later comparison.
798 scoped_refptr<SiteInstance> orig_site_instance( 775 scoped_refptr<SiteInstance> orig_site_instance(
799 shell()->web_contents()->GetSiteInstance()); 776 shell()->web_contents()->GetSiteInstance());
800 EXPECT_TRUE(orig_site_instance != NULL); 777 EXPECT_TRUE(orig_site_instance != NULL);
801 778
802 // Test clicking a target=foo link. 779 // Test clicking a target=foo link.
803 ShellAddedObserver new_shell_observer; 780 ShellAddedObserver new_shell_observer;
804 bool success = false; 781 bool success = false;
805 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 782 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
806 shell()->web_contents()->GetRenderViewHost(), 783 shell()->web_contents()->GetRenderViewHost(), L"",
807 "", 784 L"window.domAutomationController.send(clickSameSiteTargetedLink());",
808 "window.domAutomationController.send(clickSameSiteTargetedLink());",
809 &success)); 785 &success));
810 EXPECT_TRUE(success); 786 EXPECT_TRUE(success);
811 Shell* new_shell = new_shell_observer.GetShell(); 787 Shell* new_shell = new_shell_observer.GetShell();
812 788
813 // Wait for the navigation in the new window to finish, if it hasn't. 789 // Wait for the navigation in the new window to finish, if it hasn't.
814 WaitForLoadStop(new_shell->web_contents()); 790 WaitForLoadStop(new_shell->web_contents());
815 EXPECT_EQ("/files/navigate_opener.html", 791 EXPECT_EQ("/files/navigate_opener.html",
816 new_shell->web_contents()->GetURL().path()); 792 new_shell->web_contents()->GetURL().path());
817 793
818 // Should have the same SiteInstance. 794 // Should have the same SiteInstance.
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
878 shell()->web_contents()->GetSiteInstance()); 854 shell()->web_contents()->GetSiteInstance());
879 EXPECT_EQ(orig_site_instance, post_nav_site_instance); 855 EXPECT_EQ(orig_site_instance, post_nav_site_instance);
880 EXPECT_EQ("/nocontent", shell()->web_contents()->GetURL().path()); 856 EXPECT_EQ("/nocontent", shell()->web_contents()->GetURL().path());
881 EXPECT_EQ("/files/click-noreferrer-links.html", 857 EXPECT_EQ("/files/click-noreferrer-links.html",
882 shell()->web_contents()->GetController(). 858 shell()->web_contents()->GetController().
883 GetLastCommittedEntry()->GetVirtualURL().path()); 859 GetLastCommittedEntry()->GetVirtualURL().path());
884 860
885 // Renderer-initiated navigations should work. 861 // Renderer-initiated navigations should work.
886 bool success = false; 862 bool success = false;
887 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 863 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
888 shell()->web_contents()->GetRenderViewHost(), 864 shell()->web_contents()->GetRenderViewHost(), L"",
889 "", 865 L"window.domAutomationController.send(clickNoRefLink());",
890 "window.domAutomationController.send(clickNoRefLink());",
891 &success)); 866 &success));
892 EXPECT_TRUE(success); 867 EXPECT_TRUE(success);
893 868
894 // Wait for the cross-site transition in the current tab to finish. 869 // Wait for the cross-site transition in the current tab to finish.
895 WaitForLoadStop(shell()->web_contents()); 870 WaitForLoadStop(shell()->web_contents());
896 871
897 // Opens in same tab. 872 // Opens in same tab.
898 EXPECT_EQ(1u, Shell::windows().size()); 873 EXPECT_EQ(1u, Shell::windows().size());
899 EXPECT_EQ("/files/title2.html", shell()->web_contents()->GetURL().path()); 874 EXPECT_EQ("/files/title2.html", shell()->web_contents()->GetURL().path());
900 875
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1038 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement( 1013 ASSERT_TRUE(GetFilePathWithHostAndPortReplacement(
1039 "files/click-noreferrer-links.html", 1014 "files/click-noreferrer-links.html",
1040 https_server.host_port_pair(), 1015 https_server.host_port_pair(),
1041 &replacement_path)); 1016 &replacement_path));
1042 NavigateToURL(shell(), test_server()->GetURL(replacement_path)); 1017 NavigateToURL(shell(), test_server()->GetURL(replacement_path));
1043 1018
1044 // Open a same-site link in a new widnow. 1019 // Open a same-site link in a new widnow.
1045 ShellAddedObserver new_shell_observer; 1020 ShellAddedObserver new_shell_observer;
1046 bool success = false; 1021 bool success = false;
1047 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 1022 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
1048 shell()->web_contents()->GetRenderViewHost(), 1023 shell()->web_contents()->GetRenderViewHost(), L"",
1049 "", 1024 L"window.domAutomationController.send(clickSameSiteTargetedLink());",
1050 "window.domAutomationController.send(clickSameSiteTargetedLink());",
1051 &success)); 1025 &success));
1052 EXPECT_TRUE(success); 1026 EXPECT_TRUE(success);
1053 Shell* new_shell = new_shell_observer.GetShell(); 1027 Shell* new_shell = new_shell_observer.GetShell();
1054 1028
1055 // Wait for the navigation in the new tab to finish, if it hasn't. 1029 // Wait for the navigation in the new tab to finish, if it hasn't.
1056 WaitForLoadStop(new_shell->web_contents()); 1030 WaitForLoadStop(new_shell->web_contents());
1057 EXPECT_EQ("/files/navigate_opener.html", 1031 EXPECT_EQ("/files/navigate_opener.html",
1058 new_shell->web_contents()->GetURL().path()); 1032 new_shell->web_contents()->GetURL().path());
1059 1033
1060 RenderViewHost* rvh = new_shell->web_contents()->GetRenderViewHost(); 1034 RenderViewHost* rvh = new_shell->web_contents()->GetRenderViewHost();
1061 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 1035 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
1062 rvh, 1036 rvh, L"",
1063 "", 1037 L"window.domAutomationController.send("
1064 "window.domAutomationController.send(" 1038 L"document.webkitVisibilityState == 'visible');",
1065 "document.webkitVisibilityState == 'visible');",
1066 &success)); 1039 &success));
1067 EXPECT_TRUE(success); 1040 EXPECT_TRUE(success);
1068 1041
1069 // Now navigate the new window to a different site. This should swap out the 1042 // Now navigate the new window to a different site. This should swap out the
1070 // tab's existing RenderView, causing it become hidden. 1043 // tab's existing RenderView, causing it become hidden.
1071 NavigateToURL(new_shell, https_server.GetURL("files/title1.html")); 1044 NavigateToURL(new_shell, https_server.GetURL("files/title1.html"));
1072 1045
1073 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 1046 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
1074 rvh, 1047 rvh, L"",
1075 "", 1048 L"window.domAutomationController.send("
1076 "window.domAutomationController.send(" 1049 L"document.webkitVisibilityState == 'hidden');",
1077 "document.webkitVisibilityState == 'hidden');",
1078 &success)); 1050 &success));
1079 EXPECT_TRUE(success); 1051 EXPECT_TRUE(success);
1080 1052
1081 // Going back should make the previously swapped-out view to become visible 1053 // Going back should make the previously swapped-out view to become visible
1082 // again. 1054 // again.
1083 { 1055 {
1084 WindowedNotificationObserver back_nav_load_observer( 1056 WindowedNotificationObserver back_nav_load_observer(
1085 NOTIFICATION_NAV_ENTRY_COMMITTED, 1057 NOTIFICATION_NAV_ENTRY_COMMITTED,
1086 Source<NavigationController>( 1058 Source<NavigationController>(
1087 &new_shell->web_contents()->GetController())); 1059 &new_shell->web_contents()->GetController()));
1088 new_shell->web_contents()->GetController().GoBack(); 1060 new_shell->web_contents()->GetController().GoBack();
1089 back_nav_load_observer.Wait(); 1061 back_nav_load_observer.Wait();
1090 } 1062 }
1091 1063
1092 1064
1093 EXPECT_EQ("/files/navigate_opener.html", 1065 EXPECT_EQ("/files/navigate_opener.html",
1094 new_shell->web_contents()->GetURL().path()); 1066 new_shell->web_contents()->GetURL().path());
1095 1067
1096 EXPECT_EQ(rvh, new_shell->web_contents()->GetRenderViewHost()); 1068 EXPECT_EQ(rvh, new_shell->web_contents()->GetRenderViewHost());
1097 1069
1098 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 1070 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
1099 rvh, 1071 rvh, L"",
1100 "", 1072 L"window.domAutomationController.send("
1101 "window.domAutomationController.send(" 1073 L"document.webkitVisibilityState == 'visible');",
1102 "document.webkitVisibilityState == 'visible');",
1103 &success)); 1074 &success));
1104 EXPECT_TRUE(success); 1075 EXPECT_TRUE(success);
1105 } 1076 }
1106 1077
1107 // This class holds onto RenderViewHostObservers for as long as their observed 1078 // This class holds onto RenderViewHostObservers for as long as their observed
1108 // RenderViewHosts are alive. This allows us to confirm that all hosts have 1079 // RenderViewHosts are alive. This allows us to confirm that all hosts have
1109 // properly been shutdown. 1080 // properly been shutdown.
1110 class RenderViewHostObserverArray { 1081 class RenderViewHostObserverArray {
1111 public: 1082 public:
1112 ~RenderViewHostObserverArray() { 1083 ~RenderViewHostObserverArray() {
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
1261 frames = GetTree(opener_rvhm->current_host()); 1232 frames = GetTree(opener_rvhm->current_host());
1262 EXPECT_TRUE(frames->GetList(kFrameTreeNodeSubtreeKey, &subtree)); 1233 EXPECT_TRUE(frames->GetList(kFrameTreeNodeSubtreeKey, &subtree));
1263 EXPECT_TRUE(subtree->GetSize() == 3); 1234 EXPECT_TRUE(subtree->GetSize() == 3);
1264 1235
1265 scoped_refptr<SiteInstance> orig_site_instance( 1236 scoped_refptr<SiteInstance> orig_site_instance(
1266 opener_contents->GetSiteInstance()); 1237 opener_contents->GetSiteInstance());
1267 EXPECT_TRUE(orig_site_instance != NULL); 1238 EXPECT_TRUE(orig_site_instance != NULL);
1268 1239
1269 ShellAddedObserver shell_observer1; 1240 ShellAddedObserver shell_observer1;
1270 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 1241 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
1271 opener_contents->GetRenderViewHost(), 1242 opener_contents->GetRenderViewHost(), L"",
1272 "", 1243 L"window.domAutomationController.send(openWindow('1-3.html'));",
1273 "window.domAutomationController.send(openWindow('1-3.html'));",
1274 &success)); 1244 &success));
1275 EXPECT_TRUE(success); 1245 EXPECT_TRUE(success);
1276 1246
1277 Shell* shell1 = shell_observer1.GetShell(); 1247 Shell* shell1 = shell_observer1.GetShell();
1278 WebContents* contents1 = shell1->web_contents(); 1248 WebContents* contents1 = shell1->web_contents();
1279 WaitForLoadStop(contents1); 1249 WaitForLoadStop(contents1);
1280 RenderViewHostManager* rvhm1 = static_cast<WebContentsImpl*>( 1250 RenderViewHostManager* rvhm1 = static_cast<WebContentsImpl*>(
1281 contents1)->GetRenderManagerForTesting(); 1251 contents1)->GetRenderManagerForTesting();
1282 EXPECT_EQ("/files/frame_tree/1-3.html", contents1->GetURL().path()); 1252 EXPECT_EQ("/files/frame_tree/1-3.html", contents1->GetURL().path());
1283 1253
1284 // Now navigate the new window to a different SiteInstance. 1254 // Now navigate the new window to a different SiteInstance.
1285 NavigateToURL(shell1, https_server.GetURL("files/title1.html")); 1255 NavigateToURL(shell1, https_server.GetURL("files/title1.html"));
1286 EXPECT_EQ("/files/title1.html", contents1->GetURL().path()); 1256 EXPECT_EQ("/files/title1.html", contents1->GetURL().path());
1287 scoped_refptr<SiteInstance> site_instance1( 1257 scoped_refptr<SiteInstance> site_instance1(
1288 contents1->GetSiteInstance()); 1258 contents1->GetSiteInstance());
1289 EXPECT_NE(orig_site_instance, site_instance1); 1259 EXPECT_NE(orig_site_instance, site_instance1);
1290 1260
1291 ShellAddedObserver shell_observer2; 1261 ShellAddedObserver shell_observer2;
1292 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 1262 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
1293 opener_contents->GetRenderViewHost(), 1263 opener_contents->GetRenderViewHost(), L"",
1294 "", 1264 L"window.domAutomationController.send(openWindow('../title2.html'));",
1295 "window.domAutomationController.send(openWindow('../title2.html'));",
1296 &success)); 1265 &success));
1297 EXPECT_TRUE(success); 1266 EXPECT_TRUE(success);
1298 1267
1299 Shell* shell2 = shell_observer2.GetShell(); 1268 Shell* shell2 = shell_observer2.GetShell();
1300 WebContents* contents2 = shell2->web_contents(); 1269 WebContents* contents2 = shell2->web_contents();
1301 WaitForLoadStop(contents2); 1270 WaitForLoadStop(contents2);
1302 EXPECT_EQ("/files/title2.html", contents2->GetURL().path()); 1271 EXPECT_EQ("/files/title2.html", contents2->GetURL().path());
1303 1272
1304 // Navigate the second new window to a different SiteInstance as well. 1273 // Navigate the second new window to a different SiteInstance as well.
1305 NavigateToURL(shell2, remote_frame); 1274 NavigateToURL(shell2, remote_frame);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1344 GetTree(opener_rvhm->GetSwappedOutRenderViewHost(site_instance2)))); 1313 GetTree(opener_rvhm->GetSwappedOutRenderViewHost(site_instance2))));
1345 1314
1346 EXPECT_FALSE(CompareTrees( 1315 EXPECT_FALSE(CompareTrees(
1347 GetTree(opener_rvhm->current_host()), GetTree(rvhm1->current_host()))); 1316 GetTree(opener_rvhm->current_host()), GetTree(rvhm1->current_host())));
1348 EXPECT_FALSE(CompareTrees( 1317 EXPECT_FALSE(CompareTrees(
1349 GetTree(opener_rvhm->current_host()), GetTree(rvhm2->current_host()))); 1318 GetTree(opener_rvhm->current_host()), GetTree(rvhm2->current_host())));
1350 1319
1351 // Now let's ensure that using JS to add/remove frames results in proper 1320 // Now let's ensure that using JS to add/remove frames results in proper
1352 // updates. 1321 // updates.
1353 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 1322 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
1354 opener_contents->GetRenderViewHost(), 1323 opener_contents->GetRenderViewHost(), L"",
1355 "", 1324 L"window.domAutomationController.send(removeFrame());",
1356 "window.domAutomationController.send(removeFrame());",
1357 &success)); 1325 &success));
1358 EXPECT_TRUE(success); 1326 EXPECT_TRUE(success);
1359 frames = GetTree(opener_rvhm->current_host()); 1327 frames = GetTree(opener_rvhm->current_host());
1360 EXPECT_TRUE(frames->GetList(kFrameTreeNodeSubtreeKey, &subtree)); 1328 EXPECT_TRUE(frames->GetList(kFrameTreeNodeSubtreeKey, &subtree));
1361 EXPECT_EQ(subtree->GetSize(), 2U); 1329 EXPECT_EQ(subtree->GetSize(), 2U);
1362 1330
1363 // Create a load observer for the iframe that will be created by the 1331 // Create a load observer for the iframe that will be created by the
1364 // JavaScript code we will execute. 1332 // JavaScript code we will execute.
1365 WindowedNotificationObserver load_observer( 1333 WindowedNotificationObserver load_observer(
1366 NOTIFICATION_LOAD_STOP, 1334 NOTIFICATION_LOAD_STOP,
1367 Source<NavigationController>( 1335 Source<NavigationController>(
1368 &opener_contents->GetController())); 1336 &opener_contents->GetController()));
1369 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 1337 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
1370 opener_contents->GetRenderViewHost(), 1338 opener_contents->GetRenderViewHost(), L"",
1371 "", 1339 L"window.domAutomationController.send(addFrame());",
1372 "window.domAutomationController.send(addFrame());",
1373 &success)); 1340 &success));
1374 EXPECT_TRUE(success); 1341 EXPECT_TRUE(success);
1375 load_observer.Wait(); 1342 load_observer.Wait();
1376 1343
1377 frames = GetTree(opener_rvhm->current_host()); 1344 frames = GetTree(opener_rvhm->current_host());
1378 EXPECT_TRUE(frames->GetList(kFrameTreeNodeSubtreeKey, &subtree)); 1345 EXPECT_TRUE(frames->GetList(kFrameTreeNodeSubtreeKey, &subtree));
1379 EXPECT_EQ(subtree->GetSize(), 3U); 1346 EXPECT_EQ(subtree->GetSize(), 3U);
1380 1347
1381 EXPECT_TRUE(CompareTrees( 1348 EXPECT_TRUE(CompareTrees(
1382 GetTree(opener_rvhm->current_host()), 1349 GetTree(opener_rvhm->current_host()),
(...skipping 29 matching lines...) Expand all
1412 test_server()->GetURL("files/remove_frame_on_unload.html")); 1379 test_server()->GetURL("files/remove_frame_on_unload.html"));
1413 1380
1414 // Get the original SiteInstance for later comparison. 1381 // Get the original SiteInstance for later comparison.
1415 scoped_refptr<SiteInstance> orig_site_instance( 1382 scoped_refptr<SiteInstance> orig_site_instance(
1416 shell()->web_contents()->GetSiteInstance()); 1383 shell()->web_contents()->GetSiteInstance());
1417 1384
1418 // Open a same-site page in a new window. 1385 // Open a same-site page in a new window.
1419 ShellAddedObserver new_shell_observer; 1386 ShellAddedObserver new_shell_observer;
1420 bool success = false; 1387 bool success = false;
1421 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool( 1388 EXPECT_TRUE(ExecuteJavaScriptAndExtractBool(
1422 shell()->web_contents()->GetRenderViewHost(), 1389 shell()->web_contents()->GetRenderViewHost(), L"",
1423 "", 1390 L"window.domAutomationController.send(openWindow());",
1424 "window.domAutomationController.send(openWindow());",
1425 &success)); 1391 &success));
1426 EXPECT_TRUE(success); 1392 EXPECT_TRUE(success);
1427 Shell* new_shell = new_shell_observer.GetShell(); 1393 Shell* new_shell = new_shell_observer.GetShell();
1428 1394
1429 // Wait for the navigation in the new window to finish, if it hasn't. 1395 // Wait for the navigation in the new window to finish, if it hasn't.
1430 WaitForLoadStop(new_shell->web_contents()); 1396 WaitForLoadStop(new_shell->web_contents());
1431 EXPECT_EQ("/files/title1.html", 1397 EXPECT_EQ("/files/title1.html",
1432 new_shell->web_contents()->GetURL().path()); 1398 new_shell->web_contents()->GetURL().path());
1433 1399
1434 // Should have the same SiteInstance. 1400 // Should have the same SiteInstance.
1435 EXPECT_EQ(orig_site_instance, new_shell->web_contents()->GetSiteInstance()); 1401 EXPECT_EQ(orig_site_instance, new_shell->web_contents()->GetSiteInstance());
1436 1402
1437 // 2. Send the second tab to a different process. 1403 // 2. Send the second tab to a different process.
1438 NavigateToURL(new_shell, https_server.GetURL("files/title1.html")); 1404 NavigateToURL(new_shell, https_server.GetURL("files/title1.html"));
1439 scoped_refptr<SiteInstance> new_site_instance( 1405 scoped_refptr<SiteInstance> new_site_instance(
1440 new_shell->web_contents()->GetSiteInstance()); 1406 new_shell->web_contents()->GetSiteInstance());
1441 EXPECT_NE(orig_site_instance, new_site_instance); 1407 EXPECT_NE(orig_site_instance, new_site_instance);
1442 1408
1443 // 3. Send the first tab to the second tab's process. 1409 // 3. Send the first tab to the second tab's process.
1444 NavigateToURL(shell(), https_server.GetURL("files/title1.html")); 1410 NavigateToURL(shell(), https_server.GetURL("files/title1.html"));
1445 1411
1446 // Make sure it ends up at the right page. 1412 // Make sure it ends up at the right page.
1447 WaitForLoadStop(shell()->web_contents()); 1413 WaitForLoadStop(shell()->web_contents());
1448 EXPECT_EQ(https_server.GetURL("files/title1.html"), 1414 EXPECT_EQ(https_server.GetURL("files/title1.html"),
1449 shell()->web_contents()->GetURL()); 1415 shell()->web_contents()->GetURL());
1450 EXPECT_EQ(new_site_instance, shell()->web_contents()->GetSiteInstance()); 1416 EXPECT_EQ(new_site_instance, shell()->web_contents()->GetSiteInstance());
1451 } 1417 }
1452 1418
1453 } // namespace content 1419 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698