<!DOCTYPE html>
<html>
<head>
<style>
input::-webkit-textfield-decoration-container,
input[type="search"]::-webkit-textfield-decoration-container,
input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-results-decoration,
input[type="search"]::-webkit-search-results-button,
::placeholder,
input::placeholder,
isindex::placeholder,
input[type="button"], input[type="submit"], input[type="reset"],
input[type="file"]::-webkit-file-upload-button,
button,
input[type="range"]::-webkit-slider-container,
input[type="range"]::-webkit-media-slider-container,
input[type="range"]::-webkit-slider-runnable-track,
input[type="range"]::-webkit-slider-thumb,
input[type="range"]::-webkit-color-swatch-wrapper,
input[type="range"]::-webkit-color-swatch,
input::-webkit-calendar-picker-indicator {
    -webkit-user-modify: read-write;
}
</style>
</head>
<body>

<p>The inner element of input should not be modifiable.
   Trying to delete the inner element of input should not cause a crash.</p>

<div id="container">
    <input id="search" type="search">
    <input id="file" type="file">
    <input id="range" type="range">
    <input id="color" type="color">
    <input id="number" type="number">
    <input id="placeholder" type="text" placeholder="something">
    <button id="button">something</button>
    <input id="date" type="date">
    <video id="video" controls>
    <audio id="audio" controls>
</div>

<script>
async function focusAndType(id, key)
{
    if (!window.eventSenver)
        return;

    var target = document.getElementById(id);
    await eventSender.asyncMouseMoveTo(target.offsetLeft + 2, target.offsetTop + 2);
    await eventSender.asyncMouseDown();
    await eventSender.asyncMouseUp();
    eventSender.keyDown(key);
}

onload = async () => {
    if (!window.testRunner)
        return;

    testRunner.waitUntilDone();
    testRunner.dumpAsText();

    var container = document.getElementById("container");

    await focusAndType("search", "delete");
    await focusAndType("file", "delete");
    await focusAndType("range", "delete");
    await focusAndType("color", "delete");
    await focusAndType("number", "delete");
    await focusAndType("placeholder", "delete");
    await focusAndType("button", "delete");
    await focusAndType("date", "delete");
    await focusAndType("video", "delete");
    await focusAndType("audio", "delete");

    container.innerHTML = "PASS";

    testRunner.notifyDone();
}
</script>
</body>
</html>
