Index: chrome/browser/renderer_host/resource_dispatcher_host_uitest.cc |
=================================================================== |
--- chrome/browser/renderer_host/resource_dispatcher_host_uitest.cc (revision 50939) |
+++ chrome/browser/renderer_host/resource_dispatcher_host_uitest.cc (working copy) |
@@ -317,4 +317,27 @@ |
L"Title Of More Awesomeness", 2); |
} |
+// Tests that ResourceDispatcherHostRequestInfo is updated correctly on failed |
+// requests, to prevent calling Read on a request that has already failed. |
+// See bug 40250. |
+TEST_F(ResourceDispatcherTest, CrossSiteFailedRequest) { |
+ scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); |
+ ASSERT_TRUE(browser_proxy.get()); |
+ scoped_refptr<TabProxy> tab(browser_proxy->GetActiveTab()); |
+ ASSERT_TRUE(tab.get()); |
+ |
+ // Visit another URL first to trigger a cross-site navigation. |
+ GURL url(chrome::kChromeUINewTabURL); |
+ ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(url)); |
+ |
+ // Visit a URL that fails without calling ResourceDispatcherHost::Read. |
+ GURL broken_url("chrome://theme"); |
+ ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(broken_url)); |
+ |
+ // Make sure the navigation finishes. |
+ std::wstring tab_title; |
+ EXPECT_TRUE(tab->GetTabTitle(&tab_title)); |
+ EXPECT_EQ(L"chrome://theme/ is not available", tab_title); |
+} |
+ |
} // namespace |