<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>FileAPI Test: filereader_readAsDataURL</title>
    <link rel="author" title="Intel" href="http://www.intel.com">
    <link rel="help" href="http://dev.w3.org/2006/webapi/FileAPI/#readAsDataURL">
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
  </head>
  <body>
    <div id="log"></div>

    <script>
    async_test(function() {
      var blob = new Blob(["TEST"]);
      var reader = new FileReader();

      reader.onload = this.step_func(function(evt) {
        assert_equals(typeof reader.result, "string", "The result is string");
        assert_equals(reader.result.indexOf("data:"), 0, "The result attribute starts with 'data'");
        assert_true(reader.result.indexOf("base64") > 0, "The result attribute contains 'base64'");
        assert_equals(reader.readyState, reader.DONE);
        this.done();
      });

      reader.onloadstart = this.step_func(function(evt) {
        assert_equals(reader.readyState, reader.LOADING);
      });

      reader.onprogress = this.step_func(function(evt) {
        assert_equals(reader.readyState, reader.LOADING);
      });

      reader.readAsDataURL(blob);
    });
    </script>
  </body>
</html>
