| OLD | NEW |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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 "chrome/browser/renderer_host/test/test_render_view_host.h" | 5 #include "chrome/browser/renderer_host/test/test_render_view_host.h" |
| 6 #include "chrome/browser/tab_contents/navigation_entry.h" | 6 #include "chrome/browser/tab_contents/navigation_entry.h" |
| 7 #include "chrome/common/render_messages.h" | 7 #include "chrome/common/render_messages.h" |
| 8 | 8 |
| 9 class RenderViewHostTest : public RenderViewHostTestHarness { | 9 class RenderViewHostTest : public RenderViewHostTestHarness { |
| 10 }; | 10 }; |
| 11 | 11 |
| 12 // All about URLs reported by the renderer should get rewritten to about:blank. | 12 // All about URLs reported by the renderer should get rewritten to about:blank. |
| 13 // See RenderViewHost::OnMsgNavigate for a discussion. | 13 // See RenderViewHost::OnMsgNavigate for a discussion. |
| 14 TEST_F(RenderViewHostTest, FilterAbout) { | 14 TEST_F(RenderViewHostTest, FilterAbout) { |
| 15 rvh()->SendNavigate(1, GURL("about:cache")); | 15 rvh()->SendNavigate(1, GURL("about:cache")); |
| 16 ASSERT_TRUE(controller().GetActiveEntry()); | 16 ASSERT_TRUE(controller().GetActiveEntry()); |
| 17 EXPECT_EQ(GURL("about:blank"), controller().GetActiveEntry()->url()); | 17 EXPECT_EQ(GURL("about:blank"), controller().GetActiveEntry()->url()); |
| 18 } | 18 } |
| 19 | 19 |
| 20 // Create a full screen popup RenderWidgetHost and View. | 20 // Create a full screen popup RenderWidgetHost and View. |
| 21 TEST_F(RenderViewHostTest, CreateFullscreenWidget) { | 21 TEST_F(RenderViewHostTest, CreateFullscreenWidget) { |
| 22 int routing_id = process()->GetNextRoutingID(); | 22 int routing_id = process()->GetNextRoutingID(); |
| 23 rvh()->CreateNewFullscreenWidget(routing_id, WebKit::WebPopupTypeNone); | 23 rvh()->CreateNewFullscreenWidget(routing_id, WebKit::WebPopupTypeNone); |
| 24 } | 24 } |
| 25 | 25 |
| 26 // Makes sure that RenderViewHost::is_waiting_for_unload_ack_ is false when |
| 27 // reloading a page. If is_waiting_for_unload_ack_ is not false when reloading |
| 28 // the tab may get closed out even though the user pressed the reload button. |
| 29 TEST_F(RenderViewHostTest, ResetUnloadOnReload) { |
| 30 const GURL url1("http://foo1"); |
| 31 const GURL url2("http://foo2"); |
| 32 |
| 33 // This test is for a subtle timing bug. Here's the sequence that triggered |
| 34 // the bug: |
| 35 // . go to a page. |
| 36 // . go to a new page, preferably one that takes a while to resolve, such |
| 37 // as one on a site that doesn't exist. |
| 38 // . After this step is_waiting_for_unload_ack_ has been set to true on |
| 39 // the first RVH. |
| 40 // . click stop before the page has been commited. |
| 41 // . click reload. |
| 42 // . is_waiting_for_unload_ack_ is still true, and the if the hang monitor |
| 43 // fires the tab gets closed. |
| 44 |
| 45 NavigateAndCommit(url1); |
| 46 controller().LoadURL(url2, GURL(), 0); |
| 47 // Simulate the ClosePage call which is normally sent by the URLRequest. |
| 48 rvh()->ClosePage(true, 0, 0); |
| 49 // Needed so that navigations are not suspended on the RVH. Normally handled |
| 50 // by way of ViewHostMsg_ShouldClose_ACK. |
| 51 contents()->render_manager()->ShouldClosePage(true, true); |
| 52 contents()->Stop(); |
| 53 controller().Reload(false); |
| 54 EXPECT_FALSE(rvh()->is_waiting_for_unload_ack()); |
| 55 } |
| 56 |
| 26 // The test that follow trigger DCHECKS in debug build. | 57 // The test that follow trigger DCHECKS in debug build. |
| 27 #if defined(NDEBUG) | 58 #if defined(NDEBUG) |
| 28 | 59 |
| 29 // Test that when we fail to de-serialize a message, RenderViewHost calls the | 60 // Test that when we fail to de-serialize a message, RenderViewHost calls the |
| 30 // ReceivedBadMessage() handler. | 61 // ReceivedBadMessage() handler. |
| 31 TEST_F(RenderViewHostTest, BadMessageHandlerRenderViewHost) { | 62 TEST_F(RenderViewHostTest, BadMessageHandlerRenderViewHost) { |
| 32 EXPECT_EQ(0, process()->bad_msg_count()); | 63 EXPECT_EQ(0, process()->bad_msg_count()); |
| 33 // craft an incorrect ViewHostMsg_UpdateTargetURL message. The real one has | 64 // craft an incorrect ViewHostMsg_UpdateTargetURL message. The real one has |
| 34 // two payload items but the one we construct has none. | 65 // two payload items but the one we construct has none. |
| 35 IPC::Message message(0, ViewHostMsg_UpdateTargetURL::ID, | 66 IPC::Message message(0, ViewHostMsg_UpdateTargetURL::ID, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 57 // the code actually expects it to have at least one int para, this this | 88 // the code actually expects it to have at least one int para, this this |
| 58 // bogus message will not fail at de-serialization but should fail in | 89 // bogus message will not fail at de-serialization but should fail in |
| 59 // OnMsgInputEventAck() processing. | 90 // OnMsgInputEventAck() processing. |
| 60 IPC::Message message(0, ViewHostMsg_HandleInputEvent_ACK::ID, | 91 IPC::Message message(0, ViewHostMsg_HandleInputEvent_ACK::ID, |
| 61 IPC::Message::PRIORITY_NORMAL); | 92 IPC::Message::PRIORITY_NORMAL); |
| 62 rvh()->TestOnMessageReceived(message); | 93 rvh()->TestOnMessageReceived(message); |
| 63 EXPECT_EQ(1, process()->bad_msg_count()); | 94 EXPECT_EQ(1, process()->bad_msg_count()); |
| 64 } | 95 } |
| 65 | 96 |
| 66 #endif // NDEBUG | 97 #endif // NDEBUG |
| OLD | NEW |