Skip to content

Commit 58b43c8

Browse files
committed
[DevTools] Route input events to the correct RenderWidgetHost
With OOPIFs, we route input events sent to main frame's target to the correct RenderWidgetHost inside. We might consider doing the same for non-main frames as well, or instead prohibit input domain on them. This does not touch gestures yet, those will follow in next patch. Bug: 746266 TBR=dgozman@chromium.org (cherry picked from commit 901b630) Change-Id: I7ba87c6d227ea24a559ebb7b5ca6a3cf9764d0f0 Reviewed-on: https://chromium-review.googlesource.com/939540 Commit-Queue: Dmitry Gozman <dgozman@chromium.org> Reviewed-by: Andrey Kosyakov <caseq@chromium.org> Cr-Original-Commit-Position: refs/heads/master@{#540419} Reviewed-on: https://chromium-review.googlesource.com/953163 Reviewed-by: Dmitry Gozman <dgozman@chromium.org> Cr-Commit-Position: refs/branch-heads/3359@{#66} Cr-Branched-From: 66afc5e-refs/heads/master@{#540276}
1 parent efc9001 commit 58b43c8

File tree

8 files changed

+380
-107
lines changed

8 files changed

+380
-107
lines changed

chrome/browser/devtools/devtools_sanity_browsertest.cc

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2165,3 +2165,16 @@ IN_PROC_BROWSER_TEST_F(SitePerProcessDevToolsSanityTest, InspectElement) {
21652165
DispatchOnTestSuite(window, "testInspectedElementIs", "INSPECTED-DIV");
21662166
DevToolsWindowTesting::CloseDevToolsWindowSync(window);
21672167
}
2168+
2169+
IN_PROC_BROWSER_TEST_F(SitePerProcessDevToolsSanityTest,
2170+
InputDispatchEventsToOOPIF) {
2171+
GURL url(
2172+
embedded_test_server()->GetURL("a.com", "/devtools/oopif-input.html"));
2173+
ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url, 2);
2174+
for (auto* frame : GetInspectedTab()->GetAllFrames())
2175+
content::WaitForChildFrameSurfaceReady(frame);
2176+
DevToolsWindow* window =
2177+
DevToolsWindowTesting::OpenDevToolsWindowSync(GetInspectedTab(), false);
2178+
RunTestFunction(window, "testInputDispatchEventsToOOPIF");
2179+
DevToolsWindowTesting::CloseDevToolsWindowSync(window);
2180+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<body>
2+
<script src='oopif-input.js'></script>
3+
Hello World!
4+
</body>
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
<body>
2+
<script src="oopif-input.js"></script>
3+
<iframe style="width: 100px; height: 100px; position: absolute; top: 100px; left: 200px; border: 0;"></iframe>
4+
<script>
5+
var url = window.location.href;
6+
url = url.replace(/a\.com/, "b.com");
7+
url = url.replace(/oopif-input\.html/, "oopif-input-iframe.html");
8+
document.querySelector('iframe').setAttribute('src', url);
9+
</script>
10+
</body>
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// Copyright 2018 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
var logs = [];
6+
function log(text) {
7+
logs.push(text);
8+
}
9+
10+
function logMouseEvent(event) {
11+
log('Event');
12+
log('type: ' + event.type);
13+
log('button: ' + event.button);
14+
if (event.shiftKey)
15+
log('shiftKey');
16+
log('x: ' + event.x);
17+
log('y: ' + event.y);
18+
if (event.type === 'mousewheel') {
19+
log('deltaX: ' + event.deltaX);
20+
log('deltaY: ' + event.deltaY);
21+
}
22+
event.preventDefault();
23+
}
24+
25+
function logKeyEvent(event) {
26+
log('Event');
27+
log('type: ' + event.type);
28+
event.preventDefault();
29+
}
30+
31+
function logTouchEvent(event) {
32+
log('Event');
33+
log('type: ' + event.type);
34+
for (var touch of event.touches) {
35+
log('touch x: ' + touch.pageX);
36+
log('touch y: ' + touch.pageY);
37+
}
38+
event.preventDefault();
39+
}
40+
41+
window.addEventListener('mousedown', logMouseEvent);
42+
window.addEventListener('mouseup', logMouseEvent);
43+
window.addEventListener('contextmenu', logMouseEvent);
44+
window.addEventListener('mousewheel', logMouseEvent);
45+
window.addEventListener('keydown', logKeyEvent);
46+
window.addEventListener('touchstart', logTouchEvent);
47+
window.addEventListener('touchend', event => event.preventDefault());

0 commit comments

Comments
 (0)