Home | History | Annotate | Download | only in tools
      1 #!/bin/sh
      2 # Copyright 2014 The Chromium Authors. All rights reserved.
      3 # Use of this source code is governed by a BSD-style license that can be
      4 # found in the LICENSE file.
      5 #
      6 # Script that can be used to register native messaging hosts in the output
      7 # directory.
      8 
      9 set -e
     10 
     11 SRC_DIR="$(readlink -f "$(dirname "$0")/../..")"
     12 ME2ME_HOST_NAME="com.google.chrome.remote_desktop"
     13 IT2ME_HOST_NAME="com.google.chrome.remote_assistance"
     14 
     15 install_manifest() {
     16   local manifest_template="$1"
     17   local host_path="$2"
     18   local host_path_var_name="$3"
     19   local target_dir="$4"
     20 
     21   local template_name="$(basename ${manifest_template})"
     22   local manifest_name="${template_name%.*}"
     23   local target_manifest="${target_dir}/${manifest_name}"
     24 
     25   echo Registering ${host_path} in ${target_manifest}
     26   mkdir -p "${target_dir}"
     27   sed -e "s#{{ ${host_path_var_name} }}#${host_path}#g" \
     28     < "$manifest_template" > "$target_manifest"
     29 }
     30 
     31 register_hosts() {
     32   local build_dir="$1"
     33   local chrome_data_dir="$2"
     34 
     35   install_manifest \
     36      "${SRC_DIR}/remoting/host/setup/${ME2ME_HOST_NAME}.json.jinja2" \
     37      "${build_dir}/native_messaging_host" \
     38      ME2ME_HOST_PATH "${chrome_data_dir}"
     39 
     40   install_manifest \
     41      "${SRC_DIR}/remoting/host/it2me/${IT2ME_HOST_NAME}.json.jinja2" \
     42      "${build_dir}/remote_assistance_host" \
     43      IT2ME_HOST_PATH "${chrome_data_dir}"
     44 }
     45 
     46 register_hosts_for_all_channels() {
     47   local build_dir="$1"
     48 
     49   if [ $(uname -s) == "Darwin" ]; then
     50     register_hosts "${build_dir}" \
     51         "${HOME}/Library/Application Support/Google/Chrome/NativeMessagingHosts"
     52     register_hosts "${build_dir}" \
     53         "${HOME}/Library/Application Support/Chromium/NativeMessagingHosts"
     54   else
     55     register_hosts "${build_dir}" \
     56         "${HOME}/.config/google-chrome/NativeMessagingHosts"
     57     register_hosts "${build_dir}" \
     58         "${HOME}/.config/google-chrome-beta/NativeMessagingHosts"
     59     register_hosts "${build_dir}" \
     60         "${HOME}/.config/google-chrome-unstable/NativeMessagingHosts"
     61     register_hosts "${build_dir}" \
     62         "${HOME}/.config/chromium/NativeMessagingHosts"
     63   fi
     64 }
     65 
     66 unregister_hosts() {
     67   local chrome_data_dir="$1"
     68 
     69   rm -f "${chrome_data_dir}/${ME2ME_HOST_NAME}.json"
     70   rm -f "${chrome_data_dir}/${IT2ME_HOST_NAME}.json"
     71 }
     72 
     73 unregister_hosts_for_all_channels() {
     74   if [ $(uname -s) == "Darwin" ]; then
     75     unregister_hosts \
     76         "${HOME}/Library/Application Support/Google/Chrome/NativeMessagingHosts"
     77     unregister_hosts \
     78         "${HOME}/Library/Application Support/Chromium/NativeMessagingHosts"
     79   else
     80     unregister_hosts "${HOME}/.config/google-chrome/NativeMessagingHosts"
     81     unregister_hosts "${HOME}/.config/google-chrome-beta/NativeMessagingHosts"
     82     unregister_hosts \
     83         "${HOME}/.config/google-chrome-unstable/NativeMessagingHosts"
     84     unregister_hosts "${HOME}/.config/chromium/NativeMessagingHosts"
     85   fi
     86 }
     87 
     88 print_usage() {
     89   echo "Usage: $0 [-r|-u]" >&2
     90   echo "   -r   Register Release build instead of Debug" >&2
     91   echo "   -u   Unregister" >&2
     92 }
     93 
     94 build_dir="Debug"
     95 
     96 if [[ $# -gt 1 ]]; then
     97   print_usage
     98 elif [[ $# -eq 1 ]]; then
     99   case "$1" in
    100     "-r")
    101       build_dir="Release"
    102       ;;
    103     "-u")
    104       unregister_hosts_for_all_channels
    105       exit 0
    106       ;;
    107     *)
    108       print_usage
    109       exit 1
    110       ;;
    111   esac
    112 fi
    113 
    114 register_hosts_for_all_channels "${SRC_DIR}/out/${build_dir}"
    115