| // Copyright 2023 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| (async function(testRunner) { |
| const html = `<!doctype html> |
| <html><body> |
| <input type="text" id="input" value="input_value" autofocus> |
| </body></html> |
| `; |
| |
| const {page, session, dp} = await testRunner.startHTML( |
| html, `Tests input field clipboard operations.`); |
| |
| async function logElementValue(id) { |
| const value = await session.evaluate(` |
| document.getElementById("${id}").value; |
| `); |
| testRunner.log(`${id}: ${value}`); |
| } |
| |
| async function sendKey( |
| text, modifiers = 0, commands = []) { |
| const keyCode = text.charCodeAt(0); |
| await dp.Input.dispatchKeyEvent({ |
| type: 'keyDown', |
| modifiers: modifiers, |
| text: text, |
| nativeVirtualKeyCode: keyCode, |
| commands: commands |
| }); |
| await dp.Input.dispatchKeyEvent({ |
| type: 'keyUp', |
| modifiers: modifiers, |
| nativeVirtualKeyCode: keyCode |
| }); |
| } |
| |
| await dp.Browser.grantPermissions({permissions: ['clipboardReadWrite']}); |
| |
| const kControl = 2; |
| const kCommand = 4; |
| const mod = navigator.platform.includes('Mac') ? kCommand : kControl; |
| |
| await logElementValue('input'); |
| await sendKey('a', mod, ['selectAll']); |
| await sendKey('c', mod, ['copy']); |
| |
| await sendKey('1'); |
| await sendKey('2'); |
| await sendKey('3'); |
| await logElementValue('input'); |
| |
| // Don't send Ctrl+A here because this would cause clipboard copy on |
| // systems that support selection clipboard, e.g. Linux. |
| await sendKey('v', mod, ['paste']); |
| await logElementValue('input'); |
| |
| testRunner.completeTest(); |
| }) |