#!/usr/bin/env python
# Copyright 2013 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.

"""Launches Firefox and browses to an URL."""

import os
import signal
import sys

from optparse import OptionParser

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
THIRD_PARTY_DIR = os.path.abspath(os.path.join(BASE_DIR, 'third_party'))

sys.path.append(os.path.join(THIRD_PARTY_DIR, 'manifestdestiny'))
sys.path.append(os.path.join(THIRD_PARTY_DIR, 'mozinfo'))
sys.path.append(os.path.join(THIRD_PARTY_DIR, 'mozprocess'))
sys.path.append(os.path.join(THIRD_PARTY_DIR, 'mozprofile'))
sys.path.append(os.path.join(THIRD_PARTY_DIR, 'mozrunner'))

from mozprofile import profile
import mozrunner

WEBRTC_PREFERENCES = {
    # Automatically gives permission to access the camera/microphone and
    # bypasses the permission/selection dialog.
    'media.navigator.permission.disabled': True,

    # TODO(phoglund): Disable e10s to see if we're still affected by
    # the sandbox audio issue.
    'browser.tabs.remote.autostart': False,
}

def main():
  usage = 'usage: %prog --binary <firefox_executable> --webpage <url>'
  parser = OptionParser(usage)
  parser.add_option('-b', '--binary',
                    help=('Firefox executable to run.'))
  parser.add_option('-w', '--webpage',
                    help=('Web page to browse to.'))
  options, _args = parser.parse_args()
  if not options.binary:
    parser.error('You must specify the Firefox browser executable.')
  if not options.webpage:
    parser.error('You must specify the web page to browse to.')

  firefox_profile = profile.FirefoxProfile(preferences=WEBRTC_PREFERENCES)
  firefox_runner = mozrunner.FirefoxRunner(profile=firefox_profile,
                                           binary=options.binary,
                                           cmdargs=[options.webpage])
  def KillFirefox(signum, frame):
    firefox_runner.stop()
  signal.signal(signal.SIGTERM, KillFirefox)

  firefox_runner.start()

  # Run until Chrome kills us.
  firefox_runner.process_handler.wait(timeout=600)
  return 0

if __name__ == '__main__':
  sys.exit(main())
