chromium/ppapi/native_client/tests/breakpad_crash_test/trusted_crash_in_startup.html

<!--
Copyright 2012 The Chromium Authors
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->

<script type="text/javascript" src="nacltest.js"></script>

<div id="scratch_space"></div>

<script type="text/javascript">

var tester = new Tester();

tester.addAsyncTest('trusted_crash_during_startup', function(status) {
  var embed = document.createElement('embed');
  embed.width = 0;
  embed.height = 0;
  // We trigger a crash in trusted code via the NACL_CRASH_TEST env var.
  // Since the crash occurs during startup, untrusted code does not run,
  // so the choice of NaCl executable is arbitrary.
  embed.src = 'crash_test.nmf';
  embed.type = 'application/x-nacl';
  embed.name = 'foo';

  // Webkit Bug Workaround
  // THIS SHOULD BE REMOVED WHEN Webkit IS FIXED
  // http://code.google.com/p/nativeclient/issues/detail?id=2428
  // http://code.google.com/p/chromium/issues/detail?id=103588
  ForcePluginLoadOnTimeout(embed, tester, 15000);

  var div = document.createElement('div');
  div.appendChild(embed);

  div.addEventListener('load', status.wrap(function(event) {
    status.fail('We expected this process to crash during startup');
  }), true);

  div.addEventListener('error', status.wrap(function(event) {
    var error = embed.lastError;
    status.log('Received error: ' + error);
    // This error occurs only because NACL_CRASH_TEST is set.  We would
    // not normally expect to get this error in the browser.
    var expected_error_prefix = 'NaCl module load failed: ServiceRuntime: ';
    var suffix1 = 'command channel creation failed';
    var suffix2 = 'failed to start';
    status.assert(error == expected_error_prefix + suffix1 ||
                  error == expected_error_prefix + suffix2);
    status.pass();
  }), true);

  document.getElementById('scratch_space').appendChild(div);
});

tester.run();

</script>