| <import src="/mojo/public/sky/core.sky" as="core" /> | 
 | <import src="/mojo/public/sky/unicode.sky" as="unicode" /> | 
 | <import src="/mojo/services/public/interfaces/network/network_service.mojom.sky" as="net" /> | 
 | <import src="/mojo/services/public/interfaces/network/url_loader.mojom.sky" as="loader" /> | 
 | <import src="shell.sky" as="shell" /> | 
 | <script> | 
 | function XMLHttpRequest() { | 
 |   this.networkService_ = shell.connectToService( | 
 |     "mojo:network_service", net.NetworkService); | 
 |   this.request_ = null; | 
 |   this.loader_ = null; | 
 |   this.responseText = null; | 
 |   this.headers_ = new Map(); | 
 | }; | 
 |  | 
 | XMLHttpRequest.prototype.onload = function() { }; | 
 | XMLHttpRequest.prototype.onerror = function(error) { }; | 
 |  | 
 | XMLHttpRequest.prototype.open = function(method, url) { | 
 |   this.request_ = new loader.URLRequest(); | 
 |   this.request_.url = url; | 
 |   this.request_.method = method; | 
 |   this.request_.auto_follow_redirects = true; | 
 |   this.headers_.clear(); | 
 | }; | 
 |  | 
 | XMLHttpRequest.prototype.setRequestHeader = function(header, value) { | 
 |   this.headers_.set(header, value); | 
 | }; | 
 |  | 
 | XMLHttpRequest.prototype.send = function() { | 
 |   var requestHeaders = []; | 
 |   this.headers_.forEach(function(value, key) { | 
 |     requestHeaders.push(key + ': ' + value); | 
 |   }); | 
 |   this.request_.headers = requestHeaders; | 
 |  | 
 |   // FIXME: Factor this into the JS bindings. | 
 |   var pipe = new core.createMessagePipe(); | 
 |   this.networkService_.createURLLoader(pipe.handle1); | 
 |   this.loader_ = shell.wrapHandle(pipe.handle0, loader.URLLoader); | 
 |  | 
 |   var self = this; | 
 |   this.loader_.start(this.request_).then(function(result) { | 
 |     return core.drainData(result.response.body).then(function(result) { | 
 |       self.responseText = unicode.decodeUtf8String(new Uint8Array(result.buffer)); | 
 |       self.onload(); | 
 |     }); | 
 |   }).catch(function(error) { | 
 |     self.onerror(error); | 
 |   }); | 
 | }; | 
 |  | 
 | module.exports = XMLHttpRequest; | 
 | </script> |