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

Unified 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, 3 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 side-by-side diff with in-line comments
Download patch
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) {

Powered by Google App Engine
This is Rietveld 408576698