<html>
<head>
<script src="/js-test-resources/js-test.js"></script>
<script src="http://127.0.0.1:8000/resources/slow-script.pl?delay=100"></script>
<script src="resources/picture-preload-helper.js"></script>
</head>
<body>
<script>
    if (window.testRunner)
        testRunner.dumpAsText();
    shouldBeTrue("internals.isPreloaded('resources/preload-test.jpg?0');");
    shouldBeTrue("internals.isPreloaded('resources/image2.png');");
    loadFromImg(2);
    loadFromSource(3);
    loadFromSource(4);
    loadFromSource(5);
    loadFromImg(6);
    loadFromImg(7);
</script>
<!-- Control group -->
<img src="resources/preload-test.jpg?0">
<picture>
<source srcset="resources/image2.png">
<img></picture>
<!-- Invalid nesting tests -->
<!-- In the following tests, nesting messes up the selection algorithm -->
<picture>
    <picture>
        <source sizes="400px" srcset="resources/base-image1.png?1 200w, resources/base-image3.png?1 400w, resources/base-image2.png?1 800w">
        <div>
            </picture>
        </div>
        <img src="resources/preload-test.jpg?1">
    </picture>
</picture>
<picture>
    <div>
        </picture>
        </picture>
        </picture>
    </div>
    <source sizes="400px" srcset="resources/base-image1.png?2 200w, resources/base-image3.png?2 400w, resources/base-image2.png?2 800w">
    <img src="resources/preload-test.jpg?2">
</picture>
<!-- Here we preload the correct resource, since document.write is not modifying the DOM -->
<picture>
    <script>document.write("bla");</script>
    <source sizes="400px" srcset="resources/base-image1.png?3 200w, resources/base-image3.png?3 400w, resources/base-image2.png?3 800w">
    <img src="resources/preload-test.jpg?3">
</picture>
<!-- In the following tests, nesting messes up the selection algorithm, but we don't get it -->
<picture>
    <div>
        <picture>
            <div>
                <source sizes="400px" srcset="resources/base-image1.png?4 200w, resources/base-image3.png?4 400w, resources/base-image2.png?4 800w">
            </div>
            <img src="resources/preload-test.jpg?4">
        </picture>
    </div>
</picture>
<picture>
    <div>
        <picture>
            <div>
                <source sizes="400px" srcset="resources/base-image1.png?5 200w, resources/base-image3.png?5 400w, resources/base-image2.png?5 800w">
                <img src="resources/preload-test.jpg?5">
            </div>
        </picture>
    </div>
</picture>
<!-- We don't keep a checkpoint of the picture stack, so document.write inside picture 
     *that modifies the DOM* will result in a false prediction -->
<!-- In the following tests, we preload the wrong resource, because document.write is modifying the DOM -->
<script>document.write('<picture>');</script>
    <source sizes="400px" srcset="resources/base-image1.png?6 200w, resources/base-image3.png?6 400w, resources/base-image2.png?6 800w">
    <img src="resources/preload-test.jpg?6">
</picture>
<picture>
    <script>document.write('<source sizes="400px" srcset="resources/base-image1.png?7 200w, resources/base-image3.png?7 400w, resources/base-image2.png?7 800w">');</script>
    <img src="resources/preload-test.jpg?7">
</picture>
</body>
</html>
