blob: 664f7e6bdb201ebbec9d335ce38c0f4b0312aca9 [file] [log] [blame]
<body>
<script src="../resources/document-interface-broker-helpers.js"></script>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="file:///gen/layout_test_data/mojo/public/js/mojo_bindings_lite.js"></script>
<script src="file:///gen/mojo/public/mojom/base/unguessable_token.mojom-lite.js"></script>
<script src="file:///gen/url/mojom/url.mojom-lite.js"></script>
<script src="file:///gen/third_party/blink/public/mojom/frame/frame_host_test_interface.mojom-lite.js"></script>
<script src="file:///gen/third_party/blink/public/mojom/frame/document_interface_broker.mojom-lite.js"></script>
<script>
'use strict';
promise_test(async t => {
// Create a test implementation of FrameHostTestInterface
const frameHostTestImpl = new blink.mojom.FrameHostTestInterfaceCallbackRouter;
frameHostTestImpl.getName.addListener(() => ({ name: 'TestFrameHostTestImpl' }));
const broker = new blink.mojom.DocumentInterfaceBrokerRemote(
Mojo.getDocumentInterfaceBrokerHandle());
const testInterfaceBeforeOverride = new blink.mojom.FrameHostTestInterfaceRemote;
broker.getFrameHostTestInterface(testInterfaceBeforeOverride.$.bindNewPipeAndPassReceiver());
setDocumentInterfaceBrokerOverrides({ getFrameHostTestInterface: request => {
frameHostTestImpl.$.bindHandle(request.handle);
}});
const testInterfaceAfterOverride = new blink.mojom.FrameHostTestInterfaceRemote;
broker.getFrameHostTestInterface(testInterfaceAfterOverride.$.bindNewPipeAndPassReceiver());
// Verify that RenderFrameHostImpl's implementation gets called without an override
let reply = await testInterfaceBeforeOverride.getName();
assert_equals(reply.name, 'RenderFrameHostImpl');
// Verify that the test implementation gets called after the override
reply = await testInterfaceAfterOverride.getName();
assert_equals(reply.name, 'TestFrameHostTestImpl');
},
'Appropriate DocumentInterfaceBroker implementations are called before and after overriding');
</script>
</body>
</html>