| 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/keyboard_codes.h" | 5 #include "app/keyboard_codes.h" |
| 6 #include "base/basictypes.h" | 6 #include "base/basictypes.h" |
| 7 #include "base/scoped_ptr.h" | 7 #include "base/scoped_ptr.h" |
| 8 #include "base/shared_memory.h" | 8 #include "base/shared_memory.h" |
| 9 #include "base/timer.h" | 9 #include "base/timer.h" |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 345 ASSERT_FALSE(process_->sink().GetFirstMessageMatching(ViewMsg_Resize::ID)); | 345 ASSERT_FALSE(process_->sink().GetFirstMessageMatching(ViewMsg_Resize::ID)); |
| 346 | 346 |
| 347 // Now clearing the bounds should send out a notification but we shouldn't | 347 // Now clearing the bounds should send out a notification but we shouldn't |
| 348 // expect a resize ack (since the renderer won't ack empty sizes). The message | 348 // expect a resize ack (since the renderer won't ack empty sizes). The message |
| 349 // should contain the new size (0x0) and not the previous one that we skipped | 349 // should contain the new size (0x0) and not the previous one that we skipped |
| 350 process_->sink().ClearMessages(); | 350 process_->sink().ClearMessages(); |
| 351 view_->set_bounds(gfx::Rect()); | 351 view_->set_bounds(gfx::Rect()); |
| 352 host_->WasResized(); | 352 host_->WasResized(); |
| 353 EXPECT_FALSE(host_->resize_ack_pending_); | 353 EXPECT_FALSE(host_->resize_ack_pending_); |
| 354 EXPECT_EQ(gfx::Size(), host_->in_flight_size_); | 354 EXPECT_EQ(gfx::Size(), host_->in_flight_size_); |
| 355 EXPECT_EQ(gfx::Size(), host_->current_size_); |
| 355 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); | 356 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); |
| 356 | 357 |
| 357 // Send a rect that has no area but has either width or height set. | 358 // Send a rect that has no area but has either width or height set. |
| 359 // since we do not expect ACK, current_size_ should be updated right away. |
| 358 process_->sink().ClearMessages(); | 360 process_->sink().ClearMessages(); |
| 359 view_->set_bounds(gfx::Rect(0, 0, 0, 30)); | 361 view_->set_bounds(gfx::Rect(0, 0, 0, 30)); |
| 360 host_->WasResized(); | 362 host_->WasResized(); |
| 361 EXPECT_FALSE(host_->resize_ack_pending_); | 363 EXPECT_FALSE(host_->resize_ack_pending_); |
| 362 EXPECT_EQ(gfx::Size(0, 30), host_->in_flight_size_); | 364 EXPECT_EQ(gfx::Size(), host_->in_flight_size_); |
| 365 EXPECT_EQ(gfx::Size(0, 30), host_->current_size_); |
| 363 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); | 366 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); |
| 364 | 367 |
| 365 // Set the same size again. It should not be sent again. | 368 // Set the same size again. It should not be sent again. |
| 366 process_->sink().ClearMessages(); | 369 process_->sink().ClearMessages(); |
| 367 host_->WasResized(); | 370 host_->WasResized(); |
| 368 EXPECT_FALSE(host_->resize_ack_pending_); | 371 EXPECT_FALSE(host_->resize_ack_pending_); |
| 369 EXPECT_EQ(gfx::Size(0, 30), host_->in_flight_size_); | 372 EXPECT_EQ(gfx::Size(), host_->in_flight_size_); |
| 373 EXPECT_EQ(gfx::Size(0, 30), host_->current_size_); |
| 370 EXPECT_FALSE(process_->sink().GetFirstMessageMatching(ViewMsg_Resize::ID)); | 374 EXPECT_FALSE(process_->sink().GetFirstMessageMatching(ViewMsg_Resize::ID)); |
| 371 | 375 |
| 372 // A different size should be sent again, however. | 376 // A different size should be sent again, however. |
| 373 view_->set_bounds(gfx::Rect(0, 0, 0, 31)); | 377 view_->set_bounds(gfx::Rect(0, 0, 0, 31)); |
| 374 host_->WasResized(); | 378 host_->WasResized(); |
| 375 EXPECT_FALSE(host_->resize_ack_pending_); | 379 EXPECT_FALSE(host_->resize_ack_pending_); |
| 376 EXPECT_EQ(gfx::Size(0, 31), host_->in_flight_size_); | 380 EXPECT_EQ(gfx::Size(), host_->in_flight_size_); |
| 381 EXPECT_EQ(gfx::Size(0, 31), host_->current_size_); |
| 377 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); | 382 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); |
| 378 } | 383 } |
| 379 | 384 |
| 380 // Test for crbug.com/25097. If a renderer crashes between a resize and the | 385 // Test for crbug.com/25097. If a renderer crashes between a resize and the |
| 381 // corresponding update message, we must be sure to clear the resize ack logic. | 386 // corresponding update message, we must be sure to clear the resize ack logic. |
| 382 TEST_F(RenderWidgetHostTest, ResizeThenCrash) { | 387 TEST_F(RenderWidgetHostTest, ResizeThenCrash) { |
| 383 // Setting the bounds to a "real" rect should send out the notification. | 388 // Setting the bounds to a "real" rect should send out the notification. |
| 384 gfx::Rect original_size(0, 0, 100, 100); | 389 gfx::Rect original_size(0, 0, 100, 100); |
| 385 view_->set_bounds(original_size); | 390 view_->set_bounds(original_size); |
| 386 host_->WasResized(); | 391 host_->WasResized(); |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 699 // Start it again to ensure it still works. | 704 // Start it again to ensure it still works. |
| 700 EXPECT_FALSE(host_->unresponsive_timer_fired()); | 705 EXPECT_FALSE(host_->unresponsive_timer_fired()); |
| 701 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); | 706 host_->StartHangMonitorTimeout(TimeDelta::FromMilliseconds(10)); |
| 702 | 707 |
| 703 // Wait long enough for first timeout and see if it fired. | 708 // Wait long enough for first timeout and see if it fired. |
| 704 MessageLoop::current()->PostDelayedTask(FROM_HERE, | 709 MessageLoop::current()->PostDelayedTask(FROM_HERE, |
| 705 new MessageLoop::QuitTask(), 10); | 710 new MessageLoop::QuitTask(), 10); |
| 706 MessageLoop::current()->Run(); | 711 MessageLoop::current()->Run(); |
| 707 EXPECT_TRUE(host_->unresponsive_timer_fired()); | 712 EXPECT_TRUE(host_->unresponsive_timer_fired()); |
| 708 } | 713 } |
| OLD | NEW |