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

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

Issue 8785004: Change NavigationController::LoadURL to take a Referrer class instead of a GURL as referrer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updates 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 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 } 218 }
219 219
220 // Test view source mode for the new tabs page. 220 // Test view source mode for the new tabs page.
221 TEST_F(TabContentsTest, NTPViewSource) { 221 TEST_F(TabContentsTest, NTPViewSource) {
222 const char kUrl[] = "view-source:chrome://newtab"; 222 const char kUrl[] = "view-source:chrome://newtab";
223 const GURL kGURL(kUrl); 223 const GURL kGURL(kUrl);
224 224
225 process()->sink().ClearMessages(); 225 process()->sink().ClearMessages();
226 226
227 controller().LoadURL( 227 controller().LoadURL(
228 kGURL, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 228 kGURL, content::Referrer(), content::PAGE_TRANSITION_TYPED,
229 std::string());
229 rvh()->delegate()->RenderViewCreated(rvh()); 230 rvh()->delegate()->RenderViewCreated(rvh());
230 // Did we get the expected message? 231 // Did we get the expected message?
231 EXPECT_TRUE(process()->sink().GetFirstMessageMatching( 232 EXPECT_TRUE(process()->sink().GetFirstMessageMatching(
232 ViewMsg_EnableViewSourceMode::ID)); 233 ViewMsg_EnableViewSourceMode::ID));
233 234
234 ViewHostMsg_FrameNavigate_Params params; 235 ViewHostMsg_FrameNavigate_Params params;
235 InitNavigateParams(&params, 0, kGURL, content::PAGE_TRANSITION_TYPED); 236 InitNavigateParams(&params, 0, kGURL, content::PAGE_TRANSITION_TYPED);
236 content::LoadCommittedDetails details; 237 content::LoadCommittedDetails details;
237 controller().RendererDidNavigate(params, &details); 238 controller().RendererDidNavigate(params, &details);
238 // Also check title and url. 239 // Also check title and url.
239 EXPECT_EQ(ASCIIToUTF16(kUrl), contents()->GetTitle()); 240 EXPECT_EQ(ASCIIToUTF16(kUrl), contents()->GetTitle());
240 } 241 }
241 242
242 // Test simple same-SiteInstance navigation. 243 // Test simple same-SiteInstance navigation.
243 TEST_F(TabContentsTest, SimpleNavigation) { 244 TEST_F(TabContentsTest, SimpleNavigation) {
244 TestRenderViewHost* orig_rvh = rvh(); 245 TestRenderViewHost* orig_rvh = rvh();
245 SiteInstance* instance1 = contents()->GetSiteInstance(); 246 SiteInstance* instance1 = contents()->GetSiteInstance();
246 EXPECT_TRUE(contents()->pending_rvh() == NULL); 247 EXPECT_TRUE(contents()->pending_rvh() == NULL);
247 248
248 // Navigate to URL 249 // Navigate to URL
249 const GURL url("http://www.google.com"); 250 const GURL url("http://www.google.com");
250 controller().LoadURL( 251 controller().LoadURL(
251 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 252 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
252 EXPECT_FALSE(contents()->cross_navigation_pending()); 253 EXPECT_FALSE(contents()->cross_navigation_pending());
253 EXPECT_EQ(instance1, orig_rvh->site_instance()); 254 EXPECT_EQ(instance1, orig_rvh->site_instance());
254 // Controller's pending entry will have a NULL site instance until we assign 255 // Controller's pending entry will have a NULL site instance until we assign
255 // it in DidNavigate. 256 // it in DidNavigate.
256 EXPECT_TRUE(controller().GetActiveEntry()->site_instance() == NULL); 257 EXPECT_TRUE(controller().GetActiveEntry()->site_instance() == NULL);
257 258
258 // DidNavigate from the page 259 // DidNavigate from the page
259 ViewHostMsg_FrameNavigate_Params params; 260 ViewHostMsg_FrameNavigate_Params params;
260 InitNavigateParams(&params, 1, url, content::PAGE_TRANSITION_TYPED); 261 InitNavigateParams(&params, 1, url, content::PAGE_TRANSITION_TYPED);
261 contents()->TestDidNavigate(orig_rvh, params); 262 contents()->TestDidNavigate(orig_rvh, params);
262 EXPECT_FALSE(contents()->cross_navigation_pending()); 263 EXPECT_FALSE(contents()->cross_navigation_pending());
263 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 264 EXPECT_EQ(orig_rvh, contents()->render_view_host());
264 EXPECT_EQ(instance1, orig_rvh->site_instance()); 265 EXPECT_EQ(instance1, orig_rvh->site_instance());
265 // Controller's entry should now have the SiteInstance, or else we won't be 266 // Controller's entry should now have the SiteInstance, or else we won't be
266 // able to find it later. 267 // able to find it later.
267 EXPECT_EQ(instance1, controller().GetActiveEntry()->site_instance()); 268 EXPECT_EQ(instance1, controller().GetActiveEntry()->site_instance());
268 } 269 }
269 270
270 // Test that we reject NavigateToEntry if the url is over content::kMaxURLChars. 271 // Test that we reject NavigateToEntry if the url is over content::kMaxURLChars.
271 TEST_F(TabContentsTest, NavigateToExcessivelyLongURL) { 272 TEST_F(TabContentsTest, NavigateToExcessivelyLongURL) {
272 // Construct a URL that's kMaxURLChars + 1 long of all 'a's. 273 // Construct a URL that's kMaxURLChars + 1 long of all 'a's.
273 const GURL url(std::string("http://example.org/").append( 274 const GURL url(std::string("http://example.org/").append(
274 content::kMaxURLChars + 1, 'a')); 275 content::kMaxURLChars + 1, 'a'));
275 276
276 controller().LoadURL( 277 controller().LoadURL(
277 url, GURL(), content::PAGE_TRANSITION_GENERATED, std::string()); 278 url, content::Referrer(), content::PAGE_TRANSITION_GENERATED,
279 std::string());
278 EXPECT_TRUE(controller().GetActiveEntry() == NULL); 280 EXPECT_TRUE(controller().GetActiveEntry() == NULL);
279 } 281 }
280 282
281 // Test that navigating across a site boundary creates a new RenderViewHost 283 // Test that navigating across a site boundary creates a new RenderViewHost
282 // with a new SiteInstance. Going back should do the same. 284 // with a new SiteInstance. Going back should do the same.
283 TEST_F(TabContentsTest, CrossSiteBoundaries) { 285 TEST_F(TabContentsTest, CrossSiteBoundaries) {
284 contents()->transition_cross_site = true; 286 contents()->transition_cross_site = true;
285 TestRenderViewHost* orig_rvh = rvh(); 287 TestRenderViewHost* orig_rvh = rvh();
286 int orig_rvh_delete_count = 0; 288 int orig_rvh_delete_count = 0;
287 orig_rvh->set_delete_counter(&orig_rvh_delete_count); 289 orig_rvh->set_delete_counter(&orig_rvh_delete_count);
288 SiteInstance* instance1 = contents()->GetSiteInstance(); 290 SiteInstance* instance1 = contents()->GetSiteInstance();
289 291
290 // Navigate to URL. First URL should use first RenderViewHost. 292 // Navigate to URL. First URL should use first RenderViewHost.
291 const GURL url("http://www.google.com"); 293 const GURL url("http://www.google.com");
292 controller().LoadURL( 294 controller().LoadURL(
293 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 295 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
294 ViewHostMsg_FrameNavigate_Params params1; 296 ViewHostMsg_FrameNavigate_Params params1;
295 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 297 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
296 contents()->TestDidNavigate(orig_rvh, params1); 298 contents()->TestDidNavigate(orig_rvh, params1);
297 299
298 EXPECT_FALSE(contents()->cross_navigation_pending()); 300 EXPECT_FALSE(contents()->cross_navigation_pending());
299 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 301 EXPECT_EQ(orig_rvh, contents()->render_view_host());
300 302
301 // Navigate to new site 303 // Navigate to new site
302 const GURL url2("http://www.yahoo.com"); 304 const GURL url2("http://www.yahoo.com");
303 controller().LoadURL( 305 controller().LoadURL(
304 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 306 url2, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
305 EXPECT_TRUE(contents()->cross_navigation_pending()); 307 EXPECT_TRUE(contents()->cross_navigation_pending());
306 TestRenderViewHost* pending_rvh = contents()->pending_rvh(); 308 TestRenderViewHost* pending_rvh = contents()->pending_rvh();
307 int pending_rvh_delete_count = 0; 309 int pending_rvh_delete_count = 0;
308 pending_rvh->set_delete_counter(&pending_rvh_delete_count); 310 pending_rvh->set_delete_counter(&pending_rvh_delete_count);
309 311
310 // Navigations should be suspended in pending_rvh until ShouldCloseACK. 312 // Navigations should be suspended in pending_rvh until ShouldCloseACK.
311 EXPECT_TRUE(pending_rvh->are_navigations_suspended()); 313 EXPECT_TRUE(pending_rvh->are_navigations_suspended());
312 orig_rvh->SendShouldCloseACK(true); 314 orig_rvh->SendShouldCloseACK(true);
313 EXPECT_FALSE(pending_rvh->are_navigations_suspended()); 315 EXPECT_FALSE(pending_rvh->are_navigations_suspended());
314 316
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 TEST_F(TabContentsTest, CrossSiteBoundariesAfterCrash) { 362 TEST_F(TabContentsTest, CrossSiteBoundariesAfterCrash) {
361 contents()->transition_cross_site = true; 363 contents()->transition_cross_site = true;
362 TestRenderViewHost* orig_rvh = rvh(); 364 TestRenderViewHost* orig_rvh = rvh();
363 int orig_rvh_delete_count = 0; 365 int orig_rvh_delete_count = 0;
364 orig_rvh->set_delete_counter(&orig_rvh_delete_count); 366 orig_rvh->set_delete_counter(&orig_rvh_delete_count);
365 SiteInstance* instance1 = contents()->GetSiteInstance(); 367 SiteInstance* instance1 = contents()->GetSiteInstance();
366 368
367 // Navigate to URL. First URL should use first RenderViewHost. 369 // Navigate to URL. First URL should use first RenderViewHost.
368 const GURL url("http://www.google.com"); 370 const GURL url("http://www.google.com");
369 controller().LoadURL( 371 controller().LoadURL(
370 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 372 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
371 ViewHostMsg_FrameNavigate_Params params1; 373 ViewHostMsg_FrameNavigate_Params params1;
372 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 374 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
373 contents()->TestDidNavigate(orig_rvh, params1); 375 contents()->TestDidNavigate(orig_rvh, params1);
374 376
375 EXPECT_FALSE(contents()->cross_navigation_pending()); 377 EXPECT_FALSE(contents()->cross_navigation_pending());
376 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 378 EXPECT_EQ(orig_rvh, contents()->render_view_host());
377 379
378 // Crash the renderer. 380 // Crash the renderer.
379 orig_rvh->set_render_view_created(false); 381 orig_rvh->set_render_view_created(false);
380 382
381 // Navigate to new site. We should not go into PENDING. 383 // Navigate to new site. We should not go into PENDING.
382 const GURL url2("http://www.yahoo.com"); 384 const GURL url2("http://www.yahoo.com");
383 controller().LoadURL( 385 controller().LoadURL(
384 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 386 url2, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
385 TestRenderViewHost* new_rvh = rvh(); 387 TestRenderViewHost* new_rvh = rvh();
386 EXPECT_FALSE(contents()->cross_navigation_pending()); 388 EXPECT_FALSE(contents()->cross_navigation_pending());
387 EXPECT_TRUE(contents()->pending_rvh() == NULL); 389 EXPECT_TRUE(contents()->pending_rvh() == NULL);
388 EXPECT_NE(orig_rvh, new_rvh); 390 EXPECT_NE(orig_rvh, new_rvh);
389 EXPECT_EQ(orig_rvh_delete_count, 1); 391 EXPECT_EQ(orig_rvh_delete_count, 1);
390 392
391 // DidNavigate from the new page 393 // DidNavigate from the new page
392 ViewHostMsg_FrameNavigate_Params params2; 394 ViewHostMsg_FrameNavigate_Params params2;
393 InitNavigateParams(&params2, 1, url2, content::PAGE_TRANSITION_TYPED); 395 InitNavigateParams(&params2, 1, url2, content::PAGE_TRANSITION_TYPED);
394 contents()->TestDidNavigate(new_rvh, params2); 396 contents()->TestDidNavigate(new_rvh, params2);
(...skipping 12 matching lines...) Expand all
407 // Test that opening a new tab in the same SiteInstance and then navigating 409 // 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. 410 // both tabs to a new site will place both tabs in a single SiteInstance.
409 TEST_F(TabContentsTest, NavigateTwoTabsCrossSite) { 411 TEST_F(TabContentsTest, NavigateTwoTabsCrossSite) {
410 contents()->transition_cross_site = true; 412 contents()->transition_cross_site = true;
411 TestRenderViewHost* orig_rvh = rvh(); 413 TestRenderViewHost* orig_rvh = rvh();
412 SiteInstance* instance1 = contents()->GetSiteInstance(); 414 SiteInstance* instance1 = contents()->GetSiteInstance();
413 415
414 // Navigate to URL. First URL should use first RenderViewHost. 416 // Navigate to URL. First URL should use first RenderViewHost.
415 const GURL url("http://www.google.com"); 417 const GURL url("http://www.google.com");
416 controller().LoadURL( 418 controller().LoadURL(
417 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 419 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
418 ViewHostMsg_FrameNavigate_Params params1; 420 ViewHostMsg_FrameNavigate_Params params1;
419 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 421 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
420 contents()->TestDidNavigate(orig_rvh, params1); 422 contents()->TestDidNavigate(orig_rvh, params1);
421 423
422 // Open a new tab with the same SiteInstance, navigated to the same site. 424 // Open a new tab with the same SiteInstance, navigated to the same site.
423 TestTabContents contents2(profile(), instance1); 425 TestTabContents contents2(profile(), instance1);
424 params1.page_id = 2; // Need this since the site instance is the same (which 426 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 427 // is the scope of page IDs) and we want to consider
426 // this a new page. 428 // this a new page.
427 contents2.transition_cross_site = true; 429 contents2.transition_cross_site = true;
428 contents2.controller().LoadURL(url, GURL(), content::PAGE_TRANSITION_TYPED, 430 contents2.controller().LoadURL(url, content::Referrer(),
431 content::PAGE_TRANSITION_TYPED,
429 std::string()); 432 std::string());
430 contents2.TestDidNavigate(contents2.render_view_host(), params1); 433 contents2.TestDidNavigate(contents2.render_view_host(), params1);
431 434
432 // Navigate first tab to a new site 435 // Navigate first tab to a new site
433 const GURL url2a("http://www.yahoo.com"); 436 const GURL url2a("http://www.yahoo.com");
434 controller().LoadURL( 437 controller().LoadURL(
435 url2a, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 438 url2a, content::Referrer(), content::PAGE_TRANSITION_TYPED,
439 std::string());
436 orig_rvh->SendShouldCloseACK(true); 440 orig_rvh->SendShouldCloseACK(true);
437 TestRenderViewHost* pending_rvh_a = contents()->pending_rvh(); 441 TestRenderViewHost* pending_rvh_a = contents()->pending_rvh();
438 ViewHostMsg_FrameNavigate_Params params2a; 442 ViewHostMsg_FrameNavigate_Params params2a;
439 InitNavigateParams(&params2a, 1, url2a, content::PAGE_TRANSITION_TYPED); 443 InitNavigateParams(&params2a, 1, url2a, content::PAGE_TRANSITION_TYPED);
440 contents()->TestDidNavigate(pending_rvh_a, params2a); 444 contents()->TestDidNavigate(pending_rvh_a, params2a);
441 SiteInstance* instance2a = contents()->GetSiteInstance(); 445 SiteInstance* instance2a = contents()->GetSiteInstance();
442 EXPECT_NE(instance1, instance2a); 446 EXPECT_NE(instance1, instance2a);
443 447
444 // Navigate second tab to the same site as the first tab 448 // Navigate second tab to the same site as the first tab
445 const GURL url2b("http://mail.yahoo.com"); 449 const GURL url2b("http://mail.yahoo.com");
446 contents2.controller().LoadURL(url2b, GURL(), content::PAGE_TRANSITION_TYPED, 450 contents2.controller().LoadURL(url2b, content::Referrer(),
451 content::PAGE_TRANSITION_TYPED,
447 std::string()); 452 std::string());
448 TestRenderViewHost* rvh2 = 453 TestRenderViewHost* rvh2 =
449 static_cast<TestRenderViewHost*>(contents2.render_view_host()); 454 static_cast<TestRenderViewHost*>(contents2.render_view_host());
450 rvh2->SendShouldCloseACK(true); 455 rvh2->SendShouldCloseACK(true);
451 TestRenderViewHost* pending_rvh_b = contents2.pending_rvh(); 456 TestRenderViewHost* pending_rvh_b = contents2.pending_rvh();
452 EXPECT_TRUE(pending_rvh_b != NULL); 457 EXPECT_TRUE(pending_rvh_b != NULL);
453 EXPECT_TRUE(contents2.cross_navigation_pending()); 458 EXPECT_TRUE(contents2.cross_navigation_pending());
454 459
455 // NOTE(creis): We used to be in danger of showing a sad tab page here if the 460 // 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 461 // second tab hadn't navigated somewhere first (bug 1145430). That case is
(...skipping 12 matching lines...) Expand all
469 // Tests that TabContents uses the current URL, not the SiteInstance's site, to 474 // Tests that TabContents uses the current URL, not the SiteInstance's site, to
470 // determine whether a navigation is cross-site. 475 // determine whether a navigation is cross-site.
471 TEST_F(TabContentsTest, CrossSiteComparesAgainstCurrentPage) { 476 TEST_F(TabContentsTest, CrossSiteComparesAgainstCurrentPage) {
472 contents()->transition_cross_site = true; 477 contents()->transition_cross_site = true;
473 TestRenderViewHost* orig_rvh = rvh(); 478 TestRenderViewHost* orig_rvh = rvh();
474 SiteInstance* instance1 = contents()->GetSiteInstance(); 479 SiteInstance* instance1 = contents()->GetSiteInstance();
475 480
476 // Navigate to URL. 481 // Navigate to URL.
477 const GURL url("http://www.google.com"); 482 const GURL url("http://www.google.com");
478 controller().LoadURL( 483 controller().LoadURL(
479 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 484 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
480 ViewHostMsg_FrameNavigate_Params params1; 485 ViewHostMsg_FrameNavigate_Params params1;
481 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 486 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
482 contents()->TestDidNavigate(orig_rvh, params1); 487 contents()->TestDidNavigate(orig_rvh, params1);
483 488
484 // Open a related tab to a second site. 489 // Open a related tab to a second site.
485 TestTabContents contents2(profile(), instance1); 490 TestTabContents contents2(profile(), instance1);
486 contents2.transition_cross_site = true; 491 contents2.transition_cross_site = true;
487 const GURL url2("http://www.yahoo.com"); 492 const GURL url2("http://www.yahoo.com");
488 contents2.controller().LoadURL(url2, GURL(), content::PAGE_TRANSITION_TYPED, 493 contents2.controller().LoadURL(url2, content::Referrer(),
494 content::PAGE_TRANSITION_TYPED,
489 std::string()); 495 std::string());
490 // The first RVH in contents2 isn't live yet, so we shortcut the cross site 496 // The first RVH in contents2 isn't live yet, so we shortcut the cross site
491 // pending. 497 // pending.
492 TestRenderViewHost* rvh2 = static_cast<TestRenderViewHost*>( 498 TestRenderViewHost* rvh2 = static_cast<TestRenderViewHost*>(
493 contents2.render_view_host()); 499 contents2.render_view_host());
494 EXPECT_FALSE(contents2.cross_navigation_pending()); 500 EXPECT_FALSE(contents2.cross_navigation_pending());
495 ViewHostMsg_FrameNavigate_Params params2; 501 ViewHostMsg_FrameNavigate_Params params2;
496 InitNavigateParams(&params2, 2, url2, content::PAGE_TRANSITION_TYPED); 502 InitNavigateParams(&params2, 2, url2, content::PAGE_TRANSITION_TYPED);
497 contents2.TestDidNavigate(rvh2, params2); 503 contents2.TestDidNavigate(rvh2, params2);
498 SiteInstance* instance2 = contents2.GetSiteInstance(); 504 SiteInstance* instance2 = contents2.GetSiteInstance();
499 EXPECT_NE(instance1, instance2); 505 EXPECT_NE(instance1, instance2);
500 EXPECT_FALSE(contents2.cross_navigation_pending()); 506 EXPECT_FALSE(contents2.cross_navigation_pending());
501 507
502 // Simulate a link click in first tab to second site. Doesn't switch 508 // Simulate a link click in first tab to second site. Doesn't switch
503 // SiteInstances, because we don't intercept WebKit navigations. 509 // SiteInstances, because we don't intercept WebKit navigations.
504 ViewHostMsg_FrameNavigate_Params params3; 510 ViewHostMsg_FrameNavigate_Params params3;
505 InitNavigateParams(&params3, 2, url2, content::PAGE_TRANSITION_TYPED); 511 InitNavigateParams(&params3, 2, url2, content::PAGE_TRANSITION_TYPED);
506 contents()->TestDidNavigate(orig_rvh, params3); 512 contents()->TestDidNavigate(orig_rvh, params3);
507 SiteInstance* instance3 = contents()->GetSiteInstance(); 513 SiteInstance* instance3 = contents()->GetSiteInstance();
508 EXPECT_EQ(instance1, instance3); 514 EXPECT_EQ(instance1, instance3);
509 EXPECT_FALSE(contents()->cross_navigation_pending()); 515 EXPECT_FALSE(contents()->cross_navigation_pending());
510 516
511 // Navigate to the new site. Doesn't switch SiteInstancees, because we 517 // Navigate to the new site. Doesn't switch SiteInstancees, because we
512 // compare against the current URL, not the SiteInstance's site. 518 // compare against the current URL, not the SiteInstance's site.
513 const GURL url3("http://mail.yahoo.com"); 519 const GURL url3("http://mail.yahoo.com");
514 controller().LoadURL( 520 controller().LoadURL(
515 url3, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 521 url3, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
516 EXPECT_FALSE(contents()->cross_navigation_pending()); 522 EXPECT_FALSE(contents()->cross_navigation_pending());
517 ViewHostMsg_FrameNavigate_Params params4; 523 ViewHostMsg_FrameNavigate_Params params4;
518 InitNavigateParams(&params4, 3, url3, content::PAGE_TRANSITION_TYPED); 524 InitNavigateParams(&params4, 3, url3, content::PAGE_TRANSITION_TYPED);
519 contents()->TestDidNavigate(orig_rvh, params4); 525 contents()->TestDidNavigate(orig_rvh, params4);
520 SiteInstance* instance4 = contents()->GetSiteInstance(); 526 SiteInstance* instance4 = contents()->GetSiteInstance();
521 EXPECT_EQ(instance1, instance4); 527 EXPECT_EQ(instance1, instance4);
522 } 528 }
523 529
524 // Test that the onbeforeunload and onunload handlers run when navigating 530 // Test that the onbeforeunload and onunload handlers run when navigating
525 // across site boundaries. 531 // across site boundaries.
526 TEST_F(TabContentsTest, CrossSiteUnloadHandlers) { 532 TEST_F(TabContentsTest, CrossSiteUnloadHandlers) {
527 contents()->transition_cross_site = true; 533 contents()->transition_cross_site = true;
528 TestRenderViewHost* orig_rvh = rvh(); 534 TestRenderViewHost* orig_rvh = rvh();
529 SiteInstance* instance1 = contents()->GetSiteInstance(); 535 SiteInstance* instance1 = contents()->GetSiteInstance();
530 536
531 // Navigate to URL. First URL should use first RenderViewHost. 537 // Navigate to URL. First URL should use first RenderViewHost.
532 const GURL url("http://www.google.com"); 538 const GURL url("http://www.google.com");
533 controller().LoadURL( 539 controller().LoadURL(
534 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 540 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
535 ViewHostMsg_FrameNavigate_Params params1; 541 ViewHostMsg_FrameNavigate_Params params1;
536 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 542 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
537 contents()->TestDidNavigate(orig_rvh, params1); 543 contents()->TestDidNavigate(orig_rvh, params1);
538 EXPECT_FALSE(contents()->cross_navigation_pending()); 544 EXPECT_FALSE(contents()->cross_navigation_pending());
539 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 545 EXPECT_EQ(orig_rvh, contents()->render_view_host());
540 546
541 // Navigate to new site, but simulate an onbeforeunload denial. 547 // Navigate to new site, but simulate an onbeforeunload denial.
542 const GURL url2("http://www.yahoo.com"); 548 const GURL url2("http://www.yahoo.com");
543 controller().LoadURL( 549 controller().LoadURL(
544 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 550 url2, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
545 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack()); 551 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack());
546 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, false)); 552 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, false));
547 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack()); 553 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack());
548 EXPECT_FALSE(contents()->cross_navigation_pending()); 554 EXPECT_FALSE(contents()->cross_navigation_pending());
549 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 555 EXPECT_EQ(orig_rvh, contents()->render_view_host());
550 556
551 // Navigate again, but simulate an onbeforeunload approval. 557 // Navigate again, but simulate an onbeforeunload approval.
552 controller().LoadURL( 558 controller().LoadURL(
553 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 559 url2, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
554 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack()); 560 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack());
555 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 561 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
556 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack()); 562 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack());
557 EXPECT_TRUE(contents()->cross_navigation_pending()); 563 EXPECT_TRUE(contents()->cross_navigation_pending());
558 TestRenderViewHost* pending_rvh = static_cast<TestRenderViewHost*>( 564 TestRenderViewHost* pending_rvh = static_cast<TestRenderViewHost*>(
559 contents()->pending_rvh()); 565 contents()->pending_rvh());
560 566
561 // We won't hear DidNavigate until the onunload handler has finished running. 567 // 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 568 // (No way to simulate that here, but it involves a call from RDH to
563 // TabContents::OnCrossSiteResponse.) 569 // TabContents::OnCrossSiteResponse.)
(...skipping 13 matching lines...) Expand all
577 // navigate to a different URL and have it displayed, canceling the slow 583 // navigate to a different URL and have it displayed, canceling the slow
578 // navigation. 584 // navigation.
579 TEST_F(TabContentsTest, CrossSiteNavigationPreempted) { 585 TEST_F(TabContentsTest, CrossSiteNavigationPreempted) {
580 contents()->transition_cross_site = true; 586 contents()->transition_cross_site = true;
581 TestRenderViewHost* orig_rvh = rvh(); 587 TestRenderViewHost* orig_rvh = rvh();
582 SiteInstance* instance1 = contents()->GetSiteInstance(); 588 SiteInstance* instance1 = contents()->GetSiteInstance();
583 589
584 // Navigate to URL. First URL should use first RenderViewHost. 590 // Navigate to URL. First URL should use first RenderViewHost.
585 const GURL url("http://www.google.com"); 591 const GURL url("http://www.google.com");
586 controller().LoadURL( 592 controller().LoadURL(
587 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 593 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
588 ViewHostMsg_FrameNavigate_Params params1; 594 ViewHostMsg_FrameNavigate_Params params1;
589 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 595 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
590 contents()->TestDidNavigate(orig_rvh, params1); 596 contents()->TestDidNavigate(orig_rvh, params1);
591 EXPECT_FALSE(contents()->cross_navigation_pending()); 597 EXPECT_FALSE(contents()->cross_navigation_pending());
592 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 598 EXPECT_EQ(orig_rvh, contents()->render_view_host());
593 599
594 // Navigate to new site, simulating an onbeforeunload approval. 600 // Navigate to new site, simulating an onbeforeunload approval.
595 const GURL url2("http://www.yahoo.com"); 601 const GURL url2("http://www.yahoo.com");
596 controller().LoadURL( 602 controller().LoadURL(
597 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 603 url2, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
598 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack()); 604 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack());
599 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 605 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
600 EXPECT_TRUE(contents()->cross_navigation_pending()); 606 EXPECT_TRUE(contents()->cross_navigation_pending());
601 607
602 // Suppose the original renderer navigates before the new one is ready. 608 // Suppose the original renderer navigates before the new one is ready.
603 orig_rvh->SendNavigate(2, GURL("http://www.google.com/foo")); 609 orig_rvh->SendNavigate(2, GURL("http://www.google.com/foo"));
604 610
605 // Verify that the pending navigation is cancelled. 611 // Verify that the pending navigation is cancelled.
606 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack()); 612 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack());
607 SiteInstance* instance2 = contents()->GetSiteInstance(); 613 SiteInstance* instance2 = contents()->GetSiteInstance();
608 EXPECT_FALSE(contents()->cross_navigation_pending()); 614 EXPECT_FALSE(contents()->cross_navigation_pending());
609 EXPECT_EQ(orig_rvh, rvh()); 615 EXPECT_EQ(orig_rvh, rvh());
610 EXPECT_EQ(instance1, instance2); 616 EXPECT_EQ(instance1, instance2);
611 EXPECT_TRUE(contents()->pending_rvh() == NULL); 617 EXPECT_TRUE(contents()->pending_rvh() == NULL);
612 } 618 }
613 619
614 TEST_F(TabContentsTest, CrossSiteNavigationBackPreempted) { 620 TEST_F(TabContentsTest, CrossSiteNavigationBackPreempted) {
615 contents()->transition_cross_site = true; 621 contents()->transition_cross_site = true;
616 622
617 // Start with NTP, which gets a new RVH with WebUI bindings. 623 // Start with NTP, which gets a new RVH with WebUI bindings.
618 const GURL url1("chrome://newtab"); 624 const GURL url1("chrome://newtab");
619 controller().LoadURL( 625 controller().LoadURL(
620 url1, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 626 url1, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
621 TestRenderViewHost* ntp_rvh = rvh(); 627 TestRenderViewHost* ntp_rvh = rvh();
622 ViewHostMsg_FrameNavigate_Params params1; 628 ViewHostMsg_FrameNavigate_Params params1;
623 InitNavigateParams(&params1, 1, url1, content::PAGE_TRANSITION_TYPED); 629 InitNavigateParams(&params1, 1, url1, content::PAGE_TRANSITION_TYPED);
624 contents()->TestDidNavigate(ntp_rvh, params1); 630 contents()->TestDidNavigate(ntp_rvh, params1);
625 NavigationEntry* entry1 = controller().GetLastCommittedEntry(); 631 NavigationEntry* entry1 = controller().GetLastCommittedEntry();
626 SiteInstance* instance1 = contents()->GetSiteInstance(); 632 SiteInstance* instance1 = contents()->GetSiteInstance();
627 633
628 EXPECT_FALSE(contents()->cross_navigation_pending()); 634 EXPECT_FALSE(contents()->cross_navigation_pending());
629 EXPECT_EQ(ntp_rvh, contents()->render_view_host()); 635 EXPECT_EQ(ntp_rvh, contents()->render_view_host());
630 EXPECT_EQ(url1, entry1->url()); 636 EXPECT_EQ(url1, entry1->url());
631 EXPECT_EQ(instance1, entry1->site_instance()); 637 EXPECT_EQ(instance1, entry1->site_instance());
632 EXPECT_TRUE(ntp_rvh->enabled_bindings() & content::BINDINGS_POLICY_WEB_UI); 638 EXPECT_TRUE(ntp_rvh->enabled_bindings() & content::BINDINGS_POLICY_WEB_UI);
633 639
634 // Navigate to new site. 640 // Navigate to new site.
635 const GURL url2("http://www.google.com"); 641 const GURL url2("http://www.google.com");
636 controller().LoadURL( 642 controller().LoadURL(
637 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 643 url2, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
638 EXPECT_TRUE(contents()->cross_navigation_pending()); 644 EXPECT_TRUE(contents()->cross_navigation_pending());
639 TestRenderViewHost* google_rvh = contents()->pending_rvh(); 645 TestRenderViewHost* google_rvh = contents()->pending_rvh();
640 646
641 // Simulate beforeunload approval. 647 // Simulate beforeunload approval.
642 EXPECT_TRUE(ntp_rvh->is_waiting_for_beforeunload_ack()); 648 EXPECT_TRUE(ntp_rvh->is_waiting_for_beforeunload_ack());
643 ntp_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 649 ntp_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
644 650
645 // DidNavigate from the pending page. 651 // DidNavigate from the pending page.
646 ViewHostMsg_FrameNavigate_Params params2; 652 ViewHostMsg_FrameNavigate_Params params2;
647 InitNavigateParams(&params2, 1, url2, content::PAGE_TRANSITION_TYPED); 653 InitNavigateParams(&params2, 1, url2, content::PAGE_TRANSITION_TYPED);
648 contents()->TestDidNavigate(google_rvh, params2); 654 contents()->TestDidNavigate(google_rvh, params2);
649 NavigationEntry* entry2 = controller().GetLastCommittedEntry(); 655 NavigationEntry* entry2 = controller().GetLastCommittedEntry();
650 SiteInstance* instance2 = contents()->GetSiteInstance(); 656 SiteInstance* instance2 = contents()->GetSiteInstance();
651 657
652 EXPECT_FALSE(contents()->cross_navigation_pending()); 658 EXPECT_FALSE(contents()->cross_navigation_pending());
653 EXPECT_EQ(google_rvh, contents()->render_view_host()); 659 EXPECT_EQ(google_rvh, contents()->render_view_host());
654 EXPECT_NE(instance1, instance2); 660 EXPECT_NE(instance1, instance2);
655 EXPECT_FALSE(contents()->pending_rvh()); 661 EXPECT_FALSE(contents()->pending_rvh());
656 EXPECT_EQ(url2, entry2->url()); 662 EXPECT_EQ(url2, entry2->url());
657 EXPECT_EQ(instance2, entry2->site_instance()); 663 EXPECT_EQ(instance2, entry2->site_instance());
658 EXPECT_FALSE(google_rvh->enabled_bindings() & 664 EXPECT_FALSE(google_rvh->enabled_bindings() &
659 content::BINDINGS_POLICY_WEB_UI); 665 content::BINDINGS_POLICY_WEB_UI);
660 666
661 // Navigate to third page on same site. 667 // Navigate to third page on same site.
662 const GURL url3("http://news.google.com"); 668 const GURL url3("http://news.google.com");
663 controller().LoadURL( 669 controller().LoadURL(
664 url3, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 670 url3, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
665 EXPECT_FALSE(contents()->cross_navigation_pending()); 671 EXPECT_FALSE(contents()->cross_navigation_pending());
666 ViewHostMsg_FrameNavigate_Params params3; 672 ViewHostMsg_FrameNavigate_Params params3;
667 InitNavigateParams(&params3, 2, url3, content::PAGE_TRANSITION_TYPED); 673 InitNavigateParams(&params3, 2, url3, content::PAGE_TRANSITION_TYPED);
668 contents()->TestDidNavigate(google_rvh, params3); 674 contents()->TestDidNavigate(google_rvh, params3);
669 NavigationEntry* entry3 = controller().GetLastCommittedEntry(); 675 NavigationEntry* entry3 = controller().GetLastCommittedEntry();
670 SiteInstance* instance3 = contents()->GetSiteInstance(); 676 SiteInstance* instance3 = contents()->GetSiteInstance();
671 677
672 EXPECT_FALSE(contents()->cross_navigation_pending()); 678 EXPECT_FALSE(contents()->cross_navigation_pending());
673 EXPECT_EQ(google_rvh, contents()->render_view_host()); 679 EXPECT_EQ(google_rvh, contents()->render_view_host());
674 EXPECT_EQ(instance2, instance3); 680 EXPECT_EQ(instance2, instance3);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
709 715
710 // Test that during a slow cross-site navigation, a sub-frame navigation in the 716 // 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). 717 // original renderer will not cancel the slow navigation (bug 42029).
712 TEST_F(TabContentsTest, CrossSiteNavigationNotPreemptedByFrame) { 718 TEST_F(TabContentsTest, CrossSiteNavigationNotPreemptedByFrame) {
713 contents()->transition_cross_site = true; 719 contents()->transition_cross_site = true;
714 TestRenderViewHost* orig_rvh = rvh(); 720 TestRenderViewHost* orig_rvh = rvh();
715 721
716 // Navigate to URL. First URL should use first RenderViewHost. 722 // Navigate to URL. First URL should use first RenderViewHost.
717 const GURL url("http://www.google.com"); 723 const GURL url("http://www.google.com");
718 controller().LoadURL( 724 controller().LoadURL(
719 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 725 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
720 ViewHostMsg_FrameNavigate_Params params1; 726 ViewHostMsg_FrameNavigate_Params params1;
721 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 727 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
722 contents()->TestDidNavigate(orig_rvh, params1); 728 contents()->TestDidNavigate(orig_rvh, params1);
723 EXPECT_FALSE(contents()->cross_navigation_pending()); 729 EXPECT_FALSE(contents()->cross_navigation_pending());
724 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 730 EXPECT_EQ(orig_rvh, contents()->render_view_host());
725 731
726 // Start navigating to new site. 732 // Start navigating to new site.
727 const GURL url2("http://www.yahoo.com"); 733 const GURL url2("http://www.yahoo.com");
728 controller().LoadURL( 734 controller().LoadURL(
729 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 735 url2, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
730 736
731 // Simulate a sub-frame navigation arriving and ensure the RVH is still 737 // Simulate a sub-frame navigation arriving and ensure the RVH is still
732 // waiting for a before unload response. 738 // waiting for a before unload response.
733 orig_rvh->SendNavigateWithTransition(1, GURL("http://google.com/frame"), 739 orig_rvh->SendNavigateWithTransition(1, GURL("http://google.com/frame"),
734 content::PAGE_TRANSITION_AUTO_SUBFRAME); 740 content::PAGE_TRANSITION_AUTO_SUBFRAME);
735 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack()); 741 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack());
736 742
737 // Now simulate the onbeforeunload approval and verify the navigation is 743 // Now simulate the onbeforeunload approval and verify the navigation is
738 // not canceled. 744 // not canceled.
739 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 745 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
740 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack()); 746 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack());
741 EXPECT_TRUE(contents()->cross_navigation_pending()); 747 EXPECT_TRUE(contents()->cross_navigation_pending());
742 } 748 }
743 749
744 // Test that a cross-site navigation is not preempted if the previous 750 // Test that a cross-site navigation is not preempted if the previous
745 // renderer sends a FrameNavigate message just before being told to stop. 751 // renderer sends a FrameNavigate message just before being told to stop.
746 // We should only preempt the cross-site navigation if the previous renderer 752 // We should only preempt the cross-site navigation if the previous renderer
747 // has started a new navigation. See http://crbug.com/79176. 753 // has started a new navigation. See http://crbug.com/79176.
748 TEST_F(TabContentsTest, CrossSiteNotPreemptedDuringBeforeUnload) { 754 TEST_F(TabContentsTest, CrossSiteNotPreemptedDuringBeforeUnload) {
749 contents()->transition_cross_site = true; 755 contents()->transition_cross_site = true;
750 756
751 // Navigate to NTP URL. 757 // Navigate to NTP URL.
752 const GURL url("chrome://newtab"); 758 const GURL url("chrome://newtab");
753 controller().LoadURL( 759 controller().LoadURL(
754 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 760 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
755 TestRenderViewHost* orig_rvh = rvh(); 761 TestRenderViewHost* orig_rvh = rvh();
756 EXPECT_FALSE(contents()->cross_navigation_pending()); 762 EXPECT_FALSE(contents()->cross_navigation_pending());
757 763
758 // Navigate to new site, with the beforeunload request in flight. 764 // Navigate to new site, with the beforeunload request in flight.
759 const GURL url2("http://www.yahoo.com"); 765 const GURL url2("http://www.yahoo.com");
760 controller().LoadURL( 766 controller().LoadURL(
761 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 767 url2, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
762 TestRenderViewHost* pending_rvh = contents()->pending_rvh(); 768 TestRenderViewHost* pending_rvh = contents()->pending_rvh();
763 EXPECT_TRUE(contents()->cross_navigation_pending()); 769 EXPECT_TRUE(contents()->cross_navigation_pending());
764 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack()); 770 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack());
765 771
766 // Suppose the first navigation tries to commit now, with a 772 // Suppose the first navigation tries to commit now, with a
767 // ViewMsg_Stop in flight. This should not cancel the pending navigation, 773 // ViewMsg_Stop in flight. This should not cancel the pending navigation,
768 // but it should act as if the beforeunload ack arrived. 774 // but it should act as if the beforeunload ack arrived.
769 orig_rvh->SendNavigate(1, GURL("chrome://newtab")); 775 orig_rvh->SendNavigate(1, GURL("chrome://newtab"));
770 EXPECT_TRUE(contents()->cross_navigation_pending()); 776 EXPECT_TRUE(contents()->cross_navigation_pending());
771 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 777 EXPECT_EQ(orig_rvh, contents()->render_view_host());
(...skipping 12 matching lines...) Expand all
784 // is almost ready to be displayed, and the original renderer is only given a 790 // 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. 791 // short chance to run an unload handler. Prevents regression of bug 23942.
786 TEST_F(TabContentsTest, CrossSiteCantPreemptAfterUnload) { 792 TEST_F(TabContentsTest, CrossSiteCantPreemptAfterUnload) {
787 contents()->transition_cross_site = true; 793 contents()->transition_cross_site = true;
788 TestRenderViewHost* orig_rvh = rvh(); 794 TestRenderViewHost* orig_rvh = rvh();
789 SiteInstance* instance1 = contents()->GetSiteInstance(); 795 SiteInstance* instance1 = contents()->GetSiteInstance();
790 796
791 // Navigate to URL. First URL should use first RenderViewHost. 797 // Navigate to URL. First URL should use first RenderViewHost.
792 const GURL url("http://www.google.com"); 798 const GURL url("http://www.google.com");
793 controller().LoadURL( 799 controller().LoadURL(
794 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 800 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
795 ViewHostMsg_FrameNavigate_Params params1; 801 ViewHostMsg_FrameNavigate_Params params1;
796 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 802 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
797 contents()->TestDidNavigate(orig_rvh, params1); 803 contents()->TestDidNavigate(orig_rvh, params1);
798 EXPECT_FALSE(contents()->cross_navigation_pending()); 804 EXPECT_FALSE(contents()->cross_navigation_pending());
799 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 805 EXPECT_EQ(orig_rvh, contents()->render_view_host());
800 806
801 // Navigate to new site, simulating an onbeforeunload approval. 807 // Navigate to new site, simulating an onbeforeunload approval.
802 const GURL url2("http://www.yahoo.com"); 808 const GURL url2("http://www.yahoo.com");
803 controller().LoadURL( 809 controller().LoadURL(
804 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 810 url2, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
805 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 811 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
806 EXPECT_TRUE(contents()->cross_navigation_pending()); 812 EXPECT_TRUE(contents()->cross_navigation_pending());
807 TestRenderViewHost* pending_rvh = static_cast<TestRenderViewHost*>( 813 TestRenderViewHost* pending_rvh = static_cast<TestRenderViewHost*>(
808 contents()->pending_rvh()); 814 contents()->pending_rvh());
809 815
810 // Simulate the pending renderer's response, which leads to an unload request 816 // Simulate the pending renderer's response, which leads to an unload request
811 // being sent to orig_rvh. 817 // being sent to orig_rvh.
812 contents()->render_manager_for_testing()->OnCrossSiteResponse(0, 0); 818 contents()->render_manager_for_testing()->OnCrossSiteResponse(0, 0);
813 819
814 // Suppose the original renderer navigates now, while the unload request is in 820 // Suppose the original renderer navigates now, while the unload request is in
(...skipping 23 matching lines...) Expand all
838 // Test that a cross-site navigation that doesn't commit after the unload 844 // 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. 845 // handler doesn't leave the tab in a stuck state. http://crbug.com/88562.
840 TEST_F(TabContentsTest, CrossSiteNavigationCanceled) { 846 TEST_F(TabContentsTest, CrossSiteNavigationCanceled) {
841 contents()->transition_cross_site = true; 847 contents()->transition_cross_site = true;
842 TestRenderViewHost* orig_rvh = rvh(); 848 TestRenderViewHost* orig_rvh = rvh();
843 SiteInstance* instance1 = contents()->GetSiteInstance(); 849 SiteInstance* instance1 = contents()->GetSiteInstance();
844 850
845 // Navigate to URL. First URL should use first RenderViewHost. 851 // Navigate to URL. First URL should use first RenderViewHost.
846 const GURL url("http://www.google.com"); 852 const GURL url("http://www.google.com");
847 controller().LoadURL( 853 controller().LoadURL(
848 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 854 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
849 ViewHostMsg_FrameNavigate_Params params1; 855 ViewHostMsg_FrameNavigate_Params params1;
850 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 856 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
851 contents()->TestDidNavigate(orig_rvh, params1); 857 contents()->TestDidNavigate(orig_rvh, params1);
852 EXPECT_FALSE(contents()->cross_navigation_pending()); 858 EXPECT_FALSE(contents()->cross_navigation_pending());
853 EXPECT_EQ(orig_rvh, contents()->render_view_host()); 859 EXPECT_EQ(orig_rvh, contents()->render_view_host());
854 860
855 // Navigate to new site, simulating an onbeforeunload approval. 861 // Navigate to new site, simulating an onbeforeunload approval.
856 const GURL url2("http://www.yahoo.com"); 862 const GURL url2("http://www.yahoo.com");
857 controller().LoadURL( 863 controller().LoadURL(
858 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 864 url2, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
859 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack()); 865 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack());
860 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true)); 866 orig_rvh->TestOnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true));
861 EXPECT_TRUE(contents()->cross_navigation_pending()); 867 EXPECT_TRUE(contents()->cross_navigation_pending());
862 868
863 // Simulate swap out message when the response arrives. 869 // Simulate swap out message when the response arrives.
864 orig_rvh->set_is_swapped_out(true); 870 orig_rvh->set_is_swapped_out(true);
865 871
866 // Suppose the navigation doesn't get a chance to commit, and the user 872 // Suppose the navigation doesn't get a chance to commit, and the user
867 // navigates in the current RVH's SiteInstance. 873 // navigates in the current RVH's SiteInstance.
868 controller().LoadURL( 874 controller().LoadURL(
869 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 875 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
870 876
871 // Verify that the pending navigation is cancelled and the renderer is no 877 // Verify that the pending navigation is cancelled and the renderer is no
872 // longer swapped out. 878 // longer swapped out.
873 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack()); 879 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack());
874 SiteInstance* instance2 = contents()->GetSiteInstance(); 880 SiteInstance* instance2 = contents()->GetSiteInstance();
875 EXPECT_FALSE(contents()->cross_navigation_pending()); 881 EXPECT_FALSE(contents()->cross_navigation_pending());
876 EXPECT_EQ(orig_rvh, rvh()); 882 EXPECT_EQ(orig_rvh, rvh());
877 EXPECT_FALSE(orig_rvh->is_swapped_out()); 883 EXPECT_FALSE(orig_rvh->is_swapped_out());
878 EXPECT_EQ(instance1, instance2); 884 EXPECT_EQ(instance1, instance2);
879 EXPECT_TRUE(contents()->pending_rvh() == NULL); 885 EXPECT_TRUE(contents()->pending_rvh() == NULL);
880 } 886 }
881 887
882 // Test that NavigationEntries have the correct content state after going 888 // Test that NavigationEntries have the correct content state after going
883 // forward and back. Prevents regression for bug 1116137. 889 // forward and back. Prevents regression for bug 1116137.
884 TEST_F(TabContentsTest, NavigationEntryContentState) { 890 TEST_F(TabContentsTest, NavigationEntryContentState) {
885 TestRenderViewHost* orig_rvh = rvh(); 891 TestRenderViewHost* orig_rvh = rvh();
886 892
887 // Navigate to URL. There should be no committed entry yet. 893 // Navigate to URL. There should be no committed entry yet.
888 const GURL url("http://www.google.com"); 894 const GURL url("http://www.google.com");
889 controller().LoadURL( 895 controller().LoadURL(
890 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 896 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
891 NavigationEntry* entry = controller().GetLastCommittedEntry(); 897 NavigationEntry* entry = controller().GetLastCommittedEntry();
892 EXPECT_TRUE(entry == NULL); 898 EXPECT_TRUE(entry == NULL);
893 899
894 // Committed entry should have content state after DidNavigate. 900 // Committed entry should have content state after DidNavigate.
895 ViewHostMsg_FrameNavigate_Params params1; 901 ViewHostMsg_FrameNavigate_Params params1;
896 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED); 902 InitNavigateParams(&params1, 1, url, content::PAGE_TRANSITION_TYPED);
897 contents()->TestDidNavigate(orig_rvh, params1); 903 contents()->TestDidNavigate(orig_rvh, params1);
898 entry = controller().GetLastCommittedEntry(); 904 entry = controller().GetLastCommittedEntry();
899 EXPECT_FALSE(entry->content_state().empty()); 905 EXPECT_FALSE(entry->content_state().empty());
900 906
901 // Navigate to same site. 907 // Navigate to same site.
902 const GURL url2("http://images.google.com"); 908 const GURL url2("http://images.google.com");
903 controller().LoadURL( 909 controller().LoadURL(
904 url2, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 910 url2, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
905 entry = controller().GetLastCommittedEntry(); 911 entry = controller().GetLastCommittedEntry();
906 EXPECT_FALSE(entry->content_state().empty()); 912 EXPECT_FALSE(entry->content_state().empty());
907 913
908 // Committed entry should have content state after DidNavigate. 914 // Committed entry should have content state after DidNavigate.
909 ViewHostMsg_FrameNavigate_Params params2; 915 ViewHostMsg_FrameNavigate_Params params2;
910 InitNavigateParams(&params2, 2, url2, content::PAGE_TRANSITION_TYPED); 916 InitNavigateParams(&params2, 2, url2, content::PAGE_TRANSITION_TYPED);
911 contents()->TestDidNavigate(orig_rvh, params2); 917 contents()->TestDidNavigate(orig_rvh, params2);
912 entry = controller().GetLastCommittedEntry(); 918 entry = controller().GetLastCommittedEntry();
913 EXPECT_FALSE(entry->content_state().empty()); 919 EXPECT_FALSE(entry->content_state().empty());
914 920
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 // as when a URL is typed in the location bar) that shows an interstitial and 974 // as when a URL is typed in the location bar) that shows an interstitial and
969 // creates a new navigation entry, then hiding it without proceeding. 975 // creates a new navigation entry, then hiding it without proceeding.
970 TEST_F(TabContentsTest, 976 TEST_F(TabContentsTest,
971 ShowInterstitialFromBrowserWithNewNavigationDontProceed) { 977 ShowInterstitialFromBrowserWithNewNavigationDontProceed) {
972 // Navigate to a page. 978 // Navigate to a page.
973 GURL url1("http://www.google.com"); 979 GURL url1("http://www.google.com");
974 rvh()->SendNavigate(1, url1); 980 rvh()->SendNavigate(1, url1);
975 EXPECT_EQ(1, controller().entry_count()); 981 EXPECT_EQ(1, controller().entry_count());
976 982
977 // Initiate a browser navigation that will trigger the interstitial 983 // Initiate a browser navigation that will trigger the interstitial
978 controller().LoadURL(GURL("http://www.evil.com"), GURL(), 984 controller().LoadURL(GURL("http://www.evil.com"), content::Referrer(),
979 content::PAGE_TRANSITION_TYPED, std::string()); 985 content::PAGE_TRANSITION_TYPED, std::string());
980 986
981 // Show an interstitial. 987 // Show an interstitial.
982 TestInterstitialPage::InterstitialState state = 988 TestInterstitialPage::InterstitialState state =
983 TestInterstitialPage::UNDECIDED; 989 TestInterstitialPage::UNDECIDED;
984 bool deleted = false; 990 bool deleted = false;
985 GURL url2("http://interstitial"); 991 GURL url2("http://interstitial");
986 TestInterstitialPage* interstitial = 992 TestInterstitialPage* interstitial =
987 new TestInterstitialPage(contents(), true, url2, &state, &deleted); 993 new TestInterstitialPage(contents(), true, url2, &state, &deleted);
988 TestInterstitialPageStateGuard state_guard(interstitial); 994 TestInterstitialPageStateGuard state_guard(interstitial);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 // as when a URL is typed in the location bar) that shows an interstitial and 1111 // as when a URL is typed in the location bar) that shows an interstitial and
1106 // creates a new navigation entry, then proceeding. 1112 // creates a new navigation entry, then proceeding.
1107 TEST_F(TabContentsTest, 1113 TEST_F(TabContentsTest,
1108 ShowInterstitialFromBrowserNewNavigationProceed) { 1114 ShowInterstitialFromBrowserNewNavigationProceed) {
1109 // Navigate to a page. 1115 // Navigate to a page.
1110 GURL url1("http://www.google.com"); 1116 GURL url1("http://www.google.com");
1111 rvh()->SendNavigate(1, url1); 1117 rvh()->SendNavigate(1, url1);
1112 EXPECT_EQ(1, controller().entry_count()); 1118 EXPECT_EQ(1, controller().entry_count());
1113 1119
1114 // Initiate a browser navigation that will trigger the interstitial 1120 // Initiate a browser navigation that will trigger the interstitial
1115 controller().LoadURL(GURL("http://www.evil.com"), GURL(), 1121 controller().LoadURL(GURL("http://www.evil.com"), content::Referrer(),
1116 content::PAGE_TRANSITION_TYPED, std::string()); 1122 content::PAGE_TRANSITION_TYPED, std::string());
1117 1123
1118 // Show an interstitial. 1124 // Show an interstitial.
1119 TestInterstitialPage::InterstitialState state = 1125 TestInterstitialPage::InterstitialState state =
1120 TestInterstitialPage::UNDECIDED; 1126 TestInterstitialPage::UNDECIDED;
1121 bool deleted = false; 1127 bool deleted = false;
1122 GURL url2("http://interstitial"); 1128 GURL url2("http://interstitial");
1123 TestInterstitialPage* interstitial = 1129 TestInterstitialPage* interstitial =
1124 new TestInterstitialPage(contents(), true, url2, &state, &deleted); 1130 new TestInterstitialPage(contents(), true, url2, &state, &deleted);
1125 TestInterstitialPageStateGuard state_guard(interstitial); 1131 TestInterstitialPageStateGuard state_guard(interstitial);
(...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after
1549 TestInterstitialPage* interstitial = 1555 TestInterstitialPage* interstitial =
1550 new TestInterstitialPage(contents(), true, interstitial_url, 1556 new TestInterstitialPage(contents(), true, interstitial_url,
1551 &state, &deleted); 1557 &state, &deleted);
1552 TestInterstitialPageStateGuard state_guard(interstitial); 1558 TestInterstitialPageStateGuard state_guard(interstitial);
1553 interstitial->Show(); 1559 interstitial->Show();
1554 1560
1555 // Let's simulate a navigation initiated from the browser before the 1561 // Let's simulate a navigation initiated from the browser before the
1556 // interstitial finishes loading. 1562 // interstitial finishes loading.
1557 const GURL url("http://www.google.com"); 1563 const GURL url("http://www.google.com");
1558 controller().LoadURL( 1564 controller().LoadURL(
1559 url, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 1565 url, content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string());
1560 ASSERT_FALSE(deleted); 1566 ASSERT_FALSE(deleted);
1561 EXPECT_FALSE(interstitial->is_showing()); 1567 EXPECT_FALSE(interstitial->is_showing());
1562 1568
1563 // Now let's make the interstitial navigation commit. 1569 // Now let's make the interstitial navigation commit.
1564 interstitial->TestDidNavigate(1, interstitial_url); 1570 interstitial->TestDidNavigate(1, interstitial_url);
1565 1571
1566 // After it loaded the interstitial should be gone. 1572 // After it loaded the interstitial should be gone.
1567 EXPECT_TRUE(deleted); 1573 EXPECT_TRUE(deleted);
1568 EXPECT_EQ(TestInterstitialPage::CANCELED, state); 1574 EXPECT_EQ(TestInterstitialPage::CANCELED, state);
1569 } 1575 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
1640 1646
1641 // Tests that showing an interstitial as a result of a browser initiated 1647 // Tests that showing an interstitial as a result of a browser initiated
1642 // navigation while an interstitial is showing does not remove the pending 1648 // navigation while an interstitial is showing does not remove the pending
1643 // entry (see http://crbug.com/9791). 1649 // entry (see http://crbug.com/9791).
1644 TEST_F(TabContentsTest, NewInterstitialDoesNotCancelPendingEntry) { 1650 TEST_F(TabContentsTest, NewInterstitialDoesNotCancelPendingEntry) {
1645 const char kUrl[] = "http://www.badguys.com/"; 1651 const char kUrl[] = "http://www.badguys.com/";
1646 const GURL kGURL(kUrl); 1652 const GURL kGURL(kUrl);
1647 1653
1648 // Start a navigation to a page 1654 // Start a navigation to a page
1649 contents()->controller().LoadURL( 1655 contents()->controller().LoadURL(
1650 kGURL, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 1656 kGURL, content::Referrer(), content::PAGE_TRANSITION_TYPED,
1657 std::string());
1651 1658
1652 // Simulate that navigation triggering an interstitial. 1659 // Simulate that navigation triggering an interstitial.
1653 TestInterstitialPage::InterstitialState state = 1660 TestInterstitialPage::InterstitialState state =
1654 TestInterstitialPage::UNDECIDED; 1661 TestInterstitialPage::UNDECIDED;
1655 bool deleted = false; 1662 bool deleted = false;
1656 TestInterstitialPage* interstitial = 1663 TestInterstitialPage* interstitial =
1657 new TestInterstitialPage(contents(), true, kGURL, &state, &deleted); 1664 new TestInterstitialPage(contents(), true, kGURL, &state, &deleted);
1658 TestInterstitialPageStateGuard state_guard(interstitial); 1665 TestInterstitialPageStateGuard state_guard(interstitial);
1659 interstitial->Show(); 1666 interstitial->Show();
1660 interstitial->TestDidNavigate(1, kGURL); 1667 interstitial->TestDidNavigate(1, kGURL);
1661 1668
1662 // Initiate a new navigation from the browser that also triggers an 1669 // Initiate a new navigation from the browser that also triggers an
1663 // interstitial. 1670 // interstitial.
1664 contents()->controller().LoadURL( 1671 contents()->controller().LoadURL(
1665 kGURL, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 1672 kGURL, content::Referrer(), content::PAGE_TRANSITION_TYPED,
1673 std::string());
1666 TestInterstitialPage::InterstitialState state2 = 1674 TestInterstitialPage::InterstitialState state2 =
1667 TestInterstitialPage::UNDECIDED; 1675 TestInterstitialPage::UNDECIDED;
1668 bool deleted2 = false; 1676 bool deleted2 = false;
1669 TestInterstitialPage* interstitial2 = 1677 TestInterstitialPage* interstitial2 =
1670 new TestInterstitialPage(contents(), true, kGURL, &state, &deleted); 1678 new TestInterstitialPage(contents(), true, kGURL, &state, &deleted);
1671 TestInterstitialPageStateGuard state_guard2(interstitial2); 1679 TestInterstitialPageStateGuard state_guard2(interstitial2);
1672 interstitial2->Show(); 1680 interstitial2->Show();
1673 interstitial2->TestDidNavigate(1, kGURL); 1681 interstitial2->TestDidNavigate(1, kGURL);
1674 1682
1675 // Make sure we still have an entry. 1683 // Make sure we still have an entry.
1676 NavigationEntry* entry = contents()->controller().pending_entry(); 1684 NavigationEntry* entry = contents()->controller().pending_entry();
1677 ASSERT_TRUE(entry); 1685 ASSERT_TRUE(entry);
1678 EXPECT_EQ(kUrl, entry->url().spec()); 1686 EXPECT_EQ(kUrl, entry->url().spec());
1679 1687
1680 // And that the first interstitial is gone, but not the second. 1688 // And that the first interstitial is gone, but not the second.
1681 EXPECT_TRUE(deleted); 1689 EXPECT_TRUE(deleted);
1682 EXPECT_EQ(TestInterstitialPage::CANCELED, state); 1690 EXPECT_EQ(TestInterstitialPage::CANCELED, state);
1683 EXPECT_FALSE(deleted2); 1691 EXPECT_FALSE(deleted2);
1684 EXPECT_EQ(TestInterstitialPage::UNDECIDED, state2); 1692 EXPECT_EQ(TestInterstitialPage::UNDECIDED, state2);
1685 } 1693 }
1686 1694
1687 // Tests that Javascript messages are not shown while an interstitial is 1695 // Tests that Javascript messages are not shown while an interstitial is
1688 // showing. 1696 // showing.
1689 TEST_F(TabContentsTest, NoJSMessageOnInterstitials) { 1697 TEST_F(TabContentsTest, NoJSMessageOnInterstitials) {
1690 const char kUrl[] = "http://www.badguys.com/"; 1698 const char kUrl[] = "http://www.badguys.com/";
1691 const GURL kGURL(kUrl); 1699 const GURL kGURL(kUrl);
1692 1700
1693 // Start a navigation to a page 1701 // Start a navigation to a page
1694 contents()->controller().LoadURL( 1702 contents()->controller().LoadURL(
1695 kGURL, GURL(), content::PAGE_TRANSITION_TYPED, std::string()); 1703 kGURL, content::Referrer(), content::PAGE_TRANSITION_TYPED,
1704 std::string());
1696 // DidNavigate from the page 1705 // DidNavigate from the page
1697 ViewHostMsg_FrameNavigate_Params params; 1706 ViewHostMsg_FrameNavigate_Params params;
1698 InitNavigateParams(&params, 1, kGURL, content::PAGE_TRANSITION_TYPED); 1707 InitNavigateParams(&params, 1, kGURL, content::PAGE_TRANSITION_TYPED);
1699 contents()->TestDidNavigate(rvh(), params); 1708 contents()->TestDidNavigate(rvh(), params);
1700 1709
1701 // Simulate showing an interstitial while the page is showing. 1710 // Simulate showing an interstitial while the page is showing.
1702 TestInterstitialPage::InterstitialState state = 1711 TestInterstitialPage::InterstitialState state =
1703 TestInterstitialPage::UNDECIDED; 1712 TestInterstitialPage::UNDECIDED;
1704 bool deleted = false; 1713 bool deleted = false;
1705 TestInterstitialPage* interstitial = 1714 TestInterstitialPage* interstitial =
(...skipping 15 matching lines...) Expand all
1721 1730
1722 // Makes sure that if the source passed to CopyStateFromAndPrune has an 1731 // Makes sure that if the source passed to CopyStateFromAndPrune has an
1723 // interstitial it isn't copied over to the destination. 1732 // interstitial it isn't copied over to the destination.
1724 TEST_F(TabContentsTest, CopyStateFromAndPruneSourceInterstitial) { 1733 TEST_F(TabContentsTest, CopyStateFromAndPruneSourceInterstitial) {
1725 // Navigate to a page. 1734 // Navigate to a page.
1726 GURL url1("http://www.google.com"); 1735 GURL url1("http://www.google.com");
1727 rvh()->SendNavigate(1, url1); 1736 rvh()->SendNavigate(1, url1);
1728 EXPECT_EQ(1, controller().entry_count()); 1737 EXPECT_EQ(1, controller().entry_count());
1729 1738
1730 // Initiate a browser navigation that will trigger the interstitial 1739 // Initiate a browser navigation that will trigger the interstitial
1731 controller().LoadURL(GURL("http://www.evil.com"), GURL(), 1740 controller().LoadURL(GURL("http://www.evil.com"), content::Referrer(),
1732 content::PAGE_TRANSITION_TYPED, std::string()); 1741 content::PAGE_TRANSITION_TYPED, std::string());
1733 1742
1734 // Show an interstitial. 1743 // Show an interstitial.
1735 TestInterstitialPage::InterstitialState state = 1744 TestInterstitialPage::InterstitialState state =
1736 TestInterstitialPage::UNDECIDED; 1745 TestInterstitialPage::UNDECIDED;
1737 bool deleted = false; 1746 bool deleted = false;
1738 GURL url2("http://interstitial"); 1747 GURL url2("http://interstitial");
1739 TestInterstitialPage* interstitial = 1748 TestInterstitialPage* interstitial =
1740 new TestInterstitialPage(contents(), true, url2, &state, &deleted); 1749 new TestInterstitialPage(contents(), true, url2, &state, &deleted);
1741 TestInterstitialPageStateGuard state_guard(interstitial); 1750 TestInterstitialPageStateGuard state_guard(interstitial);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1805 1814
1806 // It should have a transient entry. 1815 // It should have a transient entry.
1807 EXPECT_TRUE(other_controller.GetTransientEntry()); 1816 EXPECT_TRUE(other_controller.GetTransientEntry());
1808 1817
1809 // And the interstitial should be showing. 1818 // And the interstitial should be showing.
1810 EXPECT_TRUE(other_contents->showing_interstitial_page()); 1819 EXPECT_TRUE(other_contents->showing_interstitial_page());
1811 1820
1812 // And the interstitial should do a reload on don't proceed. 1821 // And the interstitial should do a reload on don't proceed.
1813 EXPECT_TRUE(other_contents->interstitial_page()->reload_on_dont_proceed()); 1822 EXPECT_TRUE(other_contents->interstitial_page()->reload_on_dont_proceed());
1814 } 1823 }
OLDNEW
« no previous file with comments | « chrome/browser/sidebar/sidebar_container.cc ('k') | chrome/browser/tabs/tab_strip_model_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698