| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "testing/gtest/include/gtest/gtest.h" | 5 #include "testing/gtest/include/gtest/gtest.h" |
| 6 | 6 |
| 7 #include "base/ref_counted.h" | 7 #include "base/ref_counted.h" |
| 8 #include "chrome/common/child_process.h" | 8 #include "chrome/common/child_process.h" |
| 9 #include "chrome/renderer/render_widget.h" | 9 #include "chrome/renderer/render_widget.h" |
| 10 #include "chrome/renderer/render_thread.h" | 10 #include "chrome/renderer/render_thread.h" |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 107 IPC_BEGIN_MESSAGE_MAP_EX(MockRenderThread, msg, msg_is_ok) | 107 IPC_BEGIN_MESSAGE_MAP_EX(MockRenderThread, msg, msg_is_ok) |
| 108 IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnMsgCreateWidget); | 108 IPC_MESSAGE_HANDLER(ViewHostMsg_CreateWidget, OnMsgCreateWidget); |
| 109 IPC_MESSAGE_UNHANDLED(handled = false) | 109 IPC_MESSAGE_UNHANDLED(handled = false) |
| 110 IPC_END_MESSAGE_MAP_EX() | 110 IPC_END_MESSAGE_MAP_EX() |
| 111 | 111 |
| 112 // This test must handle all messages that RenderWidget generates. | 112 // This test must handle all messages that RenderWidget generates. |
| 113 EXPECT_TRUE(handled); | 113 EXPECT_TRUE(handled); |
| 114 } | 114 } |
| 115 | 115 |
| 116 // The Widget expects to be returned valid route_id. | 116 // The Widget expects to be returned valid route_id. |
| 117 void OnMsgCreateWidget(int opener_id, int* route_id) { | 117 void OnMsgCreateWidget(int opener_id, |
| 118 bool focus_on_show, |
| 119 int* route_id) { |
| 118 opener_id_ = opener_id; | 120 opener_id_ = opener_id; |
| 119 *route_id = routing_id_; | 121 *route_id = routing_id_; |
| 120 } | 122 } |
| 121 | 123 |
| 122 // Routing id what will be assigned to the Widget. | 124 // Routing id what will be assigned to the Widget. |
| 123 int32 routing_id_; | 125 int32 routing_id_; |
| 124 // Opener id reported by the Widget. | 126 // Opener id reported by the Widget. |
| 125 int32 opener_id_; | 127 int32 opener_id_; |
| 126 // We only keep track of one Widget, we learn its pointer when it | 128 // We only keep track of one Widget, we learn its pointer when it |
| 127 // adds a new route. | 129 // adds a new route. |
| 128 IPC::Channel::Listener* widget_; | 130 IPC::Channel::Listener* widget_; |
| 129 // The last known good deserializer for sync messages. | 131 // The last known good deserializer for sync messages. |
| 130 IPC::MessageReplyDeserializer* reply_deserializer_; | 132 IPC::MessageReplyDeserializer* reply_deserializer_; |
| 131 }; | 133 }; |
| 132 | 134 |
| 133 TEST(RenderWidgetTest, CreateAndCloseWidget) { | 135 TEST(RenderWidgetTest, CreateAndCloseWidget) { |
| 134 MessageLoop msg_loop; | 136 MessageLoop msg_loop; |
| 135 MockRenderThread render_thread; | 137 MockRenderThread render_thread; |
| 136 MockProcess::GlobalInit(); | 138 MockProcess::GlobalInit(); |
| 137 | 139 |
| 138 const int32 kRouteId = 5; | 140 const int32 kRouteId = 5; |
| 139 const int32 kOpenerId = 7; | 141 const int32 kOpenerId = 7; |
| 140 render_thread.set_routing_id(kRouteId); | 142 render_thread.set_routing_id(kRouteId); |
| 141 | 143 |
| 142 { | 144 { |
| 143 scoped_refptr<RenderWidget> rw = | 145 scoped_refptr<RenderWidget> rw = |
| 144 RenderWidget::Create(kOpenerId, &render_thread); | 146 RenderWidget::Create(kOpenerId, &render_thread, true); |
| 145 ASSERT_TRUE(rw != NULL); | 147 ASSERT_TRUE(rw != NULL); |
| 146 | 148 |
| 147 // After the RenderWidget it must have sent a message to the render thread | 149 // After the RenderWidget it must have sent a message to the render thread |
| 148 // that sets the opener id. | 150 // that sets the opener id. |
| 149 EXPECT_EQ(kOpenerId, render_thread.opener_id()); | 151 EXPECT_EQ(kOpenerId, render_thread.opener_id()); |
| 150 ASSERT_TRUE(render_thread.has_widget()); | 152 ASSERT_TRUE(render_thread.has_widget()); |
| 151 | 153 |
| 152 // Now simulate a close of the Widget. | 154 // Now simulate a close of the Widget. |
| 153 render_thread.SendCloseMessage(); | 155 render_thread.SendCloseMessage(); |
| 154 EXPECT_FALSE(render_thread.has_widget()); | 156 EXPECT_FALSE(render_thread.has_widget()); |
| 155 | 157 |
| 156 // Run the loop so the release task from the renderwidget executes. | 158 // Run the loop so the release task from the renderwidget executes. |
| 157 msg_loop.PostTask(FROM_HERE, new MessageLoop::QuitTask()); | 159 msg_loop.PostTask(FROM_HERE, new MessageLoop::QuitTask()); |
| 158 msg_loop.Run(); | 160 msg_loop.Run(); |
| 159 } | 161 } |
| 160 | 162 |
| 161 // There is a delayed task that the child process posts to terminate the | 163 // There is a delayed task that the child process posts to terminate the |
| 162 // message loop so we need to spin the message loop to delete the task. | 164 // message loop so we need to spin the message loop to delete the task. |
| 163 MockProcess::GlobalCleanup(); | 165 MockProcess::GlobalCleanup(); |
| 164 msg_loop.Run(); | 166 msg_loop.Run(); |
| 165 } | 167 } |
| OLD | NEW |