// Copyright 2018 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. InspectorTest.log('Test for Runtime.addBinding.'); InspectorTest.runAsyncTestSuite([ async function testBasic() { const {contextGroup, sessions: [session1, session2]} = setupSessions(2); InspectorTest.log('\nAdd binding inside session1..'); session1.Protocol.Runtime.addBinding({name: 'send'}); InspectorTest.log('Call binding..'); await session1.Protocol.Runtime.evaluate({expression: `send('payload')`}); InspectorTest.log('\nAdd binding inside session2..'); session2.Protocol.Runtime.addBinding({name: 'send'}); InspectorTest.log('Call binding..'); await session2.Protocol.Runtime.evaluate({expression: `send('payload')`}); InspectorTest.log('\nDisable agent inside session1..'); session1.Protocol.Runtime.disable(); InspectorTest.log('Call binding..'); await session2.Protocol.Runtime.evaluate({expression: `send('payload')`}); InspectorTest.log('\nDisable agent inside session2..'); session2.Protocol.Runtime.disable(); InspectorTest.log('Call binding..'); await session2.Protocol.Runtime.evaluate({expression: `send('payload')`}); InspectorTest.log('\nEnable agent inside session1..'); session1.Protocol.Runtime.enable(); InspectorTest.log('Call binding..'); await session2.Protocol.Runtime.evaluate({expression: `send('payload')`}); }, async function testReconnect() { const {contextGroup, sessions: [session]} = setupSessions(1); InspectorTest.log('\nAdd binding inside session..'); await session.Protocol.Runtime.addBinding({name: 'send'}); InspectorTest.log('Reconnect..'); session.reconnect(); await session.Protocol.Runtime.evaluate({expression: `send('payload')`}); }, async function testBindingOverrides() { const {contextGroup, sessions: [session]} = setupSessions(1); InspectorTest.log('\nAdd send function on global object..'); session.Protocol.Runtime.evaluate({expression: 'send = () => 42'}); InspectorTest.log('Add binding inside session..'); session.Protocol.Runtime.addBinding({name: 'send'}); InspectorTest.log('Call binding..'); await session.Protocol.Runtime.evaluate({expression: `send('payload')`}); }, async function testRemoveBinding() { const {contextGroup, sessions: [session]} = setupSessions(1); InspectorTest.log('\nAdd binding inside session..'); session.Protocol.Runtime.addBinding({name: 'send'}); InspectorTest.log('Call binding..'); await session.Protocol.Runtime.evaluate({expression: `send('payload')`}); InspectorTest.log('Remove binding inside session..'); session.Protocol.Runtime.removeBinding({name: 'send'}); InspectorTest.log('Call binding..'); await session.Protocol.Runtime.evaluate({expression: `send('payload')`}); } ]); function setupSessions(num) { const contextGroup = new InspectorTest.ContextGroup(); const sessions = []; for (let i = 0; i < num; ++i) { const session = contextGroup.connect(); sessions.push(session); session.Protocol.Runtime.enable(); session.Protocol.Runtime.onBindingCalled(msg => { InspectorTest.log(`binding called in session${i + 1}`); InspectorTest.logMessage(msg); }); } return {contextGroup, sessions}; }