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

Side by Side Diff: content/test/layouttest_support.cc

Issue 2036873002: Making EventSender talk to the right WebWidget (for OOPIF support). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Proper scaling and lifetime management of events. Created 4 years, 2 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 "content/public/test/layouttest_support.h" 5 #include "content/public/test/layouttest_support.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 22 matching lines...) Expand all
33 #include "content/renderer/layout_test_dependencies.h" 33 #include "content/renderer/layout_test_dependencies.h"
34 #include "content/renderer/render_frame_impl.h" 34 #include "content/renderer/render_frame_impl.h"
35 #include "content/renderer/render_thread_impl.h" 35 #include "content/renderer/render_thread_impl.h"
36 #include "content/renderer/render_view_impl.h" 36 #include "content/renderer/render_view_impl.h"
37 #include "content/renderer/render_widget.h" 37 #include "content/renderer/render_widget.h"
38 #include "content/renderer/renderer_blink_platform_impl.h" 38 #include "content/renderer/renderer_blink_platform_impl.h"
39 #include "content/shell/common/shell_switches.h" 39 #include "content/shell/common/shell_switches.h"
40 #include "gpu/ipc/service/image_transport_surface.h" 40 #include "gpu/ipc/service/image_transport_surface.h"
41 #include "third_party/WebKit/public/platform/WebFloatRect.h" 41 #include "third_party/WebKit/public/platform/WebFloatRect.h"
42 #include "third_party/WebKit/public/platform/WebGamepads.h" 42 #include "third_party/WebKit/public/platform/WebGamepads.h"
43 #include "third_party/WebKit/public/platform/WebInputEvent.h"
44 #include "third_party/WebKit/public/platform/WebRect.h"
43 #include "third_party/WebKit/public/platform/modules/device_orientation/WebDevic eMotionData.h" 45 #include "third_party/WebKit/public/platform/modules/device_orientation/WebDevic eMotionData.h"
44 #include "third_party/WebKit/public/platform/modules/device_orientation/WebDevic eOrientationData.h" 46 #include "third_party/WebKit/public/platform/modules/device_orientation/WebDevic eOrientationData.h"
45 #include "third_party/WebKit/public/platform/scheduler/test/renderer_scheduler_t est_support.h" 47 #include "third_party/WebKit/public/platform/scheduler/test/renderer_scheduler_t est_support.h"
46 #include "third_party/WebKit/public/web/WebHistoryItem.h" 48 #include "third_party/WebKit/public/web/WebHistoryItem.h"
47 #include "third_party/WebKit/public/web/WebView.h" 49 #include "third_party/WebKit/public/web/WebView.h"
50 #include "ui/events/blink/blink_event_util.h"
48 #include "ui/gfx/icc_profile.h" 51 #include "ui/gfx/icc_profile.h"
49 52
50 #if defined(OS_MACOSX) 53 #if defined(OS_MACOSX)
51 #include "content/browser/frame_host/popup_menu_helper_mac.h" 54 #include "content/browser/frame_host/popup_menu_helper_mac.h"
52 #elif defined(OS_WIN) 55 #elif defined(OS_WIN)
53 #include "content/child/font_warmup_win.h" 56 #include "content/child/font_warmup_win.h"
54 #include "third_party/WebKit/public/web/win/WebFontRendering.h" 57 #include "third_party/WebKit/public/web/win/WebFontRendering.h"
55 #include "third_party/skia/include/ports/SkFontMgr.h" 58 #include "third_party/skia/include/ports/SkFontMgr.h"
56 #include "third_party/skia/include/ports/SkTypeface_win.h" 59 #include "third_party/skia/include/ports/SkTypeface_win.h"
57 #include "ui/gfx/win/direct_write.h" 60 #include "ui/gfx/win/direct_write.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 129
127 RenderFrameImpl* CreateWebFrameTestProxy( 130 RenderFrameImpl* CreateWebFrameTestProxy(
128 const RenderFrameImpl::CreateParams& params) { 131 const RenderFrameImpl::CreateParams& params) {
129 WebFrameTestProxyType* render_frame_proxy = new WebFrameTestProxyType(params); 132 WebFrameTestProxyType* render_frame_proxy = new WebFrameTestProxyType(params);
130 if (g_frame_test_proxy_callback == 0) 133 if (g_frame_test_proxy_callback == 0)
131 return render_frame_proxy; 134 return render_frame_proxy;
132 g_frame_test_proxy_callback.Get().Run(render_frame_proxy, render_frame_proxy); 135 g_frame_test_proxy_callback.Get().Run(render_frame_proxy, render_frame_proxy);
133 return render_frame_proxy; 136 return render_frame_proxy;
134 } 137 }
135 138
139 float GetWindowToViewportScale(RenderWidget* render_widget) {
140 blink::WebFloatRect rect(0, 0, 1.0f, 0.0);
141 render_widget->convertWindowToViewport(&rect);
142 return rect.width;
143 }
144
136 #if defined(OS_WIN) 145 #if defined(OS_WIN)
137 // DirectWrite only has access to %WINDIR%\Fonts by default. For developer 146 // DirectWrite only has access to %WINDIR%\Fonts by default. For developer
138 // side-loading, support kRegisterFontFiles to allow access to additional fonts. 147 // side-loading, support kRegisterFontFiles to allow access to additional fonts.
139 void RegisterSideloadedTypefaces(SkFontMgr* fontmgr) { 148 void RegisterSideloadedTypefaces(SkFontMgr* fontmgr) {
140 std::vector<std::string> files = switches::GetSideloadFontFiles(); 149 std::vector<std::string> files = switches::GetSideloadFontFiles();
141 for (std::vector<std::string>::const_iterator i(files.begin()); 150 for (std::vector<std::string>::const_iterator i(files.begin());
142 i != files.end(); 151 i != files.end();
143 ++i) { 152 ++i) {
144 SkTypeface* typeface = fontmgr->createFromFile(i->c_str()); 153 SkTypeface* typeface = fontmgr->createFromFile(i->c_str());
145 blink::WebFontRendering::addSideloadedFontForTesting(typeface); 154 blink::WebFontRendering::addSideloadedFontForTesting(typeface);
(...skipping 10 matching lines...) Expand all
156 return static_cast<test_runner::WebViewTestProxyBase*>(render_view_proxy); 165 return static_cast<test_runner::WebViewTestProxyBase*>(render_view_proxy);
157 } 166 }
158 167
159 test_runner::WebFrameTestProxyBase* GetWebFrameTestProxyBase( 168 test_runner::WebFrameTestProxyBase* GetWebFrameTestProxyBase(
160 RenderFrame* render_frame) { 169 RenderFrame* render_frame) {
161 WebFrameTestProxyType* render_frame_proxy = 170 WebFrameTestProxyType* render_frame_proxy =
162 static_cast<WebFrameTestProxyType*>(render_frame); 171 static_cast<WebFrameTestProxyType*>(render_frame);
163 return static_cast<test_runner::WebFrameTestProxyBase*>(render_frame_proxy); 172 return static_cast<test_runner::WebFrameTestProxyBase*>(render_frame_proxy);
164 } 173 }
165 174
175 test_runner::WebWidgetTestProxyBase* GetWebWidgetTestProxyBase(
176 blink::WebLocalFrame* frame) {
177 DCHECK(frame);
178 RenderFrame* local_root = RenderFrame::FromWebFrame(frame->localRoot());
179 DCHECK(local_root);
180 if (local_root->IsMainFrame()) {
181 test_runner::WebViewTestProxyBase* web_view_test_proxy_base =
182 GetWebViewTestProxyBase(local_root->GetRenderView());
183 auto* web_widget_test_proxy_base =
184 static_cast<test_runner::WebWidgetTestProxyBase*>(
185 web_view_test_proxy_base);
186 DCHECK_EQ(test_runner::WebWidgetTestProxyBase::Subtype::WebViewTestProxy,
187 web_widget_test_proxy_base->subtype());
188 return web_widget_test_proxy_base;
189 } else {
190 RenderWidget* render_widget =
191 static_cast<RenderFrameImpl*>(local_root)->GetRenderWidget();
192 DCHECK(render_widget);
193 WebWidgetTestProxyType* render_widget_proxy =
194 static_cast<WebWidgetTestProxyType*>(render_widget);
195 auto* web_widget_test_proxy_base =
196 static_cast<test_runner::WebWidgetTestProxyBase*>(render_widget_proxy);
197 DCHECK_EQ(test_runner::WebWidgetTestProxyBase::Subtype::WebWidgetTestProxy,
198 web_widget_test_proxy_base->subtype());
199 return web_widget_test_proxy_base;
200 }
201 }
202
203 RenderWidget* GetRenderWidget(
204 test_runner::WebWidgetTestProxyBase* web_widget_test_proxy_base) {
205 DCHECK(web_widget_test_proxy_base);
206
207 switch (web_widget_test_proxy_base->subtype()) {
lfg 2016/09/29 22:12:52 I'm not totally sure, but I think you could get ri
Łukasz Anforowicz 2016/09/29 23:42:36 Thank you for the suggestion - things look much be
208 case test_runner::WebWidgetTestProxyBase::Subtype::WebViewTestProxy: {
209 WebViewTestProxyType* render_view_proxy =
210 static_cast<WebViewTestProxyType*>(web_widget_test_proxy_base);
211 RenderViewImpl* render_view_impl =
212 static_cast<RenderViewImpl*>(render_view_proxy);
213 return render_view_impl;
214 }
215 case test_runner::WebWidgetTestProxyBase::Subtype::WebWidgetTestProxy: {
216 WebWidgetTestProxyType* render_widget_proxy =
217 static_cast<WebWidgetTestProxyType*>(web_widget_test_proxy_base);
218 return static_cast<RenderWidget*>(render_widget_proxy);
219 }
220 default:
221 NOTREACHED();
222 return nullptr;
223 }
224 }
225
166 void EnableWebTestProxyCreation( 226 void EnableWebTestProxyCreation(
167 const ViewProxyCreationCallback& view_proxy_creation_callback, 227 const ViewProxyCreationCallback& view_proxy_creation_callback,
168 const WidgetProxyCreationCallback& widget_proxy_creation_callback, 228 const WidgetProxyCreationCallback& widget_proxy_creation_callback,
169 const FrameProxyCreationCallback& frame_proxy_creation_callback) { 229 const FrameProxyCreationCallback& frame_proxy_creation_callback) {
170 g_view_test_proxy_callback.Get() = view_proxy_creation_callback; 230 g_view_test_proxy_callback.Get() = view_proxy_creation_callback;
171 g_widget_test_proxy_callback.Get() = widget_proxy_creation_callback; 231 g_widget_test_proxy_callback.Get() = widget_proxy_creation_callback;
172 g_frame_test_proxy_callback.Get() = frame_proxy_creation_callback; 232 g_frame_test_proxy_callback.Get() = frame_proxy_creation_callback;
173 RenderViewImpl::InstallCreateHook(CreateWebViewTestProxy); 233 RenderViewImpl::InstallCreateHook(CreateWebViewTestProxy);
174 RenderWidget::InstallCreateHook(CreateWebWidgetTestProxy, 234 RenderWidget::InstallCreateHook(CreateWebWidgetTestProxy,
175 RenderWidgetInitialized); 235 RenderWidgetInitialized);
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view); 444 RenderViewImpl* render_view_impl = static_cast<RenderViewImpl*>(render_view);
385 render_view_impl->ForceResizeForTesting(new_size); 445 render_view_impl->ForceResizeForTesting(new_size);
386 } 446 }
387 447
388 void SetDeviceScaleFactor(RenderView* render_view, float factor) { 448 void SetDeviceScaleFactor(RenderView* render_view, float factor) {
389 static_cast<RenderViewImpl*>(render_view)-> 449 static_cast<RenderViewImpl*>(render_view)->
390 SetDeviceScaleFactorForTesting(factor); 450 SetDeviceScaleFactorForTesting(factor);
391 } 451 }
392 452
393 float GetWindowToViewportScale(RenderView* render_view) { 453 float GetWindowToViewportScale(RenderView* render_view) {
394 blink::WebFloatRect rect(0, 0, 1.0f, 0.0); 454 return GetWindowToViewportScale(
395 static_cast<RenderViewImpl*>(render_view)->convertWindowToViewport(&rect); 455 static_cast<RenderViewImpl*>(render_view)->GetWidget());
396 return rect.width; 456 }
457
458 std::unique_ptr<blink::WebInputEvent> TransformScreenToWidgetCoordinates(
459 test_runner::WebWidgetTestProxyBase* web_widget_test_proxy_base,
460 const blink::WebInputEvent& event) {
461 DCHECK(web_widget_test_proxy_base);
462 RenderWidget* render_widget = GetRenderWidget(web_widget_test_proxy_base);
463 std::unique_ptr<blink::WebInputEvent> result =
464 ui::MakeDeepCopyOfWebInputEvent(event);
465
466 // Translate (i.e. "shift") the coordinates, so that (0,0) is not the screen's
467 // top-left corner anymore, but instead is the widget's top-left corner.
468 blink::WebRect window_rect = render_widget->windowRect();
469 ui::ShiftWebInputEvent(-window_rect.x, -window_rect.y, result.get());
470
471 // Scale the coordinates to widget's scale.
472 ui::ScaleWebInputEvent(GetWindowToViewportScale(render_widget), result.get());
473
474 return result;
397 } 475 }
398 476
399 gfx::ICCProfile GetTestingICCProfile(const std::string& name) { 477 gfx::ICCProfile GetTestingICCProfile(const std::string& name) {
400 const unsigned char rgb_profile_data[] = { 478 const unsigned char rgb_profile_data[] = {
401 0x00, 0x00, 0x07, 0xd8, 0x61, 0x70, 0x70, 0x6c, 0x02, 0x20, 0x00, 0x00, 479 0x00, 0x00, 0x07, 0xd8, 0x61, 0x70, 0x70, 0x6c, 0x02, 0x20, 0x00, 0x00,
402 0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20, 480 0x6d, 0x6e, 0x74, 0x72, 0x52, 0x47, 0x42, 0x20, 0x58, 0x59, 0x5a, 0x20,
403 0x07, 0xd9, 0x00, 0x02, 0x00, 0x19, 0x00, 0x0b, 0x00, 0x1a, 0x00, 0x0b, 481 0x07, 0xd9, 0x00, 0x02, 0x00, 0x19, 0x00, 0x0b, 0x00, 0x1a, 0x00, 0x0b,
404 0x61, 0x63, 0x73, 0x70, 0x41, 0x50, 0x50, 0x4c, 0x00, 0x00, 0x00, 0x00, 482 0x61, 0x63, 0x73, 0x70, 0x41, 0x50, 0x50, 0x4c, 0x00, 0x00, 0x00, 0x00,
405 0x61, 0x70, 0x70, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 483 0x61, 0x70, 0x70, 0x6c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
406 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6, 484 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0xd6,
(...skipping 626 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 return result; 1111 return result;
1034 } 1112 }
1035 1113
1036 void SchedulerRunIdleTasks(const base::Closure& callback) { 1114 void SchedulerRunIdleTasks(const base::Closure& callback) {
1037 blink::scheduler::RendererScheduler* scheduler = 1115 blink::scheduler::RendererScheduler* scheduler =
1038 content::RenderThreadImpl::current()->GetRendererScheduler(); 1116 content::RenderThreadImpl::current()->GetRendererScheduler();
1039 blink::scheduler::RunIdleTasksForTesting(scheduler, callback); 1117 blink::scheduler::RunIdleTasksForTesting(scheduler, callback);
1040 } 1118 }
1041 1119
1042 } // namespace content 1120 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698