<!doctype html>
<html>
  <head>
    <meta charset=utf-8>
    <meta name="timeout" content="long">
    <title>Encrypted Media Extensions: Successful Playback, alternate Encrypted and Clear playbacks, Temporary, mp4, DRM</title>
    <link rel="help" href="https://w3c.github.io/encrypted-media/">

    <!-- Web Platform Test Harness scripts -->
    <script src=/resources/testharness.js></script>
    <script src=/resources/testharnessreport.js></script>

    <!-- Helper scripts for Encrypted Media Extensions tests  -->
    <script src=/encrypted-media/util/utils.js></script>
    <script src=/encrypted-media/util/fetch.js></script>
    <script src=/encrypted-media/util/testmediasource.js></script>
    <script src=/encrypted-media/util/utf8.js></script>

    <!-- Content metadata -->
    <script src=/encrypted-media/content/content-metadata.js></script>

    <!-- Message handler for DRM -->
    <script src=/encrypted-media/util/drm-messagehandler.js></script>

    <!-- The script for this specific test -->
    <script src=/encrypted-media/scripts/playback-temporary-encrypted-clear-sources.js></script>

  </head>
  <body>
    <div id='log'></div>

    <div id='video'>
      <video id="videoelement" width="200px"></video>
    </div>

    <script>
        var keysystem = getSupportedKeySystem(),
            encryptedcontentitem = content['mp4-basic'],
            clearcontentitem = content['mp4-clear'],
            handler = new MessageHandler(keysystem, encryptedcontentitem),
            configEncrypted = { video:              document.getElementById('videoelement'),
                                keysystem:          keysystem,
                                messagehandler:     handler.messagehandler,
                                audioPath:          encryptedcontentitem.audio.path,
                                videoPath:          encryptedcontentitem.video.path,
                                audioType:          encryptedcontentitem.audio.type,
                                videoType:          encryptedcontentitem.video.type,
                                initDataType:       encryptedcontentitem.initDataType
                            },
            configClear = { audioPath:          clearcontentitem.audio.path,
                            videoPath:          clearcontentitem.video.path,
                            audioType:          clearcontentitem.audio.type,
                            videoType:          clearcontentitem.video.type,
                            };

        runTest(configEncrypted,configClear);
    </script>
  </body>
</html>
