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

Side by Side Diff: chrome/browser/tab_contents/web_contents_unittest.cc

Issue 8801003: Make TestTabContents::TestDidNavigate not take a ViewHostMsg_FrameNavigate_Params, since that's a... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Also get rid of content usage and remove the method Created 9 years 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/logging.h" 5 #include "base/logging.h"
6 #include "base/utf_string_conversions.h" 6 #include "base/utf_string_conversions.h"
7 #include "chrome/browser/dom_operation_notification_details.h" 7 #include "chrome/browser/dom_operation_notification_details.h"
8 #include "chrome/browser/prefs/pref_service.h" 8 #include "chrome/browser/prefs/pref_service.h"
9 #include "chrome/browser/tab_contents/chrome_interstitial_page.h" 9 #include "chrome/browser/tab_contents/chrome_interstitial_page.h"
10 #include "chrome/common/chrome_notification_types.h" 10 #include "chrome/common/chrome_notification_types.h"
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 const GURL url("http://www.google.com"); 249 const GURL url("http://www.google.com");
250 controller().LoadURL( 250 controller().LoadURL(
251 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 251 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
252 EXPECT_FALSE(contents()->cross_navigation_pending()); 252 EXPECT_FALSE(contents()->cross_navigation_pending());
253 EXPECT_EQ(instance1, orig_rvh->site_instance()); 253 EXPECT_EQ(instance1, orig_rvh->site_instance());
254 // Controller's pending entry will have a NULL site instance until we assign 254 // Controller's pending entry will have a NULL site instance until we assign
255 // it in DidNavigate. 255 // it in DidNavigate.
256 EXPECT_TRUE(controller().GetActiveEntry()->site_instance() == NULL); 256 EXPECT_TRUE(controller().GetActiveEntry()->site_instance() == NULL);
257 257
258 // DidNavigate from the page 258 // DidNavigate from the page
259 ViewHostMsg_FrameNavigate_Params params; 259 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
260 InitNavigateParams(&params, 1, url, content::PAGE_TRANSITION_TYPED);
261 contents()->TestDidNavigate(orig_rvh, params);
262 EXPECT_FALSE(contents()->cross_navigation_pending()); 260 EXPECT_FALSE(contents()->cross_navigation_pending());
263 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 261 EXPECT_EQ(orig_rvh, contents()->render_view_host());
264 EXPECT_EQ(instance1, orig_rvh->site_instance()); 262 EXPECT_EQ(instance1, orig_rvh->site_instance());
265 // Controller's entry should now have the SiteInstance, or else we won't be 263 // Controller's entry should now have the SiteInstance, or else we won't be
266 // able to find it later. 264 // able to find it later.
267 EXPECT_EQ(instance1, controller().GetActiveEntry()->site_instance()); 265 EXPECT_EQ(instance1, controller().GetActiveEntry()->site_instance());
268 } 266 }
269 267
270 // Test that we reject NavigateToEntry if the url is over content::kMaxURLChars. 268 // Test that we reject NavigateToEntry if the url is over content::kMaxURLChars.
271 TEST_F(TabContentsTest, NavigateToExcessivelyLongURL) { 269 TEST_F(TabContentsTest, NavigateToExcessivelyLongURL) {
(...skipping 12 matching lines...) Expand all
284 contents()->transition_cross_site = true; 282 contents()->transition_cross_site = true;
285 TestRenderViewHost* orig_rvh = rvh(); 283 TestRenderViewHost* orig_rvh = rvh();
286 int orig_rvh_delete_count = 0; 284 int orig_rvh_delete_count = 0;
287 orig_rvh->set_delete_counter(&orig_rvh_delete_count); 285 orig_rvh->set_delete_counter(&orig_rvh_delete_count);
288 SiteInstance* instance1 = contents()->GetSiteInstance(); 286 SiteInstance* instance1 = contents()->GetSiteInstance();
289 287
290 // Navigate to URL. First URL should use first RenderViewHost. 288 // Navigate to URL. First URL should use first RenderViewHost.
291 const GURL url("http://www.google.com"); 289 const GURL url("http://www.google.com");
292 controller().LoadURL( 290 controller().LoadURL(
293 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 291 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
294 ViewHostMsg_FrameNavigate_Params params1; 292 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
295 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
296 contents()->TestDidNavigate(orig_rvh, params1);
297 293
298 EXPECT_FALSE(contents()->cross_navigation_pending()); 294 EXPECT_FALSE(contents()->cross_navigation_pending());
299 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 295 EXPECT_EQ(orig_rvh, contents()->render_view_host());
300 296
301 // Navigate to new site 297 // Navigate to new site
302 const GURL url2("http://www.yahoo.com"); 298 const GURL url2("http://www.yahoo.com");
303 controller().LoadURL( 299 controller().LoadURL(
304 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 300 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
305 EXPECT_TRUE(contents()->cross_navigation_pending()); 301 EXPECT_TRUE(contents()->cross_navigation_pending());
306 TestRenderViewHost* pending_rvh = contents()->pending_rvh(); 302 TestRenderViewHost* pending_rvh = contents()->pending_rvh();
307 int pending_rvh_delete_count = 0; 303 int pending_rvh_delete_count = 0;
308 pending_rvh->set_delete_counter(&pending_rvh_delete_count); 304 pending_rvh->set_delete_counter(&pending_rvh_delete_count);
309 305
310 // Navigations should be suspended in pending_rvh until ShouldCloseACK. 306 // Navigations should be suspended in pending_rvh until ShouldCloseACK.
311 EXPECT_TRUE(pending_rvh->are_navigations_suspended()); 307 EXPECT_TRUE(pending_rvh->are_navigations_suspended());
312 orig_rvh->SendShouldCloseACK(true); 308 orig_rvh->SendShouldCloseACK(true);
313 EXPECT_FALSE(pending_rvh->are_navigations_suspended()); 309 EXPECT_FALSE(pending_rvh->are_navigations_suspended());
314 310
315 // DidNavigate from the pending page 311 // DidNavigate from the pending page
316 ViewHostMsg_FrameNavigate_Params params2; 312 contents()->TestDidNavigate(
317 InitNavigateParams(&params2, 1, url2, content::PAGE_TRANSITION_TYPED); 313 pending_rvh, 1, url2, content::PAGE_TRANSITION_TYPED);
318 contents()->TestDidNavigate(pending_rvh, params2);
319 SiteInstance* instance2 = contents()->GetSiteInstance(); 314 SiteInstance* instance2 = contents()->GetSiteInstance();
320 315
321 EXPECT_FALSE(contents()->cross_navigation_pending()); 316 EXPECT_FALSE(contents()->cross_navigation_pending());
322 EXPECT_EQ(pending_rvh, contents()->render_view_host()); 317 EXPECT_EQ(pending_rvh, contents()->render_view_host());
323 EXPECT_NE(instance1, instance2); 318 EXPECT_NE(instance1, instance2);
324 EXPECT_TRUE(contents()->pending_rvh() == NULL); 319 EXPECT_TRUE(contents()->pending_rvh() == NULL);
325 // We keep the original RVH around, swapped out. 320 // We keep the original RVH around, swapped out.
326 EXPECT_TRUE(contents()->render_manager_for_testing()->IsSwappedOut(orig_rvh)); 321 EXPECT_TRUE(contents()->render_manager_for_testing()->IsSwappedOut(orig_rvh));
327 EXPECT_EQ(orig_rvh_delete_count, 0); 322 EXPECT_EQ(orig_rvh_delete_count, 0);
328 323
329 // Going back should switch SiteInstances again. The first SiteInstance is 324 // Going back should switch SiteInstances again. The first SiteInstance is
330 // stored in the NavigationEntry, so it should be the same as at the start. 325 // stored in the NavigationEntry, so it should be the same as at the start.
331 // We should use the same RVH as before, swapping it back in. 326 // We should use the same RVH as before, swapping it back in.
332 controller().GoBack(); 327 controller().GoBack();
333 TestRenderViewHost* goback_rvh = contents()->pending_rvh(); 328 TestRenderViewHost* goback_rvh = contents()->pending_rvh();
334 EXPECT_EQ(orig_rvh, goback_rvh); 329 EXPECT_EQ(orig_rvh, goback_rvh);
335 EXPECT_TRUE(contents()->cross_navigation_pending()); 330 EXPECT_TRUE(contents()->cross_navigation_pending());
336 331
337 // Navigations should be suspended in goback_rvh until ShouldCloseACK. 332 // Navigations should be suspended in goback_rvh until ShouldCloseACK.
338 EXPECT_TRUE(goback_rvh->are_navigations_suspended()); 333 EXPECT_TRUE(goback_rvh->are_navigations_suspended());
339 pending_rvh->SendShouldCloseACK(true); 334 pending_rvh->SendShouldCloseACK(true);
340 EXPECT_FALSE(goback_rvh->are_navigations_suspended()); 335 EXPECT_FALSE(goback_rvh->are_navigations_suspended());
341 336
342 // DidNavigate from the back action 337 // DidNavigate from the back action
343 contents()->TestDidNavigate(goback_rvh, params1); 338 contents()->TestDidNavigate(
339 goback_rvh, 1, url2, content::PAGE_TRANSITION_TYPED);
344 EXPECT_FALSE(contents()->cross_navigation_pending()); 340 EXPECT_FALSE(contents()->cross_navigation_pending());
345 EXPECT_EQ(goback_rvh, contents()->render_view_host()); 341 EXPECT_EQ(goback_rvh, contents()->render_view_host());
346 EXPECT_EQ(instance1, contents()->GetSiteInstance()); 342 EXPECT_EQ(instance1, contents()->GetSiteInstance());
347 // The pending RVH should now be swapped out, not deleted. 343 // The pending RVH should now be swapped out, not deleted.
348 EXPECT_TRUE(contents()->render_manager_for_testing()-> 344 EXPECT_TRUE(contents()->render_manager_for_testing()->
349 IsSwappedOut(pending_rvh)); 345 IsSwappedOut(pending_rvh));
350 EXPECT_EQ(pending_rvh_delete_count, 0); 346 EXPECT_EQ(pending_rvh_delete_count, 0);
351 347
352 // Close tab and ensure RVHs are deleted. 348 // Close tab and ensure RVHs are deleted.
353 DeleteContents(); 349 DeleteContents();
354 EXPECT_EQ(orig_rvh_delete_count, 1); 350 EXPECT_EQ(orig_rvh_delete_count, 1);
355 EXPECT_EQ(pending_rvh_delete_count, 1); 351 EXPECT_EQ(pending_rvh_delete_count, 1);
356 } 352 }
357 353
358 // Test that navigating across a site boundary after a crash creates a new 354 // Test that navigating across a site boundary after a crash creates a new
359 // RVH without requiring a cross-site transition (i.e., PENDING state). 355 // RVH without requiring a cross-site transition (i.e., PENDING state).
360 TEST_F(TabContentsTest, CrossSiteBoundariesAfterCrash) { 356 TEST_F(TabContentsTest, CrossSiteBoundariesAfterCrash) {
361 contents()->transition_cross_site = true; 357 contents()->transition_cross_site = true;
362 TestRenderViewHost* orig_rvh = rvh(); 358 TestRenderViewHost* orig_rvh = rvh();
363 int orig_rvh_delete_count = 0; 359 int orig_rvh_delete_count = 0;
364 orig_rvh->set_delete_counter(&orig_rvh_delete_count); 360 orig_rvh->set_delete_counter(&orig_rvh_delete_count);
365 SiteInstance* instance1 = contents()->GetSiteInstance(); 361 SiteInstance* instance1 = contents()->GetSiteInstance();
366 362
367 // Navigate to URL. First URL should use first RenderViewHost. 363 // Navigate to URL. First URL should use first RenderViewHost.
368 const GURL url("http://www.google.com"); 364 const GURL url("http://www.google.com");
369 controller().LoadURL( 365 controller().LoadURL(
370 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 366 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
371 ViewHostMsg_FrameNavigate_Params params1; 367 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
372 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
373 contents()->TestDidNavigate(orig_rvh, params1);
374 368
375 EXPECT_FALSE(contents()->cross_navigation_pending()); 369 EXPECT_FALSE(contents()->cross_navigation_pending());
376 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 370 EXPECT_EQ(orig_rvh, contents()->render_view_host());
377 371
378 // Crash the renderer. 372 // Crash the renderer.
379 orig_rvh->set_render_view_created(false); 373 orig_rvh->set_render_view_created(false);
380 374
381 // Navigate to new site. We should not go into PENDING. 375 // Navigate to new site. We should not go into PENDING.
382 const GURL url2("http://www.yahoo.com"); 376 const GURL url2("http://www.yahoo.com");
383 controller().LoadURL( 377 controller().LoadURL(
384 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 378 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
385 TestRenderViewHost* new_rvh = rvh(); 379 TestRenderViewHost* new_rvh = rvh();
386 EXPECT_FALSE(contents()->cross_navigation_pending()); 380 EXPECT_FALSE(contents()->cross_navigation_pending());
387 EXPECT_TRUE(contents()->pending_rvh() == NULL); 381 EXPECT_TRUE(contents()->pending_rvh() == NULL);
388 EXPECT_NE(orig_rvh, new_rvh); 382 EXPECT_NE(orig_rvh, new_rvh);
389 EXPECT_EQ(orig_rvh_delete_count, 1); 383 EXPECT_EQ(orig_rvh_delete_count, 1);
390 384
391 // DidNavigate from the new page 385 // DidNavigate from the new page
392 ViewHostMsg_FrameNavigate_Params params2; 386 contents()->TestDidNavigate(new_rvh, 1, url2, content::PAGE_TRANSITION_TYPED);
393 InitNavigateParams(&params2, 1, url2, content::PAGE_TRANSITION_TYPED);
394 contents()->TestDidNavigate(new_rvh, params2);
395 SiteInstance* instance2 = contents()->GetSiteInstance(); 387 SiteInstance* instance2 = contents()->GetSiteInstance();
396 388
397 EXPECT_FALSE(contents()->cross_navigation_pending()); 389 EXPECT_FALSE(contents()->cross_navigation_pending());
398 EXPECT_EQ(new_rvh, rvh()); 390 EXPECT_EQ(new_rvh, rvh());
399 EXPECT_NE(instance1, instance2); 391 EXPECT_NE(instance1, instance2);
400 EXPECT_TRUE(contents()->pending_rvh() == NULL); 392 EXPECT_TRUE(contents()->pending_rvh() == NULL);
401 393
402 // Close tab and ensure RVHs are deleted. 394 // Close tab and ensure RVHs are deleted.
403 DeleteContents(); 395 DeleteContents();
404 EXPECT_EQ(orig_rvh_delete_count, 1); 396 EXPECT_EQ(orig_rvh_delete_count, 1);
405 } 397 }
406 398
407 // Test that opening a new tab in the same SiteInstance and then navigating 399 // Test that opening a new tab in the same SiteInstance and then navigating
408 // both tabs to a new site will place both tabs in a single SiteInstance. 400 // both tabs to a new site will place both tabs in a single SiteInstance.
409 TEST_F(TabContentsTest, NavigateTwoTabsCrossSite) { 401 TEST_F(TabContentsTest, NavigateTwoTabsCrossSite) {
410 contents()->transition_cross_site = true; 402 contents()->transition_cross_site = true;
411 TestRenderViewHost* orig_rvh = rvh(); 403 TestRenderViewHost* orig_rvh = rvh();
412 SiteInstance* instance1 = contents()->GetSiteInstance(); 404 SiteInstance* instance1 = contents()->GetSiteInstance();
413 405
414 // Navigate to URL. First URL should use first RenderViewHost. 406 // Navigate to URL. First URL should use first RenderViewHost.
415 const GURL url("http://www.google.com"); 407 const GURL url("http://www.google.com");
416 controller().LoadURL( 408 controller().LoadURL(
417 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 409 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
418 ViewHostMsg_FrameNavigate_Params params1; 410 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
419 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
420 contents()->TestDidNavigate(orig_rvh, params1);
421 411
422 // Open a new tab with the same SiteInstance, navigated to the same site. 412 // Open a new tab with the same SiteInstance, navigated to the same site.
423 TestTabContents contents2(profile(), instance1); 413 TestTabContents contents2(profile(), instance1);
424 params1.page_id = 2; // Need this since the site instance is the same (which
425 // is the scope of page IDs) and we want to consider
426 // this a new page.
427 contents2.transition_cross_site = true; 414 contents2.transition_cross_site = true;
428 contents2.controller().LoadURL(url, GURL(), content::PAGE_TRANSITION_TYPED, 415 contents2.controller().LoadURL(url, GURL(), content::PAGE_TRANSITION_TYPED,
429 std::string()); 416 std::string());
430 contents2.TestDidNavigate(contents2.render_view_host(), params1); 417 // Need this page id to be 2since the site instance is the same (which is the
Jói 2011/12/05 10:30:51 2since -> 2 since
418 // scope of page IDs) and we want to consider this a new page.
419 contents2.TestDidNavigate(
420 contents2.render_view_host(), 2, url, content::PAGE_TRANSITION_TYPED);
431 421
432 // Navigate first tab to a new site 422 // Navigate first tab to a new site
433 const GURL url2a("http://www.yahoo.com"); 423 const GURL url2a("http://www.yahoo.com");
434 controller().LoadURL( 424 controller().LoadURL(
435 url2a, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 425 url2a, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
436 orig_rvh->SendShouldCloseACK(true); 426 orig_rvh->SendShouldCloseACK(true);
437 TestRenderViewHost* pending_rvh_a = contents()->pending_rvh(); 427 TestRenderViewHost* pending_rvh_a = contents()->pending_rvh();
438 ViewHostMsg_FrameNavigate_Params params2a; 428 contents()->TestDidNavigate(
439 InitNavigateParams(&params2a, 1, url2a, content::PAGE_TRANSITION_TYPED); 429 pending_rvh_a, 1, url2a, content::PAGE_TRANSITION_TYPED);
440 contents()->TestDidNavigate(pending_rvh_a, params2a);
441 SiteInstance* instance2a = contents()->GetSiteInstance(); 430 SiteInstance* instance2a = contents()->GetSiteInstance();
442 EXPECT_NE(instance1, instance2a); 431 EXPECT_NE(instance1, instance2a);
443 432
444 // Navigate second tab to the same site as the first tab 433 // Navigate second tab to the same site as the first tab
445 const GURL url2b("http://mail.yahoo.com"); 434 const GURL url2b("http://mail.yahoo.com");
446 contents2.controller().LoadURL(url2b, GURL(), content::PAGE_TRANSITION_TYPED, 435 contents2.controller().LoadURL(url2b, GURL(), content::PAGE_TRANSITION_TYPED,
447 std::string()); 436 std::string());
448 TestRenderViewHost* rvh2 = 437 TestRenderViewHost* rvh2 =
449 static_cast<TestRenderViewHost*>(contents2.render_view_host()); 438 static_cast<TestRenderViewHost*>(contents2.render_view_host());
450 rvh2->SendShouldCloseACK(true); 439 rvh2->SendShouldCloseACK(true);
451 TestRenderViewHost* pending_rvh_b = contents2.pending_rvh(); 440 TestRenderViewHost* pending_rvh_b = contents2.pending_rvh();
452 EXPECT_TRUE(pending_rvh_b != NULL); 441 EXPECT_TRUE(pending_rvh_b != NULL);
453 EXPECT_TRUE(contents2.cross_navigation_pending()); 442 EXPECT_TRUE(contents2.cross_navigation_pending());
454 443
455 // NOTE(creis): We used to be in danger of showing a sad tab page here if the 444 // NOTE(creis): We used to be in danger of showing a sad tab page here if the
456 // second tab hadn't navigated somewhere first (bug 1145430). That case is 445 // second tab hadn't navigated somewhere first (bug 1145430). That case is
457 // now covered by the CrossSiteBoundariesAfterCrash test. 446 // now covered by the CrossSiteBoundariesAfterCrash test.
458 447 contents2.TestDidNavigate(
459 ViewHostMsg_FrameNavigate_Params params2b; 448 pending_rvh_b, 2, url2b, content::PAGE_TRANSITION_TYPED);
460 InitNavigateParams(&params2b, 2, url2b, content::PAGE_TRANSITION_TYPED);
461 contents2.TestDidNavigate(pending_rvh_b, params2b);
462 SiteInstance* instance2b = contents2.GetSiteInstance(); 449 SiteInstance* instance2b = contents2.GetSiteInstance();
463 EXPECT_NE(instance1, instance2b); 450 EXPECT_NE(instance1, instance2b);
464 451
465 // Both tabs should now be in the same SiteInstance. 452 // Both tabs should now be in the same SiteInstance.
466 EXPECT_EQ(instance2a, instance2b); 453 EXPECT_EQ(instance2a, instance2b);
467 } 454 }
468 455
469 // Tests that TabContents uses the current URL, not the SiteInstance's site, to 456 // Tests that TabContents uses the current URL, not the SiteInstance's site, to
470 // determine whether a navigation is cross-site. 457 // determine whether a navigation is cross-site.
471 TEST_F(TabContentsTest, CrossSiteComparesAgainstCurrentPage) { 458 TEST_F(TabContentsTest, CrossSiteComparesAgainstCurrentPage) {
472 contents()->transition_cross_site = true; 459 contents()->transition_cross_site = true;
473 TestRenderViewHost* orig_rvh = rvh(); 460 TestRenderViewHost* orig_rvh = rvh();
474 SiteInstance* instance1 = contents()->GetSiteInstance(); 461 SiteInstance* instance1 = contents()->GetSiteInstance();
475 462
476 // Navigate to URL. 463 // Navigate to URL.
477 const GURL url("http://www.google.com"); 464 const GURL url("http://www.google.com");
478 controller().LoadURL( 465 controller().LoadURL(
479 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 466 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
480 ViewHostMsg_FrameNavigate_Params params1; 467 contents()->TestDidNavigate(
481 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 468 orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
482 contents()->TestDidNavigate(orig_rvh, params1);
483 469
484 // Open a related tab to a second site. 470 // Open a related tab to a second site.
485 TestTabContents contents2(profile(), instance1); 471 TestTabContents contents2(profile(), instance1);
486 contents2.transition_cross_site = true; 472 contents2.transition_cross_site = true;
487 const GURL url2("http://www.yahoo.com"); 473 const GURL url2("http://www.yahoo.com");
488 contents2.controller().LoadURL(url2, GURL(), content::PAGE_TRANSITION_TYPED, 474 contents2.controller().LoadURL(url2, GURL(), content::PAGE_TRANSITION_TYPED,
489 std::string()); 475 std::string());
490 // The first RVH in contents2 isn't live yet, so we shortcut the cross site 476 // The first RVH in contents2 isn't live yet, so we shortcut the cross site
491 // pending. 477 // pending.
492 TestRenderViewHost* rvh2 = static_cast<TestRenderViewHost*>( 478 TestRenderViewHost* rvh2 = static_cast<TestRenderViewHost*>(
493 contents2.render_view_host()); 479 contents2.render_view_host());
494 EXPECT_FALSE(contents2.cross_navigation_pending()); 480 EXPECT_FALSE(contents2.cross_navigation_pending());
495 ViewHostMsg_FrameNavigate_Params params2; 481 contents2.TestDidNavigate(rvh2, 2, url2, content::PAGE_TRANSITION_TYPED);
496 InitNavigateParams(&params2, 2, url2, content::PAGE_TRANSITION_TYPED);
497 contents2.TestDidNavigate(rvh2, params2);
498 SiteInstance* instance2 = contents2.GetSiteInstance(); 482 SiteInstance* instance2 = contents2.GetSiteInstance();
499 EXPECT_NE(instance1, instance2); 483 EXPECT_NE(instance1, instance2);
500 EXPECT_FALSE(contents2.cross_navigation_pending()); 484 EXPECT_FALSE(contents2.cross_navigation_pending());
501 485
502 // Simulate a link click in first tab to second site. Doesn't switch 486 // Simulate a link click in first tab to second site. Doesn't switch
503 // SiteInstances, because we don't intercept WebKit navigations. 487 // SiteInstances, because we don't intercept WebKit navigations.
504 ViewHostMsg_FrameNavigate_Params params3; 488 contents()->TestDidNavigate(
505 InitNavigateParams(&params3, 2, url2, content::PAGE_TRANSITION_TYPED); 489 orig_rvh, 2, url2, content::PAGE_TRANSITION_TYPED);
506 contents()->TestDidNavigate(orig_rvh, params3);
507 SiteInstance* instance3 = contents()->GetSiteInstance(); 490 SiteInstance* instance3 = contents()->GetSiteInstance();
508 EXPECT_EQ(instance1, instance3); 491 EXPECT_EQ(instance1, instance3);
509 EXPECT_FALSE(contents()->cross_navigation_pending()); 492 EXPECT_FALSE(contents()->cross_navigation_pending());
510 493
511 // Navigate to the new site. Doesn't switch SiteInstancees, because we 494 // Navigate to the new site. Doesn't switch SiteInstancees, because we
512 // compare against the current URL, not the SiteInstance's site. 495 // compare against the current URL, not the SiteInstance's site.
513 const GURL url3("http://mail.yahoo.com"); 496 const GURL url3("http://mail.yahoo.com");
514 controller().LoadURL( 497 controller().LoadURL(
515 url3, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 498 url3, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
516 EXPECT_FALSE(contents()->cross_navigation_pending()); 499 EXPECT_FALSE(contents()->cross_navigation_pending());
517 ViewHostMsg_FrameNavigate_Params params4; 500 contents()->TestDidNavigate(
518 InitNavigateParams(&params4, 3, url3, content::PAGE_TRANSITION_TYPED); 501 orig_rvh, 3, url3, content::PAGE_TRANSITION_TYPED);
519 contents()->TestDidNavigate(orig_rvh, params4);
520 SiteInstance* instance4 = contents()->GetSiteInstance(); 502 SiteInstance* instance4 = contents()->GetSiteInstance();
521 EXPECT_EQ(instance1, instance4); 503 EXPECT_EQ(instance1, instance4);
522 } 504 }
523 505
524 // Test that the onbeforeunload and onunload handlers run when navigating 506 // Test that the onbeforeunload and onunload handlers run when navigating
525 // across site boundaries. 507 // across site boundaries.
526 TEST_F(TabContentsTest, CrossSiteUnloadHandlers) { 508 TEST_F(TabContentsTest, CrossSiteUnloadHandlers) {
527 contents()->transition_cross_site = true; 509 contents()->transition_cross_site = true;
528 TestRenderViewHost* orig_rvh = rvh(); 510 TestRenderViewHost* orig_rvh = rvh();
529 SiteInstance* instance1 = contents()->GetSiteInstance(); 511 SiteInstance* instance1 = contents()->GetSiteInstance();
530 512
531 // Navigate to URL. First URL should use first RenderViewHost. 513 // Navigate to URL. First URL should use first RenderViewHost.
532 const GURL url("http://www.google.com"); 514 const GURL url("http://www.google.com");
533 controller().LoadURL( 515 controller().LoadURL(
534 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 516 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
535 ViewHostMsg_FrameNavigate_Params params1; 517 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
536 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
537 contents()->TestDidNavigate(orig_rvh, params1);
538 EXPECT_FALSE(contents()->cross_navigation_pending()); 518 EXPECT_FALSE(contents()->cross_navigation_pending());
539 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 519 EXPECT_EQ(orig_rvh, contents()->render_view_host());
540 520
541 // Navigate to new site, but simulate an onbeforeunload denial. 521 // Navigate to new site, but simulate an onbeforeunload denial.
542 const GURL url2("http://www.yahoo.com"); 522 const GURL url2("http://www.yahoo.com");
543 controller().LoadURL( 523 controller().LoadURL(
544 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 524 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
545 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack()); 525 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack());
546 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, false)); 526 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, false));
547 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack()); 527 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack());
548 EXPECT_FALSE(contents()->cross_navigation_pending()); 528 EXPECT_FALSE(contents()->cross_navigation_pending());
549 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 529 EXPECT_EQ(orig_rvh, contents()->render_view_host());
550 530
551 // Navigate again, but simulate an onbeforeunload approval. 531 // Navigate again, but simulate an onbeforeunload approval.
552 controller().LoadURL( 532 controller().LoadURL(
553 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 533 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
554 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack()); 534 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack());
555 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 535 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
556 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack()); 536 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack());
557 EXPECT_TRUE(contents()->cross_navigation_pending()); 537 EXPECT_TRUE(contents()->cross_navigation_pending());
558 TestRenderViewHost* pending_rvh = static_cast<TestRenderViewHost*>( 538 TestRenderViewHost* pending_rvh = static_cast<TestRenderViewHost*>(
559 contents()->pending_rvh()); 539 contents()->pending_rvh());
560 540
561 // We won't hear DidNavigate until the onunload handler has finished running. 541 // We won't hear DidNavigate until the onunload handler has finished running.
562 // (No way to simulate that here, but it involves a call from RDH to 542 // (No way to simulate that here, but it involves a call from RDH to
563 // TabContents::OnCrossSiteResponse.) 543 // TabContents::OnCrossSiteResponse.)
564 544
565 // DidNavigate from the pending page 545 // DidNavigate from the pending page
566 ViewHostMsg_FrameNavigate_Params params2; 546 contents()->TestDidNavigate(
567 InitNavigateParams(&params2, 1, url2, content::PAGE_TRANSITION_TYPED); 547 pending_rvh, 1, url2, content::PAGE_TRANSITION_TYPED);
568 contents()->TestDidNavigate(pending_rvh, params2);
569 SiteInstance* instance2 = contents()->GetSiteInstance(); 548 SiteInstance* instance2 = contents()->GetSiteInstance();
570 EXPECT_FALSE(contents()->cross_navigation_pending()); 549 EXPECT_FALSE(contents()->cross_navigation_pending());
571 EXPECT_EQ(pending_rvh, rvh()); 550 EXPECT_EQ(pending_rvh, rvh());
572 EXPECT_NE(instance1, instance2); 551 EXPECT_NE(instance1, instance2);
573 EXPECT_TRUE(contents()->pending_rvh() == NULL); 552 EXPECT_TRUE(contents()->pending_rvh() == NULL);
574 } 553 }
575 554
576 // Test that during a slow cross-site navigation, the original renderer can 555 // Test that during a slow cross-site navigation, the original renderer can
577 // navigate to a different URL and have it displayed, canceling the slow 556 // navigate to a different URL and have it displayed, canceling the slow
578 // navigation. 557 // navigation.
579 TEST_F(TabContentsTest, CrossSiteNavigationPreempted) { 558 TEST_F(TabContentsTest, CrossSiteNavigationPreempted) {
580 contents()->transition_cross_site = true; 559 contents()->transition_cross_site = true;
581 TestRenderViewHost* orig_rvh = rvh(); 560 TestRenderViewHost* orig_rvh = rvh();
582 SiteInstance* instance1 = contents()->GetSiteInstance(); 561 SiteInstance* instance1 = contents()->GetSiteInstance();
583 562
584 // Navigate to URL. First URL should use first RenderViewHost. 563 // Navigate to URL. First URL should use first RenderViewHost.
585 const GURL url("http://www.google.com"); 564 const GURL url("http://www.google.com");
586 controller().LoadURL( 565 controller().LoadURL(
587 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 566 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
588 ViewHostMsg_FrameNavigate_Params params1; 567 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
589 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
590 contents()->TestDidNavigate(orig_rvh, params1);
591 EXPECT_FALSE(contents()->cross_navigation_pending()); 568 EXPECT_FALSE(contents()->cross_navigation_pending());
592 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 569 EXPECT_EQ(orig_rvh, contents()->render_view_host());
593 570
594 // Navigate to new site, simulating an onbeforeunload approval. 571 // Navigate to new site, simulating an onbeforeunload approval.
595 const GURL url2("http://www.yahoo.com"); 572 const GURL url2("http://www.yahoo.com");
596 controller().LoadURL( 573 controller().LoadURL(
597 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 574 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
598 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack()); 575 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack());
599 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 576 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
600 EXPECT_TRUE(contents()->cross_navigation_pending()); 577 EXPECT_TRUE(contents()->cross_navigation_pending());
(...skipping 11 matching lines...) Expand all
612 } 589 }
613 590
614 TEST_F(TabContentsTest, CrossSiteNavigationBackPreempted) { 591 TEST_F(TabContentsTest, CrossSiteNavigationBackPreempted) {
615 contents()->transition_cross_site = true; 592 contents()->transition_cross_site = true;
616 593
617 // Start with NTP, which gets a new RVH with WebUI bindings. 594 // Start with NTP, which gets a new RVH with WebUI bindings.
618 const GURL url1("chrome://newtab"); 595 const GURL url1("chrome://newtab");
619 controller().LoadURL( 596 controller().LoadURL(
620 url1, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 597 url1, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
621 TestRenderViewHost* ntp_rvh = rvh(); 598 TestRenderViewHost* ntp_rvh = rvh();
622 ViewHostMsg_FrameNavigate_Params params1; 599 contents()->TestDidNavigate(ntp_rvh, 1, url1, content::PAGE_TRANSITION_TYPED);
623 InitNavigateParams(&params1, 1, url1, content::PAGE_TRANSITION_TYPED);
624 contents()->TestDidNavigate(ntp_rvh, params1);
625 NavigationEntry* entry1 = controller().GetLastCommittedEntry(); 600 NavigationEntry* entry1 = controller().GetLastCommittedEntry();
626 SiteInstance* instance1 = contents()->GetSiteInstance(); 601 SiteInstance* instance1 = contents()->GetSiteInstance();
627 602
628 EXPECT_FALSE(contents()->cross_navigation_pending()); 603 EXPECT_FALSE(contents()->cross_navigation_pending());
629 EXPECT_EQ(ntp_rvh, contents()->render_view_host()); 604 EXPECT_EQ(ntp_rvh, contents()->render_view_host());
630 EXPECT_EQ(url1, entry1->url()); 605 EXPECT_EQ(url1, entry1->url());
631 EXPECT_EQ(instance1, entry1->site_instance()); 606 EXPECT_EQ(instance1, entry1->site_instance());
632 EXPECT_TRUE(ntp_rvh->enabled_bindings() & content::BINDINGS_POLICY_WEB_UI); 607 EXPECT_TRUE(ntp_rvh->enabled_bindings() & content::BINDINGS_POLICY_WEB_UI);
633 608
634 // Navigate to new site. 609 // Navigate to new site.
635 const GURL url2("http://www.google.com"); 610 const GURL url2("http://www.google.com");
636 controller().LoadURL( 611 controller().LoadURL(
637 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 612 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
638 EXPECT_TRUE(contents()->cross_navigation_pending()); 613 EXPECT_TRUE(contents()->cross_navigation_pending());
639 TestRenderViewHost* google_rvh = contents()->pending_rvh(); 614 TestRenderViewHost* google_rvh = contents()->pending_rvh();
640 615
641 // Simulate beforeunload approval. 616 // Simulate beforeunload approval.
642 EXPECT_TRUE(ntp_rvh->is_waiting_for_beforeunload_ack()); 617 EXPECT_TRUE(ntp_rvh->is_waiting_for_beforeunload_ack());
643 ntp_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 618 ntp_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
644 619
645 // DidNavigate from the pending page. 620 // DidNavigate from the pending page.
646 ViewHostMsg_FrameNavigate_Params params2; 621 contents()->TestDidNavigate(
647 InitNavigateParams(&params2, 1, url2, content::PAGE_TRANSITION_TYPED); 622 google_rvh, 1, url2, content::PAGE_TRANSITION_TYPED);
648 contents()->TestDidNavigate(google_rvh, params2);
649 NavigationEntry* entry2 = controller().GetLastCommittedEntry(); 623 NavigationEntry* entry2 = controller().GetLastCommittedEntry();
650 SiteInstance* instance2 = contents()->GetSiteInstance(); 624 SiteInstance* instance2 = contents()->GetSiteInstance();
651 625
652 EXPECT_FALSE(contents()->cross_navigation_pending()); 626 EXPECT_FALSE(contents()->cross_navigation_pending());
653 EXPECT_EQ(google_rvh, contents()->render_view_host()); 627 EXPECT_EQ(google_rvh, contents()->render_view_host());
654 EXPECT_NE(instance1, instance2); 628 EXPECT_NE(instance1, instance2);
655 EXPECT_FALSE(contents()->pending_rvh()); 629 EXPECT_FALSE(contents()->pending_rvh());
656 EXPECT_EQ(url2, entry2->url()); 630 EXPECT_EQ(url2, entry2->url());
657 EXPECT_EQ(instance2, entry2->site_instance()); 631 EXPECT_EQ(instance2, entry2->site_instance());
658 EXPECT_FALSE(google_rvh->enabled_bindings() & 632 EXPECT_FALSE(google_rvh->enabled_bindings() &
659 content::BINDINGS_POLICY_WEB_UI); 633 content::BINDINGS_POLICY_WEB_UI);
660 634
661 // Navigate to third page on same site. 635 // Navigate to third page on same site.
662 const GURL url3("http://news.google.com"); 636 const GURL url3("http://news.google.com");
663 controller().LoadURL( 637 controller().LoadURL(
664 url3, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 638 url3, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
665 EXPECT_FALSE(contents()->cross_navigation_pending()); 639 EXPECT_FALSE(contents()->cross_navigation_pending());
666 ViewHostMsg_FrameNavigate_Params params3; 640 contents()->TestDidNavigate(
667 InitNavigateParams(&params3, 2, url3, content::PAGE_TRANSITION_TYPED); 641 google_rvh, 2, url3, content::PAGE_TRANSITION_TYPED);
668 contents()->TestDidNavigate(google_rvh, params3);
669 NavigationEntry* entry3 = controller().GetLastCommittedEntry(); 642 NavigationEntry* entry3 = controller().GetLastCommittedEntry();
670 SiteInstance* instance3 = contents()->GetSiteInstance(); 643 SiteInstance* instance3 = contents()->GetSiteInstance();
671 644
672 EXPECT_FALSE(contents()->cross_navigation_pending()); 645 EXPECT_FALSE(contents()->cross_navigation_pending());
673 EXPECT_EQ(google_rvh, contents()->render_view_host()); 646 EXPECT_EQ(google_rvh, contents()->render_view_host());
674 EXPECT_EQ(instance2, instance3); 647 EXPECT_EQ(instance2, instance3);
675 EXPECT_FALSE(contents()->pending_rvh()); 648 EXPECT_FALSE(contents()->pending_rvh());
676 EXPECT_EQ(url3, entry3->url()); 649 EXPECT_EQ(url3, entry3->url());
677 EXPECT_EQ(instance3, entry3->site_instance()); 650 EXPECT_EQ(instance3, entry3->site_instance());
678 651
679 // Go back within the site. 652 // Go back within the site.
680 controller().GoBack(); 653 controller().GoBack();
681 EXPECT_FALSE(contents()->cross_navigation_pending()); 654 EXPECT_FALSE(contents()->cross_navigation_pending());
682 EXPECT_EQ(entry2, controller().pending_entry()); 655 EXPECT_EQ(entry2, controller().pending_entry());
683 656
684 // Before that commits, go back again. 657 // Before that commits, go back again.
685 controller().GoBack(); 658 controller().GoBack();
686 EXPECT_TRUE(contents()->cross_navigation_pending()); 659 EXPECT_TRUE(contents()->cross_navigation_pending());
687 EXPECT_TRUE(contents()->pending_rvh()); 660 EXPECT_TRUE(contents()->pending_rvh());
688 EXPECT_EQ(entry1, controller().pending_entry()); 661 EXPECT_EQ(entry1, controller().pending_entry());
689 662
690 // Simulate beforeunload approval. 663 // Simulate beforeunload approval.
691 EXPECT_TRUE(google_rvh->is_waiting_for_beforeunload_ack()); 664 EXPECT_TRUE(google_rvh->is_waiting_for_beforeunload_ack());
692 google_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 665 google_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
693 666
694 // DidNavigate from the first back. This aborts the second back's pending RVH. 667 // DidNavigate from the first back. This aborts the second back's pending RVH.
695 contents()->TestDidNavigate(google_rvh, params2); 668 contents()->TestDidNavigate(
669 google_rvh, 1, url2, content::PAGE_TRANSITION_TYPED);
696 670
697 // We should commit this page and forget about the second back. 671 // We should commit this page and forget about the second back.
698 EXPECT_FALSE(contents()->cross_navigation_pending()); 672 EXPECT_FALSE(contents()->cross_navigation_pending());
699 EXPECT_FALSE(controller().pending_entry()); 673 EXPECT_FALSE(controller().pending_entry());
700 EXPECT_EQ(google_rvh, contents()->render_view_host()); 674 EXPECT_EQ(google_rvh, contents()->render_view_host());
701 EXPECT_EQ(url2, controller().GetLastCommittedEntry()->url()); 675 EXPECT_EQ(url2, controller().GetLastCommittedEntry()->url());
702 676
703 // We should not have corrupted the NTP entry. 677 // We should not have corrupted the NTP entry.
704 EXPECT_EQ(instance3, entry3->site_instance()); 678 EXPECT_EQ(instance3, entry3->site_instance());
705 EXPECT_EQ(instance2, entry2->site_instance()); 679 EXPECT_EQ(instance2, entry2->site_instance());
706 EXPECT_EQ(instance1, entry1->site_instance()); 680 EXPECT_EQ(instance1, entry1->site_instance());
707 EXPECT_EQ(url1, entry1->url()); 681 EXPECT_EQ(url1, entry1->url());
708 } 682 }
709 683
710 // Test that during a slow cross-site navigation, a sub-frame navigation in the 684 // Test that during a slow cross-site navigation, a sub-frame navigation in the
711 // original renderer will not cancel the slow navigation (bug 42029). 685 // original renderer will not cancel the slow navigation (bug 42029).
712 TEST_F(TabContentsTest, CrossSiteNavigationNotPreemptedByFrame) { 686 TEST_F(TabContentsTest, CrossSiteNavigationNotPreemptedByFrame) {
713 contents()->transition_cross_site = true; 687 contents()->transition_cross_site = true;
714 TestRenderViewHost* orig_rvh = rvh(); 688 TestRenderViewHost* orig_rvh = rvh();
715 689
716 // Navigate to URL. First URL should use first RenderViewHost. 690 // Navigate to URL. First URL should use first RenderViewHost.
717 const GURL url("http://www.google.com"); 691 const GURL url("http://www.google.com");
718 controller().LoadURL( 692 controller().LoadURL(
719 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 693 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
720 ViewHostMsg_FrameNavigate_Params params1; 694 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
721 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
722 contents()->TestDidNavigate(orig_rvh, params1);
723 EXPECT_FALSE(contents()->cross_navigation_pending()); 695 EXPECT_FALSE(contents()->cross_navigation_pending());
724 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 696 EXPECT_EQ(orig_rvh, contents()->render_view_host());
725 697
726 // Start navigating to new site. 698 // Start navigating to new site.
727 const GURL url2("http://www.yahoo.com"); 699 const GURL url2("http://www.yahoo.com");
728 controller().LoadURL( 700 controller().LoadURL(
729 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 701 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
730 702
731 // Simulate a sub-frame navigation arriving and ensure the RVH is still 703 // Simulate a sub-frame navigation arriving and ensure the RVH is still
732 // waiting for a before unload response. 704 // waiting for a before unload response.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 737
766 // Suppose the first navigation tries to commit now, with a 738 // Suppose the first navigation tries to commit now, with a
767 // ViewMsg_Stop in flight. This should not cancel the pending navigation, 739 // ViewMsg_Stop in flight. This should not cancel the pending navigation,
768 // but it should act as if the beforeunload ack arrived. 740 // but it should act as if the beforeunload ack arrived.
769 orig_rvh->SendNavigate(1, GURL("chrome://newtab")); 741 orig_rvh->SendNavigate(1, GURL("chrome://newtab"));
770 EXPECT_TRUE(contents()->cross_navigation_pending()); 742 EXPECT_TRUE(contents()->cross_navigation_pending());
771 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 743 EXPECT_EQ(orig_rvh, contents()->render_view_host());
772 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack()); 744 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack());
773 745
774 // The pending navigation should be able to commit successfully. 746 // The pending navigation should be able to commit successfully.
775 ViewHostMsg_FrameNavigate_Params params2; 747 contents()->TestDidNavigate(
776 InitNavigateParams(&params2, 1, url2, content::PAGE_TRANSITION_TYPED); 748 pending_rvh, 1, url2, content::PAGE_TRANSITION_TYPED);
777 contents()->TestDidNavigate(pending_rvh, params2);
778 EXPECT_FALSE(contents()->cross_navigation_pending()); 749 EXPECT_FALSE(contents()->cross_navigation_pending());
779 EXPECT_EQ(pending_rvh, contents()->render_view_host()); 750 EXPECT_EQ(pending_rvh, contents()->render_view_host());
780 } 751 }
781 752
782 // Test that the original renderer cannot preempt a cross-site navigation once 753 // Test that the original renderer cannot preempt a cross-site navigation once
783 // the unload request has been made. At this point, the cross-site navigation 754 // the unload request has been made. At this point, the cross-site navigation
784 // is almost ready to be displayed, and the original renderer is only given a 755 // is almost ready to be displayed, and the original renderer is only given a
785 // short chance to run an unload handler. Prevents regression of bug 23942. 756 // short chance to run an unload handler. Prevents regression of bug 23942.
786 TEST_F(TabContentsTest, CrossSiteCantPreemptAfterUnload) { 757 TEST_F(TabContentsTest, CrossSiteCantPreemptAfterUnload) {
787 contents()->transition_cross_site = true; 758 contents()->transition_cross_site = true;
788 TestRenderViewHost* orig_rvh = rvh(); 759 TestRenderViewHost* orig_rvh = rvh();
789 SiteInstance* instance1 = contents()->GetSiteInstance(); 760 SiteInstance* instance1 = contents()->GetSiteInstance();
790 761
791 // Navigate to URL. First URL should use first RenderViewHost. 762 // Navigate to URL. First URL should use first RenderViewHost.
792 const GURL url("http://www.google.com"); 763 const GURL url("http://www.google.com");
793 controller().LoadURL( 764 controller().LoadURL(
794 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 765 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
795 ViewHostMsg_FrameNavigate_Params params1; 766 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
796 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
797 contents()->TestDidNavigate(orig_rvh, params1);
798 EXPECT_FALSE(contents()->cross_navigation_pending()); 767 EXPECT_FALSE(contents()->cross_navigation_pending());
799 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 768 EXPECT_EQ(orig_rvh, contents()->render_view_host());
800 769
801 // Navigate to new site, simulating an onbeforeunload approval. 770 // Navigate to new site, simulating an onbeforeunload approval.
802 const GURL url2("http://www.yahoo.com"); 771 const GURL url2("http://www.yahoo.com");
803 controller().LoadURL( 772 controller().LoadURL(
804 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 773 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
805 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 774 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
806 EXPECT_TRUE(contents()->cross_navigation_pending()); 775 EXPECT_TRUE(contents()->cross_navigation_pending());
807 TestRenderViewHost* pending_rvh = static_cast<TestRenderViewHost*>( 776 TestRenderViewHost* pending_rvh = static_cast<TestRenderViewHost*>(
(...skipping 10 matching lines...) Expand all
818 ViewHostMsg_FrameNavigate_Params params1a; 787 ViewHostMsg_FrameNavigate_Params params1a;
819 InitNavigateParams(&params1a, 2, GURL("http://www.google.com/foo"), 788 InitNavigateParams(&params1a, 2, GURL("http://www.google.com/foo"),
820 content::PAGE_TRANSITION_TYPED); 789 content::PAGE_TRANSITION_TYPED);
821 orig_rvh->SendNavigate(2, GURL("http://www.google.com/foo")); 790 orig_rvh->SendNavigate(2, GURL("http://www.google.com/foo"));
822 791
823 // Verify that the pending navigation is still in progress. 792 // Verify that the pending navigation is still in progress.
824 EXPECT_TRUE(contents()->cross_navigation_pending()); 793 EXPECT_TRUE(contents()->cross_navigation_pending());
825 EXPECT_TRUE(contents()->pending_rvh() != NULL); 794 EXPECT_TRUE(contents()->pending_rvh() != NULL);
826 795
827 // DidNavigate from the pending page should commit it. 796 // DidNavigate from the pending page should commit it.
828 ViewHostMsg_FrameNavigate_Params params2; 797 contents()->TestDidNavigate(
829 InitNavigateParams(&params2, 1, url2, content::PAGE_TRANSITION_TYPED); 798 pending_rvh, 1, url2, content::PAGE_TRANSITION_TYPED);
830 contents()->TestDidNavigate(pending_rvh, params2);
831 SiteInstance* instance2 = contents()->GetSiteInstance(); 799 SiteInstance* instance2 = contents()->GetSiteInstance();
832 EXPECT_FALSE(contents()->cross_navigation_pending()); 800 EXPECT_FALSE(contents()->cross_navigation_pending());
833 EXPECT_EQ(pending_rvh, rvh()); 801 EXPECT_EQ(pending_rvh, rvh());
834 EXPECT_NE(instance1, instance2); 802 EXPECT_NE(instance1, instance2);
835 EXPECT_TRUE(contents()->pending_rvh() == NULL); 803 EXPECT_TRUE(contents()->pending_rvh() == NULL);
836 } 804 }
837 805
838 // Test that a cross-site navigation that doesn't commit after the unload 806 // Test that a cross-site navigation that doesn't commit after the unload
839 // handler doesn't leave the tab in a stuck state. http://crbug.com/88562. 807 // handler doesn't leave the tab in a stuck state. http://crbug.com/88562.
840 TEST_F(TabContentsTest, CrossSiteNavigationCanceled) { 808 TEST_F(TabContentsTest, CrossSiteNavigationCanceled) {
841 contents()->transition_cross_site = true; 809 contents()->transition_cross_site = true;
842 TestRenderViewHost* orig_rvh = rvh(); 810 TestRenderViewHost* orig_rvh = rvh();
843 SiteInstance* instance1 = contents()->GetSiteInstance(); 811 SiteInstance* instance1 = contents()->GetSiteInstance();
844 812
845 // Navigate to URL. First URL should use first RenderViewHost. 813 // Navigate to URL. First URL should use first RenderViewHost.
846 const GURL url("http://www.google.com"); 814 const GURL url("http://www.google.com");
847 controller().LoadURL( 815 controller().LoadURL(
848 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 816 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
849 ViewHostMsg_FrameNavigate_Params params1; 817 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
850 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
851 contents()->TestDidNavigate(orig_rvh, params1);
852 EXPECT_FALSE(contents()->cross_navigation_pending()); 818 EXPECT_FALSE(contents()->cross_navigation_pending());
853 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 819 EXPECT_EQ(orig_rvh, contents()->render_view_host());
854 820
855 // Navigate to new site, simulating an onbeforeunload approval. 821 // Navigate to new site, simulating an onbeforeunload approval.
856 const GURL url2("http://www.yahoo.com"); 822 const GURL url2("http://www.yahoo.com");
857 controller().LoadURL( 823 controller().LoadURL(
858 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 824 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
859 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack()); 825 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack());
860 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 826 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
861 EXPECT_TRUE(contents()->cross_navigation_pending()); 827 EXPECT_TRUE(contents()->cross_navigation_pending());
(...skipping 23 matching lines...) Expand all
885 TestRenderViewHost* orig_rvh = rvh(); 851 TestRenderViewHost* orig_rvh = rvh();
886 852
887 // Navigate to URL. There should be no committed entry yet. 853 // Navigate to URL. There should be no committed entry yet.
888 const GURL url("http://www.google.com"); 854 const GURL url("http://www.google.com");
889 controller().LoadURL( 855 controller().LoadURL(
890 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 856 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
891 NavigationEntry* entry = controller().GetLastCommittedEntry(); 857 NavigationEntry* entry = controller().GetLastCommittedEntry();
892 EXPECT_TRUE(entry == NULL); 858 EXPECT_TRUE(entry == NULL);
893 859
894 // Committed entry should have content state after DidNavigate. 860 // Committed entry should have content state after DidNavigate.
895 ViewHostMsg_FrameNavigate_Params params1; 861 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
896 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
897 contents()->TestDidNavigate(orig_rvh, params1);
898 entry = controller().GetLastCommittedEntry(); 862 entry = controller().GetLastCommittedEntry();
899 EXPECT_FALSE(entry->content_state().empty()); 863 EXPECT_FALSE(entry->content_state().empty());
900 864
901 // Navigate to same site. 865 // Navigate to same site.
902 const GURL url2("http://images.google.com"); 866 const GURL url2("http://images.google.com");
903 controller().LoadURL( 867 controller().LoadURL(
904 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 868 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
905 entry = controller().GetLastCommittedEntry(); 869 entry = controller().GetLastCommittedEntry();
906 EXPECT_FALSE(entry->content_state().empty()); 870 EXPECT_FALSE(entry->content_state().empty());
907 871
908 // Committed entry should have content state after DidNavigate. 872 // Committed entry should have content state after DidNavigate.
909 ViewHostMsg_FrameNavigate_Params params2; 873 contents()->TestDidNavigate(
910 InitNavigateParams(&params2, 2, url2, content::PAGE_TRANSITION_TYPED); 874 orig_rvh, 2, url2, content::PAGE_TRANSITION_TYPED);
911 contents()->TestDidNavigate(orig_rvh, params2);
912 entry = controller().GetLastCommittedEntry(); 875 entry = controller().GetLastCommittedEntry();
913 EXPECT_FALSE(entry->content_state().empty()); 876 EXPECT_FALSE(entry->content_state().empty());
914 877
915 // Now go back. Committed entry should still have content state. 878 // Now go back. Committed entry should still have content state.
916 controller().GoBack(); 879 controller().GoBack();
917 contents()->TestDidNavigate(orig_rvh, params1); 880 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
918 entry = controller().GetLastCommittedEntry(); 881 entry = controller().GetLastCommittedEntry();
919 EXPECT_FALSE(entry->content_state().empty()); 882 EXPECT_FALSE(entry->content_state().empty());
920 } 883 }
921 884
922 // Test that NavigationEntries have the correct content state after opening 885 // Test that NavigationEntries have the correct content state after opening
923 // a new window to about:blank. Prevents regression for bug 1116137. 886 // a new window to about:blank. Prevents regression for bug 1116137.
924 TEST_F(TabContentsTest, NavigationEntryContentStateNewWindow) { 887 TEST_F(TabContentsTest, NavigationEntryContentStateNewWindow) {
925 TestRenderViewHost* orig_rvh = rvh(); 888 TestRenderViewHost* orig_rvh = rvh();
926 889
927 // When opening a new window, it is navigated to about:blank internally. 890 // When opening a new window, it is navigated to about:blank internally.
928 // Currently, this results in two DidNavigate events. 891 // Currently, this results in two DidNavigate events.
929 const GURL url(chrome::kAboutBlankURL); 892 const GURL url(chrome::kAboutBlankURL);
930 ViewHostMsg_FrameNavigate_Params params1; 893 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
931 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 894 contents()->TestDidNavigate(orig_rvh, 1, url, content::PAGE_TRANSITION_TYPED);
932 contents()->TestDidNavigate(orig_rvh, params1);
933 contents()->TestDidNavigate(orig_rvh, params1);
934 895
935 // Should have a content state here. 896 // Should have a content state here.
936 NavigationEntry* entry = controller().GetLastCommittedEntry(); 897 NavigationEntry* entry = controller().GetLastCommittedEntry();
937 EXPECT_FALSE(entry->content_state().empty()); 898 EXPECT_FALSE(entry->content_state().empty());
938 } 899 }
939 900
940 // Tests to see that webkit preferences are properly loaded and copied over 901 // Tests to see that webkit preferences are properly loaded and copied over
941 // to a WebPreferences object. 902 // to a WebPreferences object.
942 TEST_F(TabContentsTest, WebKitPrefs) { 903 TEST_F(TabContentsTest, WebKitPrefs) {
943 WebPreferences webkit_prefs = contents()->TestGetWebkitPrefs(); 904 WebPreferences webkit_prefs = contents()->TestGetWebkitPrefs();
(...skipping 743 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 // Tests that Javascript messages are not shown while an interstitial is 1648 // Tests that Javascript messages are not shown while an interstitial is
1688 // showing. 1649 // showing.
1689 TEST_F(TabContentsTest, NoJSMessageOnInterstitials) { 1650 TEST_F(TabContentsTest, NoJSMessageOnInterstitials) {
1690 const char kUrl[] = "http://www.badguys.com/"; 1651 const char kUrl[] = "http://www.badguys.com/";
1691 const GURL kGURL(kUrl); 1652 const GURL kGURL(kUrl);
1692 1653
1693 // Start a navigation to a page 1654 // Start a navigation to a page
1694 contents()->controller().LoadURL( 1655 contents()->controller().LoadURL(
1695 kGURL, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 1656 kGURL, GURL(), content::PAGE_TRANSITION_TYPED, std::string());
1696 // DidNavigate from the page 1657 // DidNavigate from the page
1697 ViewHostMsg_FrameNavigate_Params params; 1658 contents()->TestDidNavigate(rvh(), 1, kGURL, content::PAGE_TRANSITION_TYPED);
1698 InitNavigateParams(&params, 1, kGURL, content::PAGE_TRANSITION_TYPED);
1699 contents()->TestDidNavigate(rvh(), params);
1700 1659
1701 // Simulate showing an interstitial while the page is showing. 1660 // Simulate showing an interstitial while the page is showing.
1702 TestInterstitialPage::InterstitialState state = 1661 TestInterstitialPage::InterstitialState state =
1703 TestInterstitialPage::UNDECIDED; 1662 TestInterstitialPage::UNDECIDED;
1704 bool deleted = false; 1663 bool deleted = false;
1705 TestInterstitialPage* interstitial = 1664 TestInterstitialPage* interstitial =
1706 new TestInterstitialPage(contents(), true, kGURL, &state, &deleted); 1665 new TestInterstitialPage(contents(), true, kGURL, &state, &deleted);
1707 TestInterstitialPageStateGuard state_guard(interstitial); 1666 TestInterstitialPageStateGuard state_guard(interstitial);
1708 interstitial->Show(); 1667 interstitial->Show();
1709 interstitial->TestDidNavigate(1, kGURL); 1668 interstitial->TestDidNavigate(1, kGURL);
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1805 1764
1806 // It should have a transient entry. 1765 // It should have a transient entry.
1807 EXPECT_TRUE(other_controller.GetTransientEntry()); 1766 EXPECT_TRUE(other_controller.GetTransientEntry());
1808 1767
1809 // And the interstitial should be showing. 1768 // And the interstitial should be showing.
1810 EXPECT_TRUE(other_contents->showing_interstitial_page()); 1769 EXPECT_TRUE(other_contents->showing_interstitial_page());
1811 1770
1812 // And the interstitial should do a reload on don't proceed. 1771 // And the interstitial should do a reload on don't proceed.
1813 EXPECT_TRUE(other_contents->interstitial_page()->reload_on_dont_proceed()); 1772 EXPECT_TRUE(other_contents->interstitial_page()->reload_on_dont_proceed());
1814 } 1773 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698