user-activation.js (1572B)
1 'use strict'; 2 3 // In order to use this function, please import testdriver.js and 4 // testdriver-vendor.js, and include a <body> element. 5 async function waitForUserActivation() { 6 if (window.opener) { 7 throw new Error( 8 "waitForUserActivation() only works in the top-level frame"); 9 } 10 const loadedPromise = new Promise(resolve => { 11 if(document.readyState == 'complete') { 12 resolve(); 13 return; 14 } 15 window.addEventListener('load', resolve, {once: true}); 16 }); 17 await loadedPromise; 18 19 const clickedPromise = new Promise(resolve => { 20 document.body.addEventListener('click', resolve, {once: true}); 21 }); 22 23 test_driver.click(document.body); 24 await clickedPromise; 25 } 26 27 async function trySetPermission(perm, state) { 28 try { 29 await test_driver.set_permission({ name: perm }, state) 30 } catch { 31 // This is expected, as clipboard permissions are not supported by every engine 32 // and also the set_permission. The permission is not required by such engines as 33 // they require user activation instead. 34 } 35 } 36 37 async function tryGrantReadPermission() { 38 await trySetPermission("clipboard-read", "granted"); 39 } 40 41 async function tryGrantWritePermission() { 42 await trySetPermission("clipboard-write", "granted"); 43 } 44 45 async function sendPasteShortcutKey() { 46 const modifier = navigator.platform.includes("Mac") ? "\uE03d" // META 47 : "\uE009"; // CONTROL 48 await new test_driver.Actions() 49 .keyDown(modifier) 50 .keyDown("v") 51 .keyUp("v") 52 .keyUp(modifier) 53 .send(); 54 }