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) { |