<!--
Copyright 2018 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<html>
<head>
<script>
var output = [];
var testRunner = {};
testRunner.dumpAsText = () => {};
testRunner.waitUntilDone = () => {};
testRunner.setCanOpenWindows = () => {};
testRunner.notifyDone = () => {
  sendProtocolMessage(JSON.stringify({id: 0, method: 'DONE', params: {}, result: output.join('\n')}));
};
DevToolsHost = {};
DevToolsHost.sendMessageToEmbedder = (message) => {
  const object = JSON.parse(message);
  sendProtocolMessage(object.params[0]);
}

DevToolsHost.dummyPageURL = `http://127.0.0.1:${window.location.port}/protocol/inspector-protocol-page.html`;

</script>
<script src="../../resources/inspector-protocol-test.js"></script>
<script>
DevToolsAPI._log = text => output.push(text);

function onmessage(json) { DevToolsAPI.dispatchMessage(json); }
</script>
</head>
</html>