Chromium Code Reviews| Index: content/test/layouttest_support.cc |
| diff --git a/content/test/layouttest_support.cc b/content/test/layouttest_support.cc |
| index db1e755f125ecf4a8a10544c25cf5a5ee46be379..d200547fe3dfb39965044c7405602f9d8c77706d 100644 |
| --- a/content/test/layouttest_support.cc |
| +++ b/content/test/layouttest_support.cc |
| @@ -40,11 +40,14 @@ |
| #include "gpu/ipc/service/image_transport_surface.h" |
| #include "third_party/WebKit/public/platform/WebFloatRect.h" |
| #include "third_party/WebKit/public/platform/WebGamepads.h" |
| +#include "third_party/WebKit/public/platform/WebInputEvent.h" |
| +#include "third_party/WebKit/public/platform/WebRect.h" |
| #include "third_party/WebKit/public/platform/modules/device_orientation/WebDeviceMotionData.h" |
| #include "third_party/WebKit/public/platform/modules/device_orientation/WebDeviceOrientationData.h" |
| #include "third_party/WebKit/public/platform/scheduler/test/renderer_scheduler_test_support.h" |
| #include "third_party/WebKit/public/web/WebHistoryItem.h" |
| #include "third_party/WebKit/public/web/WebView.h" |
| +#include "ui/events/blink/blink_event_util.h" |
| #include "ui/gfx/icc_profile.h" |
| #if defined(OS_MACOSX) |
| @@ -133,6 +136,12 @@ RenderFrameImpl* CreateWebFrameTestProxy( |
| return render_frame_proxy; |
| } |
| +float GetWindowToViewportScale(RenderWidget* render_widget) { |
| + blink::WebFloatRect rect(0, 0, 1.0f, 0.0); |
| + render_widget->convertWindowToViewport(&rect); |
| + return rect.width; |
| +} |
| + |
| #if defined(OS_WIN) |
| // DirectWrite only has access to %WINDIR%\Fonts by default. For developer |
| // side-loading, support kRegisterFontFiles to allow access to additional fonts. |
| @@ -163,6 +172,57 @@ test_runner::WebFrameTestProxyBase* GetWebFrameTestProxyBase( |
| return static_cast<test_runner::WebFrameTestProxyBase*>(render_frame_proxy); |
| } |
| +test_runner::WebWidgetTestProxyBase* GetWebWidgetTestProxyBase( |
| + blink::WebLocalFrame* frame) { |
| + DCHECK(frame); |
| + RenderFrame* local_root = RenderFrame::FromWebFrame(frame->localRoot()); |
| + DCHECK(local_root); |
| + if (local_root->IsMainFrame()) { |
| + test_runner::WebViewTestProxyBase* web_view_test_proxy_base = |
| + GetWebViewTestProxyBase(local_root->GetRenderView()); |
| + auto* web_widget_test_proxy_base = |
| + static_cast<test_runner::WebWidgetTestProxyBase*>( |
| + web_view_test_proxy_base); |
| + DCHECK_EQ(test_runner::WebWidgetTestProxyBase::Subtype::WebViewTestProxy, |
| + web_widget_test_proxy_base->subtype()); |
| + return web_widget_test_proxy_base; |
| + } else { |
| + RenderWidget* render_widget = |
| + static_cast<RenderFrameImpl*>(local_root)->GetRenderWidget(); |
| + DCHECK(render_widget); |
| + WebWidgetTestProxyType* render_widget_proxy = |
| + static_cast<WebWidgetTestProxyType*>(render_widget); |
| + auto* web_widget_test_proxy_base = |
| + static_cast<test_runner::WebWidgetTestProxyBase*>(render_widget_proxy); |
| + DCHECK_EQ(test_runner::WebWidgetTestProxyBase::Subtype::WebWidgetTestProxy, |
| + web_widget_test_proxy_base->subtype()); |
| + return web_widget_test_proxy_base; |
| + } |
| +} |
| + |
| +RenderWidget* GetRenderWidget( |
| + test_runner::WebWidgetTestProxyBase* web_widget_test_proxy_base) { |
| + DCHECK(web_widget_test_proxy_base); |
| + |
| + 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
|
| + case test_runner::WebWidgetTestProxyBase::Subtype::WebViewTestProxy: { |
| + WebViewTestProxyType* render_view_proxy = |
| + static_cast<WebViewTestProxyType*>(web_widget_test_proxy_base); |
| + RenderViewImpl* render_view_impl = |
| + static_cast<RenderViewImpl*>(render_view_proxy); |
| + return render_view_impl; |
| + } |
| + case test_runner::WebWidgetTestProxyBase::Subtype::WebWidgetTestProxy: { |
| + WebWidgetTestProxyType* render_widget_proxy = |
| + static_cast<WebWidgetTestProxyType*>(web_widget_test_proxy_base); |
| + return static_cast<RenderWidget*>(render_widget_proxy); |
| + } |
| + default: |
| + NOTREACHED(); |
| + return nullptr; |
| + } |
| +} |
| + |
| void EnableWebTestProxyCreation( |
| const ViewProxyCreationCallback& view_proxy_creation_callback, |
| const WidgetProxyCreationCallback& widget_proxy_creation_callback, |
| @@ -391,9 +451,27 @@ void SetDeviceScaleFactor(RenderView* render_view, float factor) { |
| } |
| float GetWindowToViewportScale(RenderView* render_view) { |
| - blink::WebFloatRect rect(0, 0, 1.0f, 0.0); |
| - static_cast<RenderViewImpl*>(render_view)->convertWindowToViewport(&rect); |
| - return rect.width; |
| + return GetWindowToViewportScale( |
| + static_cast<RenderViewImpl*>(render_view)->GetWidget()); |
| +} |
| + |
| +std::unique_ptr<blink::WebInputEvent> TransformScreenToWidgetCoordinates( |
| + test_runner::WebWidgetTestProxyBase* web_widget_test_proxy_base, |
| + const blink::WebInputEvent& event) { |
| + DCHECK(web_widget_test_proxy_base); |
| + RenderWidget* render_widget = GetRenderWidget(web_widget_test_proxy_base); |
| + std::unique_ptr<blink::WebInputEvent> result = |
| + ui::MakeDeepCopyOfWebInputEvent(event); |
| + |
| + // Translate (i.e. "shift") the coordinates, so that (0,0) is not the screen's |
| + // top-left corner anymore, but instead is the widget's top-left corner. |
| + blink::WebRect window_rect = render_widget->windowRect(); |
| + ui::ShiftWebInputEvent(-window_rect.x, -window_rect.y, result.get()); |
| + |
| + // Scale the coordinates to widget's scale. |
| + ui::ScaleWebInputEvent(GetWindowToViewportScale(render_widget), result.get()); |
| + |
| + return result; |
| } |
| gfx::ICCProfile GetTestingICCProfile(const std::string& name) { |