| Index: chrome/browser/renderer_host/test/render_view_host_unittest.cc
|
| diff --git a/chrome/browser/renderer_host/test/render_view_host_unittest.cc b/chrome/browser/renderer_host/test/render_view_host_unittest.cc
|
| index c6d46d6177e6cdc36700b238727598613b819229..969f8749307eed9f3d420290a422a7ad4cd90eae 100644
|
| --- a/chrome/browser/renderer_host/test/render_view_host_unittest.cc
|
| +++ b/chrome/browser/renderer_host/test/render_view_host_unittest.cc
|
| @@ -23,6 +23,37 @@ TEST_F(RenderViewHostTest, CreateFullscreenWidget) {
|
| rvh()->CreateNewFullscreenWidget(routing_id, WebKit::WebPopupTypeNone);
|
| }
|
|
|
| +// Makes sure that RenderViewHost::is_waiting_for_unload_ack_ is false when
|
| +// reloading a page. If is_waiting_for_unload_ack_ is not false when reloading
|
| +// the tab may get closed out even though the user pressed the reload button.
|
| +TEST_F(RenderViewHostTest, ResetUnloadOnReload) {
|
| + const GURL url1("http://foo1");
|
| + const GURL url2("http://foo2");
|
| +
|
| + // This test is for a subtle timing bug. Here's the sequence that triggered
|
| + // the bug:
|
| + // . go to a page.
|
| + // . go to a new page, preferably one that takes a while to resolve, such
|
| + // as one on a site that doesn't exist.
|
| + // . After this step is_waiting_for_unload_ack_ has been set to true on
|
| + // the first RVH.
|
| + // . click stop before the page has been commited.
|
| + // . click reload.
|
| + // . is_waiting_for_unload_ack_ is still true, and the if the hang monitor
|
| + // fires the tab gets closed.
|
| +
|
| + NavigateAndCommit(url1);
|
| + controller().LoadURL(url2, GURL(), 0);
|
| + // Simulate the ClosePage call which is normally sent by the URLRequest.
|
| + rvh()->ClosePage(true, 0, 0);
|
| + // Needed so that navigations are not suspended on the RVH. Normally handled
|
| + // by way of ViewHostMsg_ShouldClose_ACK.
|
| + contents()->render_manager()->ShouldClosePage(true, true);
|
| + contents()->Stop();
|
| + controller().Reload(false);
|
| + EXPECT_FALSE(rvh()->is_waiting_for_unload_ack());
|
| +}
|
| +
|
| // The test that follow trigger DCHECKS in debug build.
|
| #if defined(NDEBUG)
|
|
|
|
|