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

Side by Side Diff: content/browser/frame_host/render_widget_host_view_guest_unittest.cc

Issue 1169983006: Convert BrowserPlugin to render using cc::Surfaces. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add test. Created 5 years, 6 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 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_guest.h" 5 #include "content/browser/frame_host/render_widget_host_view_guest.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "cc/surfaces/surface.h"
10 #include "cc/surfaces/surface_factory.h"
11 #include "cc/surfaces/surface_manager.h"
12 #include "cc/surfaces/surface_sequence.h"
13 #include "content/browser/browser_plugin/browser_plugin_guest.h"
9 #include "content/browser/compositor/test/no_transport_image_transport_factory.h " 14 #include "content/browser/compositor/test/no_transport_image_transport_factory.h "
15 #include "content/browser/gpu/compositor_util.h"
10 #include "content/browser/renderer_host/render_widget_host_delegate.h" 16 #include "content/browser/renderer_host/render_widget_host_delegate.h"
11 #include "content/browser/renderer_host/render_widget_host_impl.h" 17 #include "content/browser/renderer_host/render_widget_host_impl.h"
12 #include "content/common/view_messages.h" 18 #include "content/common/view_messages.h"
19 #include "content/public/browser/browser_plugin_guest_delegate.h"
13 #include "content/public/browser/render_widget_host_view.h" 20 #include "content/public/browser/render_widget_host_view.h"
14 #include "content/public/test/mock_render_process_host.h" 21 #include "content/public/test/mock_render_process_host.h"
15 #include "content/public/test/test_browser_context.h" 22 #include "content/public/test/test_browser_context.h"
16 #include "content/test/test_render_view_host.h" 23 #include "content/test/test_render_view_host.h"
24 #include "content/test/test_web_contents.h"
17 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
18 26
19 namespace content { 27 namespace content {
20 namespace { 28 namespace {
21 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate { 29 class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
22 public: 30 public:
23 MockRenderWidgetHostDelegate() {} 31 MockRenderWidgetHostDelegate() {}
24 ~MockRenderWidgetHostDelegate() override {} 32 ~MockRenderWidgetHostDelegate() override {}
25 }; 33 };
26 34
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 } // namespace 83 } // namespace
76 84
77 TEST_F(RenderWidgetHostViewGuestTest, VisibilityTest) { 85 TEST_F(RenderWidgetHostViewGuestTest, VisibilityTest) {
78 view_->Show(); 86 view_->Show();
79 ASSERT_TRUE(view_->IsShowing()); 87 ASSERT_TRUE(view_->IsShowing());
80 88
81 view_->Hide(); 89 view_->Hide();
82 ASSERT_FALSE(view_->IsShowing()); 90 ASSERT_FALSE(view_->IsShowing());
83 } 91 }
84 92
93 class TestBrowserPluginGuest : public BrowserPluginGuest {
94 public:
95 TestBrowserPluginGuest(WebContentsImpl* web_contents,
96 BrowserPluginGuestDelegate* delegate):
97 BrowserPluginGuest(web_contents->HasOpener(), web_contents, delegate),
98 last_scale_factor_received_(0.f),
99 update_scale_factor_received_(0.f),
100 received_delegated_frame_(false) {}
101 ~TestBrowserPluginGuest() override {}
102
103 void UpdateGuestSizeIfNecessary(const gfx::Size& frame_size,
104 float scale_factor) override {
105 update_frame_size_received_= frame_size;
106 update_scale_factor_received_ = scale_factor;
107 }
108
109 void SwapCompositorFrame(uint32 output_surface_id,
kenrb 2015/06/12 21:02:47 This is probably copied and pasted, but this shoul
wjmaclean 2015/06/12 21:13:15 Done.
110 int host_process_id,
111 int host_routing_id,
112 scoped_ptr<cc::CompositorFrame> frame) override {
113 received_delegated_frame_ = true;
114 last_frame_size_received_ =
115 frame->delegated_frame_data->render_pass_list.back()
116 ->output_rect.size();
117 last_scale_factor_received_ = frame->metadata.device_scale_factor;
118 }
119
120 void SetChildFrameSurface(const cc::SurfaceId& surface_id,
121 const gfx::Size& frame_size,
122 float scale_factor,
123 const cc::SurfaceSequence& sequence) override {
124 last_surface_id_received_ = surface_id;
125 last_frame_size_received_ = frame_size;
126 last_scale_factor_received_ = scale_factor;
127 }
128
129 cc::SurfaceId last_surface_id_received_;
130 gfx::Size last_frame_size_received_;
131 gfx::Size update_frame_size_received_;
132 float last_scale_factor_received_;
133 float update_scale_factor_received_;
134
135 bool received_delegated_frame_;
136 };
137
138 // TODO(wjmaclean): we should restructure RenderWidgetHostViewChildFrameTest to
139 // look more like this one, and then this one could be derived from it. Also,
140 // include CreateDelegatedFrame as part of the test class so we don't have to
141 // repeat it here.
142 class RenderWidgetHostViewGuestSurfaceTest
143 : public RenderViewHostImplTestHarness {
144 public:
145 RenderWidgetHostViewGuestSurfaceTest()
146 : widget_host_(nullptr), view_(nullptr) {}
147
148 void SetUp() override {
149 RenderViewHostImplTestHarness::SetUp();
150 #if !defined(OS_ANDROID)
151 ImageTransportFactory::InitializeForUnitTests(
152 scoped_ptr<ImageTransportFactory>(
153 new NoTransportImageTransportFactory));
154 #endif
155 // We don't own the BPG, the WebContents does.
156 browser_plugin_guest_ = new TestBrowserPluginGuest(
157 contents(), &browser_plugin_guest_delegate_);
158
159 widget_host_ = new RenderWidgetHostImpl(&delegate_, rvh()->GetProcess(),
160 MSG_ROUTING_NONE, false);
161 view_ = new RenderWidgetHostViewGuest(
162 widget_host_, browser_plugin_guest_,
163 (new TestRenderWidgetHostView(widget_host_))->GetWeakPtr());
164 }
165
166 void TearDown() override {
167 // TODO(wjmaclean): This next line doesn't follow the usual
168 // "view_->Destroy();" pattern, but that causes a DCHECK to fail during the
169 // tear-down of the view's cc::SurfaceManager (via
170 // cc::SurfaceFactory::Destroy()).
171 // This should be fixed, though doesn't seem to affect the test.
172 delete view_;
173 delete widget_host_;
174
175 #if !defined(OS_ANDROID)
176 ImageTransportFactory::Terminate();
177 #endif
178 RenderViewHostImplTestHarness::TearDown();
179 }
180
181 cc::SurfaceId surface_id() {
182 DCHECK(view_);
183 return static_cast<RenderWidgetHostViewChildFrame*>(view_)->surface_id_;
184 }
185
186 protected:
187 MockRenderWidgetHostDelegate delegate_;
188 BrowserPluginGuestDelegate browser_plugin_guest_delegate_;
189 TestBrowserPluginGuest* browser_plugin_guest_;
190
191 // Tests should set these to NULL if they've already triggered their
192 // destruction.
193 RenderWidgetHostImpl* widget_host_;
194 RenderWidgetHostViewGuest* view_;
195
196 private:
197 DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewGuestSurfaceTest);
198 };
199
200 namespace {
201 scoped_ptr<cc::CompositorFrame> CreateDelegatedFrame(float scale_factor,
202 gfx::Size size,
203 const gfx::Rect& damage) {
204 scoped_ptr<cc::CompositorFrame> frame(new cc::CompositorFrame);
205 frame->metadata.device_scale_factor = scale_factor;
206 frame->delegated_frame_data.reset(new cc::DelegatedFrameData);
207
208 scoped_ptr<cc::RenderPass> pass = cc::RenderPass::Create();
209 pass->SetNew(cc::RenderPassId(1, 1), gfx::Rect(size), damage,
210 gfx::Transform());
211 frame->delegated_frame_data->render_pass_list.push_back(pass.Pass());
212 return frame;
213 }
214 } // anonymous namespace
215
216 TEST_F(RenderWidgetHostViewGuestSurfaceTest, TestGuestSurface) {
217 gfx::Size view_size(100, 100);
218 gfx::Rect view_rect(view_size);
219 float scale_factor = 1.f;
220
221 ASSERT_TRUE(browser_plugin_guest_);
222
223 view_->SetSize(view_size);
224 view_->Show();
225
226 view_->OnSwapCompositorFrame(
227 0, CreateDelegatedFrame(scale_factor, view_size, view_rect));
228
229 EXPECT_EQ(view_size, browser_plugin_guest_->update_frame_size_received_);
230 EXPECT_EQ(scale_factor,
231 browser_plugin_guest_->update_scale_factor_received_);
232
233 if (UseSurfacesEnabled()) {
234 cc::SurfaceId id = surface_id();
235 if (!id.is_null()) {
236 #if !defined(OS_ANDROID)
237 ImageTransportFactory* factory = ImageTransportFactory::GetInstance();
238 cc::SurfaceManager* manager = factory->GetSurfaceManager();
239 cc::Surface* surface = manager->GetSurfaceForId(id);
240 EXPECT_TRUE(surface);
241 // There should be a SurfaceSequence created by the RWHVGuest.
242 EXPECT_EQ(1u, surface->GetDestructionDependencyCount());
243 #endif
244 // Surface ID should have been passed to BrowserPluginGuest to
245 // be sent to the embedding renderer.
246 EXPECT_EQ(id, browser_plugin_guest_->last_surface_id_received_);
247 EXPECT_EQ(view_size, browser_plugin_guest_->last_frame_size_received_);
248 EXPECT_EQ(scale_factor,
249 browser_plugin_guest_->last_scale_factor_received_);
250 }
251 } else {
252 EXPECT_TRUE(browser_plugin_guest_->received_delegated_frame_);
253 EXPECT_EQ(view_size, browser_plugin_guest_->last_frame_size_received_);
254 EXPECT_EQ(scale_factor, browser_plugin_guest_->last_scale_factor_received_);
255 }
256 }
257
85 } // namespace content 258 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_widget_host_view_guest.cc ('k') | content/common/browser_plugin/browser_plugin_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698