| Index: content/browser/frame_host/render_frame_host_manager_unittest.cc | 
| diff --git a/content/browser/frame_host/render_frame_host_manager_unittest.cc b/content/browser/frame_host/render_frame_host_manager_unittest.cc | 
| index fab23b3c63b86fc6ba53cca8773f8b3229e7e5de..20b4737ea115de47f43615657509a6d46749cd69 100644 | 
| --- a/content/browser/frame_host/render_frame_host_manager_unittest.cc | 
| +++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc | 
| @@ -950,6 +950,50 @@ TEST_F(RenderFrameHostManagerTest, NavigateWithEarlyReNavigation) { | 
| notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); | 
| } | 
|  | 
| +// Test that navigation is not blocked when we make new navigation before | 
| +// previous one has been committed. This is also a regression test for | 
| +// http://crbug.com/104600. | 
| +TEST_F(RenderFrameHostManagerTest, NewCrossNavigationBetweenSwapOutAndCommit) { | 
| +  const GURL kUrl1("http://www.google.com/"); | 
| +  const GURL kUrl2("http://www.chromium.org/"); | 
| +  const GURL kUrl3("http://www.youtube.com/"); | 
| + | 
| +  contents()->NavigateAndCommit(kUrl1); | 
| +  TestRenderViewHost* rvh1 = test_rvh(); | 
| + | 
| +  // Keep active_view_count nonzero so that no swapped out views in | 
| +  // this SiteInstance get forcefully deleted. | 
| +  static_cast<SiteInstanceImpl*>(rvh1->GetSiteInstance())-> | 
| +      increment_active_view_count(); | 
| + | 
| +  // Navigate but don't commit. | 
| +  contents()->GetController().LoadURL( | 
| +      kUrl2, Referrer(), PAGE_TRANSITION_LINK, std::string()); | 
| +  EXPECT_TRUE(rvh1->is_waiting_for_beforeunload_ack()); | 
| +  contents()->ProceedWithCrossSiteNavigation(); | 
| +  EXPECT_FALSE(rvh1->is_waiting_for_beforeunload_ack()); | 
| +  StartCrossSiteTransition(contents()); | 
| +  EXPECT_TRUE(rvh1->IsWaitingForUnloadACK()); | 
| + | 
| +  rvh1->OnSwappedOut(false); | 
| +  EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_COMMIT, rvh1->rvh_state()); | 
| + | 
| +  TestRenderViewHost* rvh2 = pending_test_rvh(); | 
| +  EXPECT_TRUE(rvh2); | 
| +  static_cast<SiteInstanceImpl*>(rvh2->GetSiteInstance())-> | 
| +      increment_active_view_count(); | 
| + | 
| +  contents()->GetController().LoadURL( | 
| +      kUrl3, Referrer(), PAGE_TRANSITION_LINK, std::string()); | 
| +  // Pending rvh2 is already deleted. | 
| +  contents()->ProceedWithCrossSiteNavigation(); | 
| + | 
| +  TestRenderViewHost* rvh3 = pending_test_rvh(); | 
| +  EXPECT_TRUE(rvh3); | 
| +  // Navigation should be already unblocked by rvh1. | 
| +  EXPECT_FALSE(rvh3->are_navigations_suspended()); | 
| +} | 
| + | 
| // Tests WebUI creation. | 
| TEST_F(RenderFrameHostManagerTest, WebUI) { | 
| set_should_create_webui(true); | 
|  |