Commit bf520b3c authored by Liviu Tinta's avatar Liviu Tinta Committed by Commit Bot

Fix flaky test PointerLockRequestUnadjustedMovement

The test code was not waiting for pointerlockchanged and pointerlockerror events before checking for correctness.

Bug: 1014324
Change-Id: I04dac67731f954a5f220c426db031502a6309e35
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2158934Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarNavid Zolghadr <nzolghadr@chromium.org>
Commit-Queue: Liviu Tinta <liviutinta@chromium.org>
Cr-Commit-Position: refs/heads/master@{#761919}
parent a15d8345
...@@ -706,34 +706,44 @@ IN_PROC_BROWSER_TEST_F(PointerLockBrowserTest, PointerLockOutOfFocus) { ...@@ -706,34 +706,44 @@ IN_PROC_BROWSER_TEST_F(PointerLockBrowserTest, PointerLockOutOfFocus) {
} }
#endif #endif
// Flaky. https://crbug.com/1014324
IN_PROC_BROWSER_TEST_F(PointerLockBrowserTestWithOptions, IN_PROC_BROWSER_TEST_F(PointerLockBrowserTestWithOptions,
DISABLED_PointerLockRequestUnadjustedMovement) { PointerLockRequestUnadjustedMovement) {
GURL main_url(embedded_test_server()->GetURL( GURL main_url(embedded_test_server()->GetURL(
"a.com", "/cross_site_iframe_factory.html?a(b)")); "a.com", "/cross_site_iframe_factory.html?a(b)"));
EXPECT_TRUE(NavigateToURL(shell(), main_url)); EXPECT_TRUE(NavigateToURL(shell(), main_url));
FrameTreeNode* root = web_contents()->GetFrameTree()->root(); FrameTreeNode* root = web_contents()->GetFrameTree()->root();
EXPECT_TRUE(ExecJs(root, EXPECT_TRUE(ExecJs(root, "var pointerLockPromise;"));
"var PointerLockErrorReceived=false;" std::string wait_for_pointer_lock_promise =
"document.addEventListener('pointerlockerror', " "(async ()=> {return await pointerLockPromise.then(()=>true, "
"function() {PointerLockErrorReceived = true;});")); "()=>false);})()";
std::string set_pointer_lock_promise =
R"code(pointerLockPromise = new Promise( function(resolve, reject){
document.addEventListener('pointerlockchange', resolve);
document.addEventListener('pointerlockerror', reject)
});)code";
// Request a pointer lock. // Request a pointer lock.
EXPECT_TRUE(ExecJs(root, "document.body.requestPointerLock()")); EXPECT_EQ(true, EvalJs(root, set_pointer_lock_promise +
"document.body.requestPointerLock();" +
wait_for_pointer_lock_promise));
// Root frame should have been granted pointer lock. // Root frame should have been granted pointer lock.
EXPECT_EQ(true, EvalJs(root, "document.pointerLockElement == document.body")); EXPECT_EQ(true, EvalJs(root, "document.pointerLockElement == document.body"));
// Mouse is locked and unadjusted_movement is not set. // Mouse is locked and unadjusted_movement is not set.
EXPECT_TRUE(root->current_frame_host()->GetView()->IsMouseLocked()); EXPECT_TRUE(root->current_frame_host()->GetView()->IsMouseLocked());
// Release pointer lock.
EXPECT_TRUE(ExecJs(root, "document.exitPointerLock()"));
EXPECT_EQ("false", EvalJs(root, "JSON.stringify(PointerLockErrorReceived)")); // Release pointer lock.
EXPECT_EQ(true, EvalJs(root, set_pointer_lock_promise +
"document.exitPointerLock();" +
wait_for_pointer_lock_promise));
// Request a pointer lock with unadjustedMovement. // Request a pointer lock with unadjustedMovement.
EXPECT_TRUE(ExecJs( EXPECT_TRUE(ExecJs(
root, "document.body.requestPointerLock({unadjustedMovement:true})")); root, set_pointer_lock_promise +
"document.body.requestPointerLock({unadjustedMovement:true})"));
#if defined(USE_AURA) #if defined(USE_AURA)
EXPECT_EQ(true, EvalJs(root, wait_for_pointer_lock_promise));
// Root frame should have been granted pointer lock. // Root frame should have been granted pointer lock.
EXPECT_EQ(true, EvalJs(root, "document.pointerLockElement == document.body")); EXPECT_EQ(true, EvalJs(root, "document.pointerLockElement == document.body"));
// Mouse is locked and unadjusted_movement is set. // Mouse is locked and unadjusted_movement is set.
...@@ -743,15 +753,17 @@ IN_PROC_BROWSER_TEST_F(PointerLockBrowserTestWithOptions, ...@@ -743,15 +753,17 @@ IN_PROC_BROWSER_TEST_F(PointerLockBrowserTestWithOptions,
->GetIsMouseLockedUnadjustedMovementForTesting()); ->GetIsMouseLockedUnadjustedMovementForTesting());
// Release pointer lock, unadjusted_movement bit is reset. // Release pointer lock, unadjusted_movement bit is reset.
EXPECT_TRUE(ExecJs(root, "document.exitPointerLock()")); EXPECT_EQ(true, EvalJs(root, set_pointer_lock_promise +
"document.exitPointerLock();" +
wait_for_pointer_lock_promise));
EXPECT_FALSE(root->current_frame_host() EXPECT_FALSE(root->current_frame_host()
->GetView() ->GetView()
->GetIsMouseLockedUnadjustedMovementForTesting()); ->GetIsMouseLockedUnadjustedMovementForTesting());
#else #else
// On platform that does not support unadjusted movement yet, do not lock and // On platform that does not support unadjusted movement yet, do not lock and
// a pointerlockerror event is dispatched. // a pointerlockerror event is dispatched.
EXPECT_EQ(false, EvalJs(root, wait_for_pointer_lock_promise));
EXPECT_FALSE(root->current_frame_host()->GetView()->IsMouseLocked()); EXPECT_FALSE(root->current_frame_host()->GetView()->IsMouseLocked());
EXPECT_EQ("true", EvalJs(root, "JSON.stringify(PointerLockErrorReceived)"));
#endif #endif
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment