OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "content/browser/frame_host/render_widget_host_view_child_frame.h" | 5 #include "content/browser/frame_host/render_widget_host_view_child_frame.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 public: | 46 public: |
47 MockRenderWidgetHostDelegate() {} | 47 MockRenderWidgetHostDelegate() {} |
48 ~MockRenderWidgetHostDelegate() override {} | 48 ~MockRenderWidgetHostDelegate() override {} |
49 private: | 49 private: |
50 void Cut() override {} | 50 void Cut() override {} |
51 void Copy() override {} | 51 void Copy() override {} |
52 void Paste() override {} | 52 void Paste() override {} |
53 void SelectAll() override {} | 53 void SelectAll() override {} |
54 }; | 54 }; |
55 | 55 |
| 56 } // namespace |
| 57 |
56 class MockCrossProcessFrameConnector : public CrossProcessFrameConnector { | 58 class MockCrossProcessFrameConnector : public CrossProcessFrameConnector { |
57 public: | 59 public: |
58 MockCrossProcessFrameConnector() : CrossProcessFrameConnector(nullptr) {} | 60 MockCrossProcessFrameConnector() : CrossProcessFrameConnector(nullptr) {} |
59 ~MockCrossProcessFrameConnector() override {} | 61 ~MockCrossProcessFrameConnector() override {} |
60 | 62 |
61 void SetChildFrameSurface(const cc::SurfaceInfo& surface_info, | 63 void SetChildFrameSurface(const cc::SurfaceInfo& surface_info, |
62 const cc::SurfaceSequence& sequence) override { | 64 const cc::SurfaceSequence& sequence) override { |
63 last_surface_info_ = surface_info; | 65 last_surface_info_ = surface_info; |
64 } | 66 } |
65 | 67 |
| 68 void SetViewportIntersection(const gfx::Rect& intersection) { |
| 69 viewport_intersection_rect_ = intersection; |
| 70 } |
| 71 |
66 RenderWidgetHostViewBase* GetParentRenderWidgetHostView() override { | 72 RenderWidgetHostViewBase* GetParentRenderWidgetHostView() override { |
67 return nullptr; | 73 return nullptr; |
68 } | 74 } |
69 | 75 |
70 cc::SurfaceInfo last_surface_info_; | 76 cc::SurfaceInfo last_surface_info_; |
71 }; | 77 }; |
72 | 78 |
73 } // namespace | |
74 | |
75 class RenderWidgetHostViewChildFrameTest : public testing::Test { | 79 class RenderWidgetHostViewChildFrameTest : public testing::Test { |
76 public: | 80 public: |
77 RenderWidgetHostViewChildFrameTest() | 81 RenderWidgetHostViewChildFrameTest() |
78 : scoped_task_environment_( | 82 : scoped_task_environment_( |
79 base::test::ScopedTaskEnvironment::MainThreadType::UI) {} | 83 base::test::ScopedTaskEnvironment::MainThreadType::UI) {} |
80 | 84 |
81 void SetUp() override { | 85 void SetUp() override { |
82 browser_context_.reset(new TestBrowserContext); | 86 browser_context_.reset(new TestBrowserContext); |
83 | 87 |
84 // ImageTransportFactory doesn't exist on Android. | 88 // ImageTransportFactory doesn't exist on Android. |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 | 241 |
238 // Submit another frame with the same local surface id. The same id should be | 242 // Submit another frame with the same local surface id. The same id should be |
239 // usable. | 243 // usable. |
240 view_->SubmitCompositorFrame( | 244 view_->SubmitCompositorFrame( |
241 kArbitraryLocalSurfaceId, | 245 kArbitraryLocalSurfaceId, |
242 CreateDelegatedFrame(scale_factor, view_size, view_rect)); | 246 CreateDelegatedFrame(scale_factor, view_size, view_rect)); |
243 EXPECT_EQ(kArbitraryLocalSurfaceId, GetLocalSurfaceId()); | 247 EXPECT_EQ(kArbitraryLocalSurfaceId, GetLocalSurfaceId()); |
244 EXPECT_TRUE(view_->has_frame()); | 248 EXPECT_TRUE(view_->has_frame()); |
245 } | 249 } |
246 | 250 |
| 251 // Tests that the viewport intersection rect is dispatched to the RenderWidget |
| 252 // whenever screen rects are updated. |
| 253 TEST_F(RenderWidgetHostViewChildFrameTest, ViewportIntersectionUpdated) { |
| 254 gfx::Rect intersection_rect(5, 5, 100, 80); |
| 255 test_frame_connector_->SetViewportIntersection(intersection_rect); |
| 256 |
| 257 MockRenderProcessHost* process = |
| 258 static_cast<MockRenderProcessHost*>(widget_host_->GetProcess()); |
| 259 process->Init(); |
| 260 |
| 261 widget_host_->Init(); |
| 262 |
| 263 const IPC::Message* intersection_update = |
| 264 process->sink().GetUniqueMessageMatching( |
| 265 ViewMsg_SetViewportIntersection::ID); |
| 266 ASSERT_TRUE(intersection_update); |
| 267 std::tuple<gfx::Rect> sent_rect; |
| 268 ViewMsg_SetViewportIntersection::Read(intersection_update, &sent_rect); |
| 269 EXPECT_EQ(intersection_rect, std::get<0>(sent_rect)); |
| 270 } |
| 271 |
247 } // namespace content | 272 } // namespace content |
OLD | NEW |