#!/bin/bash
# Copyright 2016 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.

# Runs run-webkit-tests and attaches a debugger to the single renderer process.

if [ $# -eq 0 ]; then
  echo "usage: $(basename $0) [run-webkit-tests args...] test-path/test-name.html"
  exit 1
fi

OS=$(uname)
SCRIPTS_DIR=$(dirname $0)
if [[ "$OS" == "Darwin" ]]; then
  CONTENT_SHELL="Content Shell.app"
elif [[ "$OS" == "Linux" ]]; then
  CONTENT_SHELL="content_shell"
else
  echo "Support for $OS has not been tested yet."
  exit 1
fi
RENDERER_REGEX="/$CONTENT_SHELL.* --type=renderer .*--renderer-startup-dialog"

if [ -z "$DEBUGGER" ]; then
  if which lldb > /dev/null; then
    DEBUGGER="lldb"
    CONTINUE="continue"
  elif which gdb > /dev/null; then
    DEBUGGER="gdb -q"
    CONTINUE="signal SIGUSR1"
  else
    echo "No debugger found"
    exit 1
  fi
fi

# Kill existing matching renderers before we begin to ensure a clean run.
pkill -f "$RENDERER_REGEX"

# Run with a single child process as this script attaches only to the first renderer.
$SCRIPTS_DIR/run-webkit-tests --child-processes=1 --time-out-ms=100000000 --additional-driver-flag=--no-sandbox --additional-driver-flag=--renderer-startup-dialog $* &

wait_renderer_pid() {
  for i in {1..200}; do
    sleep 0.2
    RENDERER_PID=$(pgrep -f "$RENDERER_REGEX")
    [ -n "$RENDERER_PID" ] && return
  done
}

wait_renderer_pid
if [ -n "$RENDERER_PID" ]; then
  # print yellow message
  echo -e "\n\033[1;33mDebugging renderer, use '$CONTINUE' to run.\033[0m\n"
  $DEBUGGER -p $RENDERER_PID
else
  echo "Timed out waiting for renderer."
fi
