Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(48)

Side by Side Diff: content/browser/renderer_host/render_widget_host_unittest.cc

Issue 1078123002: Send resize event when the screen info changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: simpler Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/shared_memory.h" 9 #include "base/memory/shared_memory.h"
10 #include "base/timer/timer.h" 10 #include "base/timer/timer.h"
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 int gesture_event_type() const { return gesture_event_type_; } 238 int gesture_event_type() const { return gesture_event_type_; }
239 InputEventAckState ack_result() const { return ack_result_; } 239 InputEventAckState ack_result() const { return ack_result_; }
240 240
241 void SetMockPhysicalBackingSize(const gfx::Size& mock_physical_backing_size) { 241 void SetMockPhysicalBackingSize(const gfx::Size& mock_physical_backing_size) {
242 use_fake_physical_backing_size_ = true; 242 use_fake_physical_backing_size_ = true;
243 mock_physical_backing_size_ = mock_physical_backing_size; 243 mock_physical_backing_size_ = mock_physical_backing_size;
244 } 244 }
245 void ClearMockPhysicalBackingSize() { 245 void ClearMockPhysicalBackingSize() {
246 use_fake_physical_backing_size_ = false; 246 use_fake_physical_backing_size_ = false;
247 } 247 }
248 void SetScreenInfo(const blink::WebScreenInfo& screen_info) {
249 screen_info_ = screen_info;
250 }
248 251
249 // RenderWidgetHostView override. 252 // RenderWidgetHostView override.
250 gfx::Rect GetViewBounds() const override { return bounds_; } 253 gfx::Rect GetViewBounds() const override { return bounds_; }
251 void ProcessAckedTouchEvent(const TouchEventWithLatencyInfo& touch, 254 void ProcessAckedTouchEvent(const TouchEventWithLatencyInfo& touch,
252 InputEventAckState ack_result) override { 255 InputEventAckState ack_result) override {
253 acked_event_ = touch.event; 256 acked_event_ = touch.event;
254 ++acked_event_count_; 257 ++acked_event_count_;
255 } 258 }
256 void WheelEventAck(const WebMouseWheelEvent& event, 259 void WheelEventAck(const WebMouseWheelEvent& event,
257 InputEventAckState ack_result) override { 260 InputEventAckState ack_result) override {
258 if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED) 261 if (ack_result == INPUT_EVENT_ACK_STATE_CONSUMED)
259 return; 262 return;
260 unhandled_wheel_event_count_++; 263 unhandled_wheel_event_count_++;
261 unhandled_wheel_event_ = event; 264 unhandled_wheel_event_ = event;
262 } 265 }
263 void GestureEventAck(const WebGestureEvent& event, 266 void GestureEventAck(const WebGestureEvent& event,
264 InputEventAckState ack_result) override { 267 InputEventAckState ack_result) override {
265 gesture_event_type_ = event.type; 268 gesture_event_type_ = event.type;
266 ack_result_ = ack_result; 269 ack_result_ = ack_result;
267 } 270 }
268 gfx::Size GetPhysicalBackingSize() const override { 271 gfx::Size GetPhysicalBackingSize() const override {
269 if (use_fake_physical_backing_size_) 272 if (use_fake_physical_backing_size_)
270 return mock_physical_backing_size_; 273 return mock_physical_backing_size_;
271 return TestRenderWidgetHostView::GetPhysicalBackingSize(); 274 return TestRenderWidgetHostView::GetPhysicalBackingSize();
272 } 275 }
276 void GetScreenInfo(blink::WebScreenInfo* screen_info) override {
277 *screen_info = screen_info_;
278 }
273 #if defined(USE_AURA) 279 #if defined(USE_AURA)
274 ~TestView() override { 280 ~TestView() override {
275 // Simulate the mouse exit event dispatched when an aura window is 281 // Simulate the mouse exit event dispatched when an aura window is
276 // destroyed. (MakeWebMouseEventFromAuraEvent translates ET_MOUSE_EXITED 282 // destroyed. (MakeWebMouseEventFromAuraEvent translates ET_MOUSE_EXITED
277 // into WebInputEvent::MouseMove.) 283 // into WebInputEvent::MouseMove.)
278 rwh_->input_router()->SendMouseEvent( 284 rwh_->input_router()->SendMouseEvent(
279 MouseEventWithLatencyInfo( 285 MouseEventWithLatencyInfo(
280 SyntheticWebMouseEventBuilder::Build(WebInputEvent::MouseMove), 286 SyntheticWebMouseEventBuilder::Build(WebInputEvent::MouseMove),
281 ui::LatencyInfo())); 287 ui::LatencyInfo()));
282 } 288 }
283 #endif 289 #endif
284 290
285 protected: 291 protected:
286 WebMouseWheelEvent unhandled_wheel_event_; 292 WebMouseWheelEvent unhandled_wheel_event_;
287 int unhandled_wheel_event_count_; 293 int unhandled_wheel_event_count_;
288 WebTouchEvent acked_event_; 294 WebTouchEvent acked_event_;
289 int acked_event_count_; 295 int acked_event_count_;
290 int gesture_event_type_; 296 int gesture_event_type_;
291 gfx::Rect bounds_; 297 gfx::Rect bounds_;
292 bool use_fake_physical_backing_size_; 298 bool use_fake_physical_backing_size_;
293 gfx::Size mock_physical_backing_size_; 299 gfx::Size mock_physical_backing_size_;
294 InputEventAckState ack_result_; 300 InputEventAckState ack_result_;
301 blink::WebScreenInfo screen_info_;
295 302
296 DISALLOW_COPY_AND_ASSIGN(TestView); 303 DISALLOW_COPY_AND_ASSIGN(TestView);
297 }; 304 };
298 305
299 // MockRenderWidgetHostDelegate -------------------------------------------- 306 // MockRenderWidgetHostDelegate --------------------------------------------
300 307
301 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { 308 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
302 public: 309 public:
303 MockRenderWidgetHostDelegate() 310 MockRenderWidgetHostDelegate()
304 : prehandle_keyboard_event_(false), 311 : prehandle_keyboard_event_(false),
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 class RenderWidgetHostWithSourceTest 604 class RenderWidgetHostWithSourceTest
598 : public RenderWidgetHostTest, 605 : public RenderWidgetHostTest,
599 public testing::WithParamInterface<WebGestureDevice> {}; 606 public testing::WithParamInterface<WebGestureDevice> {};
600 #endif // GTEST_HAS_PARAM_TEST 607 #endif // GTEST_HAS_PARAM_TEST
601 608
602 } // namespace 609 } // namespace
603 610
604 // ----------------------------------------------------------------------------- 611 // -----------------------------------------------------------------------------
605 612
606 TEST_F(RenderWidgetHostTest, Resize) { 613 TEST_F(RenderWidgetHostTest, Resize) {
607 // The initial bounds is the empty rect, and the screen info hasn't been sent 614 // The initial bounds is the empty rect, so setting it to the same thing
608 // yet, so setting it to the same thing shouldn't send the resize message. 615 // shouldn't send the resize message.
609 view_->set_bounds(gfx::Rect()); 616 view_->set_bounds(gfx::Rect());
610 host_->WasResized(); 617 host_->WasResized();
611 EXPECT_FALSE(host_->resize_ack_pending_); 618 EXPECT_FALSE(host_->resize_ack_pending_);
612 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); 619 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID));
613 620
614 // No resize ack if the physical backing gets set, but the view bounds are 621 // No resize ack if the physical backing gets set, but the view bounds are
615 // zero. 622 // zero.
616 view_->SetMockPhysicalBackingSize(gfx::Size(200, 200)); 623 view_->SetMockPhysicalBackingSize(gfx::Size(200, 200));
617 host_->WasResized(); 624 host_->WasResized();
618 EXPECT_FALSE(host_->resize_ack_pending_); 625 EXPECT_FALSE(host_->resize_ack_pending_);
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 EXPECT_FALSE(process_->sink().GetFirstMessageMatching(ViewMsg_Resize::ID)); 719 EXPECT_FALSE(process_->sink().GetFirstMessageMatching(ViewMsg_Resize::ID));
713 720
714 // A different size should be sent again, however. 721 // A different size should be sent again, however.
715 view_->set_bounds(gfx::Rect(0, 0, 0, 31)); 722 view_->set_bounds(gfx::Rect(0, 0, 0, 31));
716 host_->WasResized(); 723 host_->WasResized();
717 EXPECT_FALSE(host_->resize_ack_pending_); 724 EXPECT_FALSE(host_->resize_ack_pending_);
718 EXPECT_EQ(gfx::Size(0, 31), host_->old_resize_params_->new_size); 725 EXPECT_EQ(gfx::Size(0, 31), host_->old_resize_params_->new_size);
719 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); 726 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID));
720 } 727 }
721 728
729 // Test that a resize event is sent if WasResized() is called after a
730 // WebScreenInfo change.
731 TEST_F(RenderWidgetHostTest, ResizeScreenInfo) {
732 blink::WebScreenInfo screen_info;
733 screen_info.deviceScaleFactor = 1.f;
734 screen_info.rect = blink::WebRect(0, 0, 800, 600);
735 screen_info.availableRect = blink::WebRect(0, 0, 800, 600);
736 screen_info.orientationAngle = 0;
737 screen_info.orientationType = blink::WebScreenOrientationPortraitPrimary;
738
739 view_->SetScreenInfo(screen_info);
740 host_->WasResized();
741 EXPECT_FALSE(host_->resize_ack_pending_);
742 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID));
743 process_->sink().ClearMessages();
744
745 screen_info.orientationAngle = 180;
746 screen_info.orientationType = blink::WebScreenOrientationLandscapePrimary;
747
748 view_->SetScreenInfo(screen_info);
749 host_->WasResized();
750 EXPECT_FALSE(host_->resize_ack_pending_);
751 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID));
752 process_->sink().ClearMessages();
753
754 screen_info.deviceScaleFactor = 2.f;
755
756 view_->SetScreenInfo(screen_info);
757 host_->WasResized();
758 EXPECT_FALSE(host_->resize_ack_pending_);
759 EXPECT_TRUE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID));
760 process_->sink().ClearMessages();
761
762 // No screen change.
763 view_->SetScreenInfo(screen_info);
764 host_->WasResized();
765 EXPECT_FALSE(host_->resize_ack_pending_);
766 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID));
767 }
768
722 // Test for crbug.com/25097. If a renderer crashes between a resize and the 769 // Test for crbug.com/25097. If a renderer crashes between a resize and the
723 // corresponding update message, we must be sure to clear the resize ack logic. 770 // corresponding update message, we must be sure to clear the resize ack logic.
724 TEST_F(RenderWidgetHostTest, ResizeThenCrash) { 771 TEST_F(RenderWidgetHostTest, ResizeThenCrash) {
725 // Clear the first Resize message that carried screen info. 772 // Clear the first Resize message that carried screen info.
726 process_->sink().ClearMessages(); 773 process_->sink().ClearMessages();
727 774
728 // Setting the bounds to a "real" rect should send out the notification. 775 // Setting the bounds to a "real" rect should send out the notification.
729 gfx::Rect original_size(0, 0, 100, 100); 776 gfx::Rect original_size(0, 0, 100, 100);
730 view_->set_bounds(original_size); 777 view_->set_bounds(original_size);
731 host_->WasResized(); 778 host_->WasResized();
(...skipping 761 matching lines...) Expand 10 before | Expand all | Expand 10 after
1493 // Having an initial size set means that the size information had been sent 1540 // Having an initial size set means that the size information had been sent
1494 // with the reqiest to new up the RenderView and so subsequent WasResized 1541 // with the reqiest to new up the RenderView and so subsequent WasResized
1495 // calls should not result in new IPC (unless the size has actually changed). 1542 // calls should not result in new IPC (unless the size has actually changed).
1496 host_->WasResized(); 1543 host_->WasResized();
1497 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID)); 1544 EXPECT_FALSE(process_->sink().GetUniqueMessageMatching(ViewMsg_Resize::ID));
1498 EXPECT_EQ(initial_size_, host_->old_resize_params_->new_size); 1545 EXPECT_EQ(initial_size_, host_->old_resize_params_->new_size);
1499 EXPECT_TRUE(host_->resize_ack_pending_); 1546 EXPECT_TRUE(host_->resize_ack_pending_);
1500 } 1547 }
1501 1548
1502 } // namespace content 1549 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698