1#!/usr/bin/env python
2# Copyright (c) 2012 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
6import logging
7import os
8import signal
9import subprocess
10import tempfile
11import unittest
12
13import pyauto_functional
14import pyauto
15import test_utils
16
17
18class SimpleTest(pyauto.PyUITest):
19
20  def ExtraChromeFlags(self):
21    """Ensures Chrome is launched with custom flags.
22
23    Returns:
24      A list of extra flags to pass to Chrome when it is launched.
25    """
26    fd, self._strace_log = tempfile.mkstemp()
27    os.close(fd)
28    extra_flags = ['--no-sandbox', '--child-clean-exit',
29                   '--renderer-cmd-prefix=/usr/bin/strace -o %s' %
30                    self._strace_log]
31    logging.debug('Strace file is: %s' % self._strace_log)
32    return pyauto.PyUITest.ExtraChromeFlags(self) + extra_flags
33
34
35  def testCleanExit(self):
36    """Ensures the renderer process cleanly exits."""
37    url = self.GetHttpURLForDataPath('title2.html')
38    self.NavigateToURL(url)
39    os.kill(self.GetBrowserInfo()['browser_pid'], signal.SIGINT)
40    self.WaitUntil(lambda: self._IsFileOpen(self._strace_log))
41    strace_contents = open(self._strace_log).read()
42    self.assertTrue('exit_group' in strace_contents)
43    os.remove(self._strace_log)
44
45  def _IsFileOpen(self, filename):
46    p = subprocess.Popen(['lsof', filename])
47    return p.communicate()[0] == ''
48
49
50if __name__ == '__main__':
51  pyauto_functional.Main()
52