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

Side by Side Diff: content/browser/site_per_process_browsertest.cc

Issue 1734403003: Add helper class for tests using browser process hit testing (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix gcc compile warnings Created 4 years, 9 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/browser/site_per_process_browsertest.h" 5 #include "content/browser/site_per_process_browsertest.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 189
190 RenderWidgetHostInputEventRouter* router = 190 RenderWidgetHostInputEventRouter* router =
191 static_cast<WebContentsImpl*>(shell->web_contents()) 191 static_cast<WebContentsImpl*>(shell->web_contents())
192 ->GetInputEventRouter(); 192 ->GetInputEventRouter();
193 193
194 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( 194 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>(
195 root->current_frame_host()->GetRenderWidgetHost()->GetView()); 195 root->current_frame_host()->GetRenderWidgetHost()->GetView());
196 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( 196 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>(
197 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); 197 child_node->current_frame_host()->GetRenderWidgetHost()->GetView());
198 198
199 // We need to wait for a compositor frame from the child frame, at which 199 SurfaceHitTestReadyNotifier notifier(
200 // point its surface will be created. 200 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child));
201 while (rwhv_child->RendererFrameNumber() <= 0) { 201 notifier.WaitForSurfaceReady();
202 // TODO(lazyboy): Find a better way to avoid sleeping like this. See
203 // http://crbug.com/405282 for details.
204 base::RunLoop run_loop;
205 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
206 FROM_HERE, run_loop.QuitClosure(),
207 base::TimeDelta::FromMilliseconds(10));
208 run_loop.Run();
209 }
210
211 uint32_t cur_render_frame_number = root_view->RendererFrameNumber();
212 202
213 // Target input event to child frame. 203 // Target input event to child frame.
214 blink::WebMouseEvent child_event; 204 blink::WebMouseEvent child_event;
215 child_event.type = blink::WebInputEvent::MouseDown; 205 child_event.type = blink::WebInputEvent::MouseDown;
216 child_event.button = blink::WebPointerProperties::ButtonLeft; 206 child_event.button = blink::WebPointerProperties::ButtonLeft;
217 child_event.x = 75; 207 child_event.x = 75;
218 child_event.y = 75; 208 child_event.y = 75;
219 child_event.clickCount = 1; 209 child_event.clickCount = 1;
220 main_frame_monitor.ResetEventReceived(); 210 main_frame_monitor.ResetEventReceived();
221 child_frame_monitor.ResetEventReceived(); 211 child_frame_monitor.ResetEventReceived();
222 router->RouteMouseEvent(root_view, &child_event); 212 router->RouteMouseEvent(root_view, &child_event);
223 213
224 while (!child_frame_monitor.EventWasReceived()) {
225 // This is working around a big synchronization problem. It is very
226 // difficult to know if we have received a compositor frame from the
227 // main frame renderer *after* it received the child frame's surface
228 // ID. Hit testing won't work until this happens. So if the hit test
229 // fails then we wait for another frame to arrive and try again.
230 // TODO(kenrb): We need a better way to do all of this, possibly coming
231 // from http://crbug.com/405282.
232 while (root_view->RendererFrameNumber() <= cur_render_frame_number) {
233 base::RunLoop run_loop;
234 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
235 FROM_HERE, run_loop.QuitClosure(),
236 base::TimeDelta::FromMilliseconds(10));
237 run_loop.Run();
238 }
239 cur_render_frame_number = root_view->RendererFrameNumber();
240 child_event.type = blink::WebInputEvent::MouseDown;
241 child_event.button = blink::WebPointerProperties::ButtonLeft;
242 child_event.x = 75;
243 child_event.y = 75;
244 child_event.clickCount = 1;
245 main_frame_monitor.ResetEventReceived();
246 child_frame_monitor.ResetEventReceived();
247 router->RouteMouseEvent(root_view, &child_event);
248 }
249
250 EXPECT_TRUE(child_frame_monitor.EventWasReceived()); 214 EXPECT_TRUE(child_frame_monitor.EventWasReceived());
251 EXPECT_EQ(23, child_frame_monitor.event().x); 215 EXPECT_EQ(23, child_frame_monitor.event().x);
252 EXPECT_EQ(23, child_frame_monitor.event().y); 216 EXPECT_EQ(23, child_frame_monitor.event().y);
253 EXPECT_FALSE(main_frame_monitor.EventWasReceived()); 217 EXPECT_FALSE(main_frame_monitor.EventWasReceived());
254 218
255 child_frame_monitor.ResetEventReceived(); 219 child_frame_monitor.ResetEventReceived();
256 main_frame_monitor.ResetEventReceived(); 220 main_frame_monitor.ResetEventReceived();
257 221
258 // Target input event to main frame. 222 // Target input event to main frame.
259 blink::WebMouseEvent main_event; 223 blink::WebMouseEvent main_event;
(...skipping 556 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 780
817 RenderWidgetHostInputEventRouter* router = 781 RenderWidgetHostInputEventRouter* router =
818 static_cast<WebContentsImpl*>(shell()->web_contents()) 782 static_cast<WebContentsImpl*>(shell()->web_contents())
819 ->GetInputEventRouter(); 783 ->GetInputEventRouter();
820 784
821 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>( 785 RenderWidgetHostViewBase* root_view = static_cast<RenderWidgetHostViewBase*>(
822 root->current_frame_host()->GetRenderWidgetHost()->GetView()); 786 root->current_frame_host()->GetRenderWidgetHost()->GetView());
823 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>( 787 RenderWidgetHostViewBase* rwhv_child = static_cast<RenderWidgetHostViewBase*>(
824 child_node->current_frame_host()->GetRenderWidgetHost()->GetView()); 788 child_node->current_frame_host()->GetRenderWidgetHost()->GetView());
825 789
826 // We need to wait for a compositor frame from the child frame, at which 790 SurfaceHitTestReadyNotifier notifier(
827 // point its surface will be created. 791 static_cast<RenderWidgetHostViewChildFrame*>(rwhv_child));
828 while (rwhv_child->RendererFrameNumber() <= 0) { 792 notifier.WaitForSurfaceReady();
829 // TODO(lazyboy): Find a better way to avoid sleeping like this. See
830 // http://crbug.com/405282 for details.
831 base::RunLoop run_loop;
832 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask(
833 FROM_HERE, run_loop.QuitClosure(),
834 base::TimeDelta::FromMilliseconds(10));
835 run_loop.Run();
836 }
837 793
838 // Target input event to child frame. 794 // Target input event to child frame.
839 blink::WebMouseEvent child_event; 795 blink::WebMouseEvent child_event;
840 child_event.type = blink::WebInputEvent::MouseDown; 796 child_event.type = blink::WebInputEvent::MouseDown;
841 child_event.button = blink::WebPointerProperties::ButtonLeft; 797 child_event.button = blink::WebPointerProperties::ButtonLeft;
842 child_event.x = 75; 798 child_event.x = 75;
843 child_event.y = 75; 799 child_event.y = 75;
844 child_event.clickCount = 1; 800 child_event.clickCount = 1;
845 main_frame_monitor.ResetEventReceived(); 801 main_frame_monitor.ResetEventReceived();
846 child_frame_monitor.ResetEventReceived(); 802 child_frame_monitor.ResetEventReceived();
(...skipping 4541 matching lines...) Expand 10 before | Expand all | Expand 10 after
5388 5344
5389 // Force the renderer to generate a new frame. 5345 // Force the renderer to generate a new frame.
5390 EXPECT_TRUE(ExecuteScript(shell()->web_contents(), 5346 EXPECT_TRUE(ExecuteScript(shell()->web_contents(),
5391 "document.body.style.background = 'black'")); 5347 "document.body.style.background = 'black'"));
5392 5348
5393 // Waits for the next frame. 5349 // Waits for the next frame.
5394 observer->Wait(); 5350 observer->Wait();
5395 } 5351 }
5396 5352
5397 } // namespace content 5353 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.mm ('k') | content/test/content_browser_test_utils_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698