// Copyright 2017 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.

(async function() {
  TestRunner.addResult(`Tests that WebSocketFrames are being sent and received by Web Inspector.\n`);
  await TestRunner.evaluateInPagePromise(`
      var ws;
      function sendMessages() {
          ws = new WebSocket("ws://localhost:8880/echo");
          ws.onopen = function()
          {
              ws.send("test");
              ws.send("exit");
          };
      }
  `);

  var frames = [];
  function onRequest(event) {
    var request = event.data;
    var done = false;
    if (request.resourceType().name() !== 'websocket')
      return;
    var previous_frames = frames;
    frames = [];
    var websocketFrames = request.frames();
    for (var i = 0; i < websocketFrames.length; i++) {
      var frame = websocketFrames[i];
      frames[i] = String.sprintf('%d-%s: %s', (i + 1), frame.type, frame.text);
      if (frame.type !== SDK.NetworkRequest.WebSocketFrameType.Send && frame.text === 'exit')
        done = true;
    }
    if (JSON.stringify(frames) === JSON.stringify(previous_frames)) {
      // There is no update.
      return;
    }
    for (var i = 0; i < frames.length; ++i)
      TestRunner.addResult(frames[i]);
    if (done)
      TestRunner.completeTest();
  }
  TestRunner.networkManager.addEventListener(SDK.NetworkManager.Events.RequestUpdated, onRequest);
  TestRunner.evaluateInPage('sendMessages()');
})();
