|  | <!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> |