<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
  <!-- Copyright (c) 2011 Google Inc.  All rights reserved. -->
  <head>
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
    <META HTTP-EQUIV="Expires" CONTENT="-1" />
    <script type="text/javascript" src="nacltest.js"></script>
    <script type="text/javascript">
      //<![CDATA[
      // These constants need to match their corresponding values in module.cc.
      var ARGUMENT_SEPARATOR = '|';
      var TRUE_STRING_VALUE = '1';
      var FALSE_STRING_VALUE = '0';

      function isMatch(actual, expected) {
        return (0 <= actual.indexOf(expected));
      }

      // Convert a string to a boolean value.  '1' convertes to |true|,
      // anything else converts to |false|.
      function stringToBool(str_value) {
        return str_value == TRUE_STRING_VALUE;
      }

      // Convert a boolean value to the corresponding string value.  |true|
      // converts to '1', |false| to '0'.
      function boolToString(bool_value) {
        return bool_value ? TRUE_STRING_VALUE : FALSE_STRING_VALUE;
      }

      function setupTests(tester, plugin) {
        function addTest(name, url, as_file, expected_data, expected_success) {
          tester.addAsyncTest(name, function(test) {
            var listener = test.wrap(function(test_response) {
                plugin.removeEventListener('message', listener, false);

                var response_args =
                    test_response.data.split(ARGUMENT_SEPARATOR);
                test.assertEqual(response_args.length, 4);

                // Validate the results.
                var response_url = response_args[0];
                var response_as_file = stringToBool(response_args[1]);
                var response_data = response_args[2];
                var response_success = stringToBool(response_args[3]);
                test.assert(isMatch(response_url, url));
                test.assertEqual(response_as_file, as_file);
                test.log(response_data);
                test.assert(isMatch(response_data, expected_data));
                test.assertEqual(response_success, expected_success);
                test.pass();
            });
            plugin.addEventListener('message', listener, false);

            // Make the request.
            var loadUrlMessage = [
              'loadUrl',
              url,
              boolToString(as_file)].join(ARGUMENT_SEPARATOR);
            plugin.postMessage(loadUrlMessage);
          });
        }

        var VALID_URL = 'ppapi_geturl_success.html';
        var CROSSORIGIN_URL = 'http://www.google.com/robots.txt';
        var INVALID_URL = 'ppapi_nonexistent_url.html';

        addTest('Valid', VALID_URL, false, 'TEST PASSED', true);
        addTest('Valid_File', VALID_URL, true, 'TEST PASSED', true);
        addTest('CrossOrigin', CROSSORIGIN_URL, false, 'PP_ERROR_NOACCESS',
                 false);
        addTest('CrossOrigin_File', CROSSORIGIN_URL, true, 'PP_ERROR_NOACCESS',
                 false);
        addTest('Invalid', INVALID_URL, false, '404', false);
        addTest('Invalid_File', INVALID_URL, true, '404', false);
      }
      //]]>
    </script>

  <title>PPAPI GetURL Test</title>
  </head>
  <body>
    <h1>PPAPI GetURL Test</h1>

    <embed type="application/x-nacl"
           id="nacl"
           name="nacl_module"
           src="ppapi_geturl.nmf"
           width="0" height="0" />

    <script type="text/javascript">
      //<![CDATA[
      // TODO(ncbray) allow the test to run in parallel
      var tester = new Tester();
      setupTests(tester, $('nacl'));
      tester.waitFor($('nacl'));
      tester.run();
      //]]>
    </script>
  </body>
</html>