| <!doctype html> | 
 | <meta charset=utf-8> | 
 | <title>XMLHttpRequest: passing objects that interfere with the XHR instance to send()</title> | 
 | <script src="/resources/testharness.js"></script> | 
 | <script src="/resources/testharnessreport.js"></script> | 
 | <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::ol/li[4]" /> | 
 | <link rel="help" href="https://heycam.github.io/webidl/#es-union" data-tested-assertations="following::ol/li[16]" /> | 
 |  | 
 |  | 
 | <div id="log"></div> | 
 |  | 
 | <script> | 
 |   var test1 = async_test('abort() called from data stringification') | 
 |   test1.step(function() { | 
 |     var client = new XMLHttpRequest() | 
 |     var objAbortsOnStringification = {toString:function(){ | 
 |       client.abort(); | 
 |     }} | 
 |     client.open('POST', 'resources/content.py') | 
 |     assert_throws("InvalidStateError", function(){ | 
 |       client.send(objAbortsOnStringification) | 
 |     }) | 
 |     test1.done() | 
 |   }); | 
 |  | 
 |   var test2 = async_test('open() called from data stringification') | 
 |   test2.step(function() { | 
 |     var client = new XMLHttpRequest() | 
 |     var objOpensOnStringification = {toString:function(){ | 
 |       client.open('POST', 'resources/status.py?text=second_open_wins'); | 
 |     }} | 
 |     client.onloadend = test2.step_func(function(){ | 
 |       assert_equals(client.statusText, 'second_open_wins') | 
 |       test2.done() | 
 |     }) | 
 |     client.open('POST', 'resources/status.py?text=first_open_wins') | 
 |     client.send(objOpensOnStringification) | 
 |   }); | 
 |  | 
 |   var test3 = async_test('send() called from data stringification') | 
 |   test3.step(function() { | 
 |     var client = new XMLHttpRequest() | 
 |     var objSendsOnStringification = {toString:function(){ | 
 |       client.send('bomb!'); | 
 |     }} | 
 |     client.onload = test3.step_func(function(){ | 
 |       assert_equals(client.responseText, 'bomb!') | 
 |       test3.done() | 
 |     }) | 
 |     client.open('POST', 'resources/content.py') | 
 |     assert_throws('InvalidStateError', function(){ | 
 |       client.send(objSendsOnStringification) | 
 |     }) | 
 |   }); | 
 |  | 
 |  | 
 | </script> |