提交 243555a9 编写于 作者: A Adam Barth

Add a basic XMLHttpRequest implementation

R=esprehn@chromium.org

Review URL: https://codereview.chromium.org/690803002
上级 945193eb
<link rel="import" href="/mojo/public/html/core.html" as="core" />
<link rel="import" href="/mojo/public/html/connection.html" as="connection" />
<script>
function wrapHandle(handle, service, client) {
var clientClass = client && service.client.delegatingStubClass;
var serviceConnection = new connection.Connection(
handle, clientClass, service.proxyClass);
if (serviceConnection.local)
serviceConnection.local.delegate$ = client;
serviceConnection.remote.connection$ = serviceConnection;
return serviceConnection.remote;
}
function connectToService(url, service, client) {
var handle = internals.connectToService(url, service.name);
return wrapHandle(handle, service, client);
}
this.exports = {
connectToService: connectToService,
wrapHandle: wrapHandle,
};
</script>
<link rel="import" href="/mojo/public/html/core.html" as="core" />
<link rel="import" href="/mojo/public/html/unicode.html" as="unicode" />
<link rel="import" href="/mojo/services/public/interfaces/network/network_service.mojom.html" as="net" />
<link rel="import" href="/mojo/services/public/interfaces/network/url_loader.mojom.html" as="loader" />
<link rel="import" href="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;
};
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;
};
XMLHttpRequest.prototype.send = function() {
// 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) {
core.drainData(result.response.body).then(function(result) {
self.responseText = unicode.decodeUtf8String(new Uint8Array(result.buffer));
self.onload();
}).catch(function(error) {
self.onerror(error);
});
}).catch(function(error) {
self.onerror(error);
});
};
this.exports = XMLHttpRequest;
</script>
Running 1 tests
ok 1 XMLHttpRequest should be able to fetch text files
1 tests
1 pass
0 fail
<html>
<link rel="import" href="../resources/chai.sky" />
<link rel="import" href="../resources/mocha.sky" />
<link rel="import" href="/sky/framework/xmlhttprequest.sky" as="XMLHttpRequest" />
<script>
describe('XMLHttpRequest', function() {
this.enableTimeouts(false);
it('should be able to fetch text files', function(done) {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
assert.equal(xhr.responseText, "This is data from the network.\n");
done();
};
xhr.onerror = function(error) {
assert.ok(false, "Got error: " + JSON.stringify(error));
done();
};
xhr.open("GET", "http://127.0.0.1:8000/services/resources/pass.txt");
xhr.send();
});
});
</script>
</html>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册