test_useractivation_open_new_window.html (3652B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>User activation test: consume user activation when opending a new window</title> 5 <script src="/tests/SimpleTest/SimpleTest.js"></script> 6 <script src="/tests/SimpleTest/EventUtils.js"></script> 7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 8 </head> 9 <body> 10 <a href="file_self_close.html" target="_blank">link</a> 11 <script> 12 13 const ALLOW_ACTION = SpecialPowers.Ci.nsIPermissionManager.ALLOW_ACTION; 14 const DENY_ACTION = SpecialPowers.Ci.nsIPermissionManager.DENY_ACTION; 15 const UNKNOWN_ACTION = SpecialPowers.Ci.nsIPermissionManager.UNKNOWN_ACTION; 16 17 async function test_useractivation_window_open() { 18 info("Test user activation after calling window.open()") 19 SpecialPowers.wrap(document).notifyUserGestureActivation(); 20 // Open a new window 21 ok(navigator.userActivation.isActive, `has user activation`); 22 let w = window.open("file_empty.html", "testWindow"); 23 ok(!navigator.userActivation.isActive, `user activation should be consumed after opening a new window`); 24 25 SpecialPowers.wrap(document).notifyUserGestureActivation(); 26 ok(navigator.userActivation.isActive, `has user activation`); 27 let w2 = window.open("file_empty.html", "testWindow"); 28 ok(w2 == w, "should use the existing window"); 29 ok(navigator.userActivation.isActive, `user activation should not be consumed if window is existed`); 30 31 if (w2 && w2 !== w) { 32 w2.close(); 33 } 34 if (w) { 35 w.close(); 36 } 37 } 38 39 async function test_useractivation_anchor_blank() { 40 info("Test user activation after calling window.open()") 41 let link = document.querySelector("a"); 42 link.addEventListener("click", () => { 43 ok(navigator.userActivation.isActive, `has user activation`); 44 }); 45 synthesizeMouseAtCenter(link, {}); 46 await new Promise(resolve => SimpleTest.executeSoon(resolve)); 47 ok(!navigator.userActivation.isActive, `user activation should be consumed`); 48 } 49 50 async function test_useractivation() { 51 await test_useractivation_window_open(); 52 await test_useractivation_anchor_blank(); 53 } 54 55 add_task(async function testPopupBlockerDisabled() { 56 await SpecialPowers.pushPrefEnv({ 57 set: [ 58 // Disable popup blocker 59 ["dom.disable_open_during_load", false], 60 ], 61 }); 62 await test_useractivation(); 63 await SpecialPowers.popPrefEnv(); 64 }); 65 66 add_task(async function testPopupBlockerEnabled() { 67 await SpecialPowers.pushPrefEnv({ 68 set: [ 69 // Enable popup blocker 70 ["dom.disable_open_during_load", true], 71 ], 72 }); 73 74 await test_useractivation(); 75 await SpecialPowers.popPrefEnv(); 76 }); 77 78 add_task(async function testUnknownPermission() { 79 await SpecialPowers.pushPermissions([ 80 {'type': 'popup', 'remove': true, 'context': document} 81 ]); 82 ok(await SpecialPowers.testPermission('popup', UNKNOWN_ACTION, document), 83 'popup value should have UNKNOWN permission'); 84 await test_useractivation(); 85 await SpecialPowers.popPermissions(); 86 }); 87 88 add_task(async function testAllowPermission() { 89 await SpecialPowers.pushPermissions([ 90 {'type': 'popup', 'allow': ALLOW_ACTION, 'context': document} 91 ]); 92 ok(await SpecialPowers.testPermission('popup', ALLOW_ACTION, document), 93 'popup value should have ALLOW permission'); 94 await test_useractivation(); 95 await SpecialPowers.popPermissions(); 96 }); 97 98 add_task(async function testDenyPermission() { 99 await SpecialPowers.pushPermissions([ 100 {'type': 'popup', 'allow': DENY_ACTION, 'context': document} 101 ]); 102 ok(await SpecialPowers.testPermission('popup', DENY_ACTION, document), 103 'popup value should have ALLOW permission'); 104 await test_useractivation(); 105 await SpecialPowers.popPermissions(); 106 }); 107 108 </script> 109 </body>