#!/bin/bash
# POC runner: starts the server, launches Chrome, dumps the History DB.
set -e

CHROME=${CHROME:-/chromium/chromium/src/out/asan/chrome}
PROFILE=/tmp/chrome-poc-profile
HERE="$(cd "$(dirname "$0")" && pwd)"

rm -rf "$PROFILE"
mkdir -p "$PROFILE"

# Start server
python3 "$HERE/server.py" 2>"$HERE/server.log" &
SRV=$!
trap 'kill $SRV 2>/dev/null || true' EXIT
for i in $(seq 1 10); do
  grep -q "listening" "$HERE/server.log" 2>/dev/null && break
  if ! kill -0 $SRV 2>/dev/null; then
    echo "[run] server failed to start:"; cat "$HERE/server.log"; exit 1
  fi
  sleep 0.5
done

echo "[run] launching chrome..."
# --host-resolver-rules maps the demo .com hosts to 127.0.0.1. This is a
# network-layer test convenience (equivalent to /etc/hosts) and does not affect
# the History logic under test.
"$CHROME" \
    --no-sandbox \
    --no-first-run --no-default-browser-check --ignore-gpu-blocklist \
    --disable-gpu \
    --user-data-dir="$PROFILE" \
    --host-resolver-rules="MAP *.com 127.0.0.1" \
    "http://attacker-page.com:8080/poc.html" \
    >"$HERE/chrome.log" 2>&1 &
CHR=$!

# Wait for the loop to finish (server sets done after ITERATIONS hits)
for i in $(seq 1 120); do
  HITS=$(grep -c 'GET /ok' "$HERE/server.log" 2>/dev/null || true)
  HITS=${HITS:-0}
  if [ "$HITS" -ge 10 ] 2>/dev/null; then break; fi
  sleep 1
done
echo "[run] /ok hits: $HITS"
# HistoryBackend batches commits on a 10-second timer (kCommitIntervalSeconds).
# Wait long enough for at least one commit to land in SQLite.
sleep 13

echo "[run] shutting down chrome..."
pkill -TERM -f "user-data-dir=$PROFILE" 2>/dev/null || true
for i in $(seq 1 15); do
  pgrep -f "user-data-dir=$PROFILE" >/dev/null || break
  sleep 1
done
pkill -KILL -f "user-data-dir=$PROFILE" 2>/dev/null || true
wait $CHR 2>/dev/null || true
sleep 1

echo "[run] querying History DB..."
python3 "$HERE/check_db.py" "$PROFILE" | tee "$HERE/db_dump.txt"
