blob: 156a5416c25d57beee4cbfe85dca0c26a36e8bf0 [file] [log] [blame]
<!DOCTYPE html>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings.js"></script>
<script src="file:///gen/mojo/public/interfaces/bindings/tests/sample_interfaces.mojom.js"></script>
<script src="file:///gen/mojo/public/interfaces/bindings/tests/sample_service.mojom.js"></script>
<script>
'use strict';
promise_test(async () => {
function ServiceImpl() {
}
ServiceImpl.prototype.frobinate = function(foo, baz, port) {
assert_equals(foo.name, "Example name");
assert_equals(baz, sample.Service.BazOptions.REGULAR);
assert_true(port.ptr.isBound());
port.ptr.reset();
return Promise.resolve({result: 42});
};
var service = new sample.ServicePtr();
var serviceBinding = new mojo.Binding(
sample.Service, new ServiceImpl(), mojo.makeRequest(service));
var sourcePipe = Mojo.createMessagePipe();
var port = new sample.PortPtr();
var portRequest = mojo.makeRequest(port);
var foo = new sample.Foo();
foo.bar = new sample.Bar();
foo.name = "Example name";
foo.source = sourcePipe.handle0;
assert_equals((await service.frobinate(
foo, sample.Service.BazOptions.REGULAR, port)).result, 42);
service.ptr.reset();
serviceBinding.close();
// sourcePipe.handle1 hasn't been closed yet.
sourcePipe.handle1.close();
// portRequest.handle hasn't been closed yet.
portRequest.handle.close();
}, 'client server');
promise_test(async () => {
var service = new sample.ServicePtr();
// Discard the interface request.
var interfaceRequest = mojo.makeRequest(service);
interfaceRequest.close();
try {
await service.frobinate(null, sample.Service.BazOptions.REGULAR, null);
assert_unreached();
} catch (e) {
assert_not_equals(e, null);
}
}, 'write to closed pipe');
promise_test(async () => {
function ProviderImpl() {
}
ProviderImpl.prototype.echoString = function(a) {
return Promise.resolve({a: a});
};
ProviderImpl.prototype.echoStrings = function(a, b) {
return Promise.resolve({a: a, b: b});
};
var provider = new sample.ProviderPtr();
var providerBinding = new mojo.Binding(
sample.Provider, new ProviderImpl(), mojo.makeRequest(provider));
assert_equals((await provider.echoString("hello")).a, "hello");
var response = await provider.echoStrings("hello", "world");
assert_equals(response.a, "hello");
assert_equals(response.b, "world");
}, 'request response');
</script>