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