Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 3437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3448 | 3448 |
| 3449 // Simulate that the dropped SwapOut ACK message arrives now on the original | 3449 // Simulate that the dropped SwapOut ACK message arrives now on the original |
| 3450 // RenderFrameHost, which should now get deleted. | 3450 // RenderFrameHost, which should now get deleted. |
| 3451 rfh->OnSwappedOut(); | 3451 rfh->OnSwappedOut(); |
| 3452 EXPECT_TRUE(deleted_observer.deleted()); | 3452 EXPECT_TRUE(deleted_observer.deleted()); |
| 3453 | 3453 |
| 3454 // Make sure the last navigation finishes without crashing. | 3454 // Make sure the last navigation finishes without crashing. |
| 3455 navigation_observer.Wait(); | 3455 navigation_observer.Wait(); |
| 3456 } | 3456 } |
| 3457 | 3457 |
| 3458 // Check that when a cross-process frame acquires focus, the old focused frame | |
| 3459 // loses focus and fires blur events. Starting on a page with a cross-site | |
| 3460 // subframe, simulate mouse clicks to switch focus from root frame to subframe | |
| 3461 // and then back to root frame. | |
| 3462 IN_PROC_BROWSER_TEST_F(SitePerProcessBrowserTest, | |
| 3463 CrossProcessFocusChangeFiresBlurEvents) { | |
| 3464 GURL main_url( | |
| 3465 embedded_test_server()->GetURL("a.com", "/page_with_input_field.html")); | |
| 3466 EXPECT_TRUE(NavigateToURL(shell(), main_url)); | |
| 3467 | |
| 3468 FrameTreeNode* root = static_cast<WebContentsImpl*>(shell()->web_contents()) | |
| 3469 ->GetFrameTree() | |
| 3470 ->root(); | |
| 3471 | |
| 3472 EXPECT_EQ( | |
| 3473 " Site A ------------ proxies for B\n" | |
| 3474 " +--Site B ------- proxies for A\n" | |
| 3475 "Where A = http://a.com/\n" | |
| 3476 " B = http://b.com/", | |
| 3477 DepictFrameTree(root)); | |
| 3478 | |
| 3479 // Focus the main frame's text field. The return value "focused" | |
|
Charlie Reis
2015/09/29 23:50:44
"input-focus"?
alexmos
2015/09/30 16:48:20
Done.
| |
| 3480 // indicates that the focus event was fired correctly. | |
| 3481 std::string result; | |
| 3482 EXPECT_TRUE(ExecuteScriptAndExtractString(shell()->web_contents(), | |
| 3483 "focusInputField()", &result)); | |
| 3484 EXPECT_EQ(result, "input-focus"); | |
| 3485 | |
| 3486 // The main frame should be focused. | |
| 3487 EXPECT_EQ(root, root->frame_tree()->GetFocusedFrame()); | |
| 3488 | |
| 3489 DOMMessageQueue msg_queue; | |
| 3490 | |
| 3491 // Click on the cross-process subframe. | |
| 3492 blink::WebMouseEvent mouse_event; | |
| 3493 mouse_event.type = blink::WebInputEvent::MouseDown; | |
| 3494 mouse_event.button = blink::WebPointerProperties::ButtonLeft; | |
| 3495 mouse_event.x = 1; | |
| 3496 mouse_event.y = 1; | |
| 3497 RenderWidgetHost* rwh_child = | |
| 3498 root->child_at(0)->current_frame_host()->GetRenderWidgetHost(); | |
| 3499 rwh_child->ForwardMouseEvent(mouse_event); | |
|
Charlie Reis
2015/09/29 23:50:44
Sanity check: Is this the right way to send input
alexmos
2015/09/30 16:48:20
I've double-checked with Ken that this should be f
| |
| 3500 | |
| 3501 // Check that the main frame lost focus and fired blur event on the input | |
| 3502 // text field. | |
| 3503 std::string status; | |
| 3504 while (msg_queue.WaitForMessage(&status)) { | |
| 3505 if (status == "\"input-blur\"") | |
| 3506 break; | |
| 3507 } | |
| 3508 | |
| 3509 // The subframe should now be focused. | |
| 3510 EXPECT_EQ(root->child_at(0), root->frame_tree()->GetFocusedFrame()); | |
| 3511 | |
| 3512 // Click on the root frame. | |
| 3513 shell()->web_contents()->GetRenderViewHost()->ForwardMouseEvent(mouse_event); | |
| 3514 | |
| 3515 // Check that the subframe lost focus and fired blur event on its | |
| 3516 // document's body. | |
| 3517 while (msg_queue.WaitForMessage(&status)) { | |
| 3518 if (status == "\"document-blur\"") | |
| 3519 break; | |
| 3520 } | |
| 3521 | |
| 3522 // The root frame should be focused again. | |
| 3523 EXPECT_EQ(root, root->frame_tree()->GetFocusedFrame()); | |
| 3524 } | |
| 3525 | |
| 3458 } // namespace content | 3526 } // namespace content |
| OLD | NEW |