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 "app/gfx/canvas.h" | 5 #include "app/gfx/canvas.h" |
6 #include "base/basictypes.h" | 6 #include "base/basictypes.h" |
7 #include "base/keyboard_codes.h" | 7 #include "base/keyboard_codes.h" |
8 #include "base/scoped_ptr.h" | 8 #include "base/scoped_ptr.h" |
9 #include "base/shared_memory.h" | 9 #include "base/shared_memory.h" |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 ViewHostMsg_PaintRect message(render_widget_id, params); | 93 ViewHostMsg_PaintRect message(render_widget_id, params); |
94 *msg = message; | 94 *msg = message; |
95 return true; | 95 return true; |
96 } | 96 } |
97 | 97 |
98 // TestView -------------------------------------------------------------------- | 98 // TestView -------------------------------------------------------------------- |
99 | 99 |
100 // This test view allows us to specify the size. | 100 // This test view allows us to specify the size. |
101 class TestView : public TestRenderWidgetHostView { | 101 class TestView : public TestRenderWidgetHostView { |
102 public: | 102 public: |
103 TestView() {} | 103 TestView(RenderWidgetHost* rwh) : TestRenderWidgetHostView(rwh) {} |
104 | 104 |
105 // Sets the bounds returned by GetViewBounds. | 105 // Sets the bounds returned by GetViewBounds. |
106 void set_bounds(const gfx::Rect& bounds) { | 106 void set_bounds(const gfx::Rect& bounds) { |
107 bounds_ = bounds; | 107 bounds_ = bounds; |
108 } | 108 } |
109 | 109 |
110 // RenderWidgetHostView override. | 110 // RenderWidgetHostView override. |
111 virtual gfx::Rect GetViewBounds() const { | 111 virtual gfx::Rect GetViewBounds() const { |
112 return bounds_; | 112 return bounds_; |
113 } | 113 } |
114 | 114 |
115 BackingStore* AllocBackingStore(const gfx::Size& size) { | |
116 return new BackingStore(size); | |
117 } | |
118 | |
119 protected: | 115 protected: |
120 gfx::Rect bounds_; | 116 gfx::Rect bounds_; |
121 DISALLOW_COPY_AND_ASSIGN(TestView); | 117 DISALLOW_COPY_AND_ASSIGN(TestView); |
122 }; | 118 }; |
123 | 119 |
124 // MockRenderWidgetHostTest ---------------------------------------------------- | 120 // MockRenderWidgetHostTest ---------------------------------------------------- |
125 | 121 |
126 class MockRenderWidgetHost : public RenderWidgetHost { | 122 class MockRenderWidgetHost : public RenderWidgetHost { |
127 public: | 123 public: |
128 MockRenderWidgetHost(RenderProcessHost* process, int routing_id) | 124 MockRenderWidgetHost(RenderProcessHost* process, int routing_id) |
(...skipping 24 matching lines...) Expand all Loading... |
153 } | 149 } |
154 ~RenderWidgetHostTest() { | 150 ~RenderWidgetHostTest() { |
155 } | 151 } |
156 | 152 |
157 protected: | 153 protected: |
158 // testing::Test | 154 // testing::Test |
159 void SetUp() { | 155 void SetUp() { |
160 profile_.reset(new TestingProfile()); | 156 profile_.reset(new TestingProfile()); |
161 process_ = new RenderWidgetHostProcess(profile_.get()); | 157 process_ = new RenderWidgetHostProcess(profile_.get()); |
162 host_.reset(new MockRenderWidgetHost(process_, 1)); | 158 host_.reset(new MockRenderWidgetHost(process_, 1)); |
163 view_.reset(new TestView); | 159 view_.reset(new TestView(host_.get())); |
164 host_->set_view(view_.get()); | 160 host_->set_view(view_.get()); |
165 host_->Init(); | 161 host_->Init(); |
166 } | 162 } |
167 void TearDown() { | 163 void TearDown() { |
168 view_.reset(); | 164 view_.reset(); |
169 host_.reset(); | 165 host_.reset(); |
170 process_ = NULL; | 166 process_ = NULL; |
171 profile_.reset(); | 167 profile_.reset(); |
172 | 168 |
173 // Process all pending tasks to avoid leaks. | 169 // Process all pending tasks to avoid leaks. |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
296 // could test that, but it appears that would mean painting everything twice | 292 // could test that, but it appears that would mean painting everything twice |
297 // since windows HDC structures are opaque. | 293 // since windows HDC structures are opaque. |
298 } | 294 } |
299 | 295 |
300 // Tests getting the backing store with the renderer not setting repaint ack | 296 // Tests getting the backing store with the renderer not setting repaint ack |
301 // flags. | 297 // flags. |
302 TEST_F(RenderWidgetHostTest, GetBackingStore_NoRepaintAck) { | 298 TEST_F(RenderWidgetHostTest, GetBackingStore_NoRepaintAck) { |
303 // We don't currently have a backing store, and if the renderer doesn't send | 299 // We don't currently have a backing store, and if the renderer doesn't send |
304 // one in time, we should get nothing. | 300 // one in time, we should get nothing. |
305 process_->set_paint_msg_should_reply(false); | 301 process_->set_paint_msg_should_reply(false); |
306 BackingStore* backing = host_->GetBackingStore(); | 302 BackingStore* backing = host_->GetBackingStore(true); |
307 EXPECT_FALSE(backing); | 303 EXPECT_FALSE(backing); |
308 // The widget host should have sent a request for a repaint, and there should | 304 // The widget host should have sent a request for a repaint, and there should |
309 // be no paint ACK. | 305 // be no paint ACK. |
310 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID)); | 306 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID)); |
311 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching( | 307 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching( |
312 ViewMsg_PaintRect_ACK::ID)); | 308 ViewMsg_PaintRect_ACK::ID)); |
313 | 309 |
314 // Allowing the renderer to reply in time should give is a backing store. | 310 // Allowing the renderer to reply in time should give is a backing store. |
315 process_->sink().ClearMessages(); | 311 process_->sink().ClearMessages(); |
316 process_->set_paint_msg_should_reply(true); | 312 process_->set_paint_msg_should_reply(true); |
317 process_->set_paint_msg_reply_flags(0); | 313 process_->set_paint_msg_reply_flags(0); |
318 backing = host_->GetBackingStore(); | 314 backing = host_->GetBackingStore(true); |
319 EXPECT_TRUE(backing); | 315 EXPECT_TRUE(backing); |
320 // The widget host should NOT have sent a request for a repaint, since there | 316 // The widget host should NOT have sent a request for a repaint, since there |
321 // was an ACK already pending. | 317 // was an ACK already pending. |
322 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID)); | 318 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID)); |
323 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 319 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
324 ViewMsg_PaintRect_ACK::ID)); | 320 ViewMsg_PaintRect_ACK::ID)); |
325 } | 321 } |
326 | 322 |
327 // Tests getting the backing store with the renderer sending a repaint ack. | 323 // Tests getting the backing store with the renderer sending a repaint ack. |
328 TEST_F(RenderWidgetHostTest, GetBackingStore_RepaintAck) { | 324 TEST_F(RenderWidgetHostTest, GetBackingStore_RepaintAck) { |
329 // Doing a request request with the paint message allowed should work and | 325 // Doing a request request with the paint message allowed should work and |
330 // the repaint ack should work. | 326 // the repaint ack should work. |
331 process_->set_paint_msg_should_reply(true); | 327 process_->set_paint_msg_should_reply(true); |
332 process_->set_paint_msg_reply_flags( | 328 process_->set_paint_msg_reply_flags( |
333 ViewHostMsg_PaintRect_Flags::IS_REPAINT_ACK); | 329 ViewHostMsg_PaintRect_Flags::IS_REPAINT_ACK); |
334 BackingStore* backing = host_->GetBackingStore(); | 330 BackingStore* backing = host_->GetBackingStore(true); |
335 EXPECT_TRUE(backing); | 331 EXPECT_TRUE(backing); |
336 // We still should not have sent out a repaint request since the last flags | 332 // We still should not have sent out a repaint request since the last flags |
337 // didn't have the repaint ack set, and the pending flag will still be set. | 333 // didn't have the repaint ack set, and the pending flag will still be set. |
338 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID)); | 334 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID)); |
339 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( | 335 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching( |
340 ViewMsg_PaintRect_ACK::ID)); | 336 ViewMsg_PaintRect_ACK::ID)); |
341 | 337 |
342 // Asking again for the backing store should just re-use the existing one | 338 // Asking again for the backing store should just re-use the existing one |
343 // and not send any messagse. | 339 // and not send any messagse. |
344 process_->sink().ClearMessages(); | 340 process_->sink().ClearMessages(); |
345 backing = host_->GetBackingStore(); | 341 backing = host_->GetBackingStore(true); |
346 EXPECT_TRUE(backing); | 342 EXPECT_TRUE(backing); |
347 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID)); | 343 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Repaint::ID)); |
348 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching( | 344 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching( |
349 ViewMsg_PaintRect_ACK::ID)); | 345 ViewMsg_PaintRect_ACK::ID)); |
350 } | 346 } |
351 | 347 |
352 // Test that we don't paint when we're hidden, but we still send the ACK. Most | 348 // Test that we don't paint when we're hidden, but we still send the ACK. Most |
353 // of the rest of the painting is tested in the GetBackingStore* ones. | 349 // of the rest of the painting is tested in the GetBackingStore* ones. |
354 TEST_F(RenderWidgetHostTest, HiddenPaint) { | 350 TEST_F(RenderWidgetHostTest, HiddenPaint) { |
355 // Hide the widget, it should have sent out a message to the renderer. | 351 // Hide the widget, it should have sent out a message to the renderer. |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
408 TEST_F(RenderWidgetHostTest, IgnoreKeyEventsWeDidntSend) { | 404 TEST_F(RenderWidgetHostTest, IgnoreKeyEventsWeDidntSend) { |
409 // Send a simulated, unrequested key response. We should ignore this. | 405 // Send a simulated, unrequested key response. We should ignore this. |
410 scoped_ptr<IPC::Message> response( | 406 scoped_ptr<IPC::Message> response( |
411 new ViewHostMsg_HandleInputEvent_ACK(0)); | 407 new ViewHostMsg_HandleInputEvent_ACK(0)); |
412 response->WriteInt(WebInputEvent::KeyDown); | 408 response->WriteInt(WebInputEvent::KeyDown); |
413 response->WriteBool(false); | 409 response->WriteBool(false); |
414 host_->OnMessageReceived(*response); | 410 host_->OnMessageReceived(*response); |
415 | 411 |
416 EXPECT_FALSE(host_->unhandled_keyboard_event_called()); | 412 EXPECT_FALSE(host_->unhandled_keyboard_event_called()); |
417 } | 413 } |
OLD | NEW |