#!/bin/bash
#
# Copyright (c) 2011 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.

# Let the wrapped binary know that it has been run through the wrapper.
export CHROME_WRAPPER="`readlink -f "$0"`"

HERE="`dirname "$CHROME_WRAPPER"`"

# Check if the CPU supports SSE2. If not, try to pop up a dialog to explain the
# problem and exit. Otherwise the browser will just crash with a SIGILL.
# http://crbug.com/348761
grep ^flags /proc/cpuinfo|grep -qs sse2
if [ $? != 0 ]; then
  SSE2_DEPRECATION_MSG="This computer cannot run Vivaldi because \
its hardware is no longer supported."
  if which zenity &> /dev/null; then
    zenity --warning --text="$SSE2_DEPRECATION_MSG"
  elif which gmessage &> /dev/null; then
    gmessage "$SSE2_DEPRECATION_MSG"
  elif which xmessage &> /dev/null; then
    xmessage "$SSE2_DEPRECATION_MSG"
  else
    echo "$SSE2_DEPRECATION_MSG" 1>&2
  fi
  exit 1
fi

# We include some xdg utilities next to the binary, and we want to prefer them
# over the system versions when we know the system versions are very old. We
# detect whether the system xdg utilities are sufficiently new to be likely to
# work for us by looking for xdg-settings. If we find it, we leave $PATH alone,
# so that the system xdg utilities (including any distro patches) will be used.
if ! which xdg-settings &> /dev/null; then
  # Old xdg utilities. Prepend $HERE to $PATH to use ours instead.
  export PATH="$HERE:$PATH"
else
  # Use system xdg utilities. But first create mimeapps.list if it doesn't
  # exist; some systems have bugs in xdg-mime that make it fail without it.
  xdg_app_dir="${XDG_DATA_HOME:-$HOME/.local/share/applications}"
  mkdir -p "$xdg_app_dir"
  [ -f "$xdg_app_dir/mimeapps.list" ] || touch "$xdg_app_dir/mimeapps.list"
fi

# Find libffmpeg.so with additional codecs.
CHR_CODECS_CH="/usr/share/doc/chromium-codecs-ffmpeg-extra/changelog.Debian.gz"
if [ -r $CHR_CODECS_CH ]; then
  CHR_CODECS_VER=$(gzip -cd $CHR_CODECS_CH |
    sed -n '1s/chromium-browser (\(\([0-9]\+\.\)\{3\}\).*/\1/p')
  if [ "$CHR_CODECS_VER" = "48.0.2564." ]; then
    FFMPEG_LD_LIBRARY_PATH=":/usr/lib/chromium-browser/libs"
  fi
fi
# Set LD_LIBRARY_PATH to prefer our libs, excluding $HERE/lib/libffmpeg.so if
# an alternative ffmpeg was found.
if [[ -n "$LD_LIBRARY_PATH" ]]; then
  LD_LIBRARY_PATH="$HERE$FFMPEG_LD_LIBRARY_PATH:$HERE/lib:$LD_LIBRARY_PATH"
else
  LD_LIBRARY_PATH="$HERE$FFMPEG_LD_LIBRARY_PATH:$HERE/lib"
fi
export LD_LIBRARY_PATH

export CHROME_VERSION_EXTRA="snapshot"

# We don't want bug-buddy intercepting our crashes. http://crbug.com/24120
export GNOME_DISABLE_CRASH_DIALOG=SET_BY_GOOGLE_CHROME

# Automagically migrate user data directory.
# TODO(phajdan.jr): Remove along with migration code in the browser for M33.
if [[ -n "${XDG_CONFIG_HOME:-${HOME}/.config}/vivaldi-snapshot" ]]; then
  if [[ ! -d "${XDG_CONFIG_HOME:-${HOME}/.config}/vivaldi-snapshot" ]]; then
    "$HERE/vivaldi-bin" "--migrate-data-dir-for-sxs=${XDG_CONFIG_HOME:-${HOME}/.config}/vivaldi-snapshot" \
      --enable-logging=stderr --log-level=0
  fi
fi

# Sanitize std{in,out,err} because they'll be shared with untrusted child
# processes (http://crbug.com/376567).
exec < /dev/null
exec > >(exec cat)
exec 2> >(exec cat >&2)

if [ -f "/opt/google/chrome/PepperFlash/libpepflashplayer.so" ]; then
  FLASH_PATH="/opt/google/chrome/PepperFlash/libpepflashplayer.so" # google
elif [ -f "/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so" ]; then
  FLASH_PATH="/usr/lib/pepperflashplugin-nonfree/libpepflashplayer.so" # debian/ubuntu
elif [ -f "/usr/lib/PepperFlash/libpepflashplayer.so" ]; then
  FLASH_PATH="/usr/lib/PepperFlash/libpepflashplayer.so" # arch/slack
elif [ -f "/usr/lib/chromium/PepperFlash/libpepflashplayer.so" ]; then
  FLASH_PATH="/usr/lib/chromium/PepperFlash/libpepflashplayer.so" # openSuse 32-bit
elif [ -f "/usr/lib64/chromium/PepperFlash/libpepflashplayer.so" ]; then
  FLASH_PATH="/usr/lib64/chromium/PepperFlash/libpepflashplayer.so" # openSuse 64-bit
elif [ -f "/usr/lib/pepflashplugin-installer/libpepflashplayer.so" ]; then
  FLASH_PATH="/usr/lib/pepflashplugin-installer/libpepflashplayer.so" # ppa:skunk/pepper-flash
elif [ -f "/usr/lib/chromium-browser/PepperFlash/libpepflashplayer.so" ]; then
  FLASH_PATH="/usr/lib/chromium-browser/PepperFlash/libpepflashplayer.so" # rosa/mandriva 32-bit
elif [ -f "/usr/lib64/chromium-browser/PepperFlash/libpepflashplayer.so" ]; then
  FLASH_PATH="/usr/lib64/chromium-browser/PepperFlash/libpepflashplayer.so" # rosa/mandriva 64-bit
fi
if [ -f $FLASH_PATH ]; then
  FLASH_VERSION=`grep -m 1 -a -o "LNX [[:digit:]]\+,[[:digit:]]\+,[[:digit:]]\+,[[:digit:]]\+" $FLASH_PATH | cut -c 5- | sed -e "s/,/./g"`
fi

# Make sure that the profile directory specified in the environment, if any,
# overrides the default.
if [[ -n "$CHROME_USER_DATA_DIR" ]]; then
  # Note: exec -a below is a bashism.
  exec -a "$0" "$HERE/vivaldi-bin" --user-data-dir="${XDG_CONFIG_HOME:-${HOME}/.config}/vivaldi-snapshot" \
    --user-data-dir="$CHROME_USER_DATA_DIR" \
    --ppapi-flash-path=$FLASH_PATH --ppapi-flash-version=$FLASH_VERSION \
    "$@"
else
  exec -a "$0" "$HERE/vivaldi"-bin --user-data-dir="${XDG_CONFIG_HOME:-${HOME}/.config}/vivaldi-snapshot" \
    --ppapi-flash-path=$FLASH_PATH --ppapi-flash-version=$FLASH_VERSION \
    "$@"
fi
