(async function(testRunner) {
  // 1. Create a page, connect to it and use browser connection to grant it a remote debugging capability.
  const {page, session, dp} = await testRunner.startBlank('Verify that exposing devtools protocol yields a functional protocol.');
  await testRunner.browserP().Target.exposeDevToolsProtocol({targetId: page._targetId, bindingName: 'cdp'});

  // 2. To avoid implementing a protocol client in test, use target domain to validate protocol binding.
  await dp.Target.setDiscoverTargets({discover: true});

  // 3. Start target discovery and create a new target using the in-page protocol capability.
  session.evaluate(() => {
    window.messages = [];
    window.cdp.onmessage = msg => messages.push(JSON.parse(msg));
    window.cdp.send(JSON.stringify({
      id: 0,
      method: 'Target.setDiscoverTargets',
      params: {
        discover: true
      }
    }));
    window.cdp.send(JSON.stringify({
      id: 1,
      method: 'Target.createTarget',
      params: {
        url: 'about:blank'
      }
    }));
  });

  // 4. We should observe target creation.
  await dp.Target.onceTargetCreated();
  const cdpSocketMessages = await session.evaluate(() => window.messages);
  const responses = cdpSocketMessages.filter(msg => msg.hasOwnProperty('id'));
  testRunner.log('Protocol responses: ' + responses.length);
  testRunner.log('Protocol events: ' + (cdpSocketMessages.length - responses.length));
  testRunner.completeTest();
})

