// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

// This file is loaded before the about:tracing code is loaded so that we have
// an event listener registered early.

// Used to delay the initial timeline load until the timeline has finished
// loading.
timeline_loaded = false;
timeline_vm_address = undefined;
timeline_isolates = undefined;

function registerForMessages() {
  window.addEventListener("message", onMessage, false);
}

registerForMessages();

function onMessage(event) {
  var request = JSON.parse(event.data);
  var method = request['method'];
  var params = request['params'];
  console.log('method: ' + method)
  switch (method) {
    case 'refresh':
      if (!timeline_loaded) {
        timeline_vm_address = params['vmAddress'];
        timeline_isolates = params['isolateIds'];
        console.log('Delaying timeline refresh until loaded.');
      } else {
        fetchTimeline(params['vmAddress'], params['isolateIds']);
      }
    break;
    case 'clear':
      clearTimeline();
    break;
    case 'save':
      saveTimeline();
    break;
    case 'load':
      loadTimeline();
    break;
    default:
      console.log('Unknown method:' + method + '.');
  }
}

console.log('message handler registered');
