| Index: ppapi/native_client/tests/breakpad_crash_test/crash_dump_tester.py
|
| diff --git a/ppapi/native_client/tests/breakpad_crash_test/crash_dump_tester.py b/ppapi/native_client/tests/breakpad_crash_test/crash_dump_tester.py
|
| index 9e926869eb7aa5fc2aa32f817acb95c1069dfe63..5e7484f403565f38a0d229951168e9df4de49f3b 100755
|
| --- a/ppapi/native_client/tests/breakpad_crash_test/crash_dump_tester.py
|
| +++ b/ppapi/native_client/tests/breakpad_crash_test/crash_dump_tester.py
|
| @@ -58,9 +58,18 @@ def StartCrashService(browser_path, dumps_dir, windows_pipe_name,
|
| cleanup_funcs.append(Cleanup)
|
|
|
|
|
| -def GetDumpFiles(dumps_dir):
|
| - all_files = [os.path.join(dumps_dir, dump_file)
|
| - for dump_file in os.listdir(dumps_dir)]
|
| +def ListPathsInDir(dir_path):
|
| + if os.path.exists(dir_path):
|
| + return [os.path.join(dir_path, name)
|
| + for name in os.listdir(dir_path)]
|
| + else:
|
| + return []
|
| +
|
| +
|
| +def GetDumpFiles(dumps_dirs):
|
| + all_files = [filename
|
| + for dumps_dir in dumps_dirs
|
| + for filename in ListPathsInDir(dumps_dir)]
|
| sys.stdout.write('crash_dump_tester: Found %i files\n' % len(all_files))
|
| for dump_file in all_files:
|
| sys.stdout.write(' %s\n' % dump_file)
|
| @@ -88,19 +97,20 @@ def Main(cleanup_funcs):
|
| help='Pass this if we are running tests for x86-64 Windows')
|
| options, args = parser.parse_args()
|
|
|
| - dumps_dir = tempfile.mkdtemp(prefix='nacl_crash_dump_tester_')
|
| - def CleanUpDumpsDir():
|
| - browsertester.browserlauncher.RemoveDirectory(dumps_dir)
|
| - cleanup_funcs.append(CleanUpDumpsDir)
|
| + temp_dir = tempfile.mkdtemp(prefix='nacl_crash_dump_tester_')
|
| + def CleanUpTempDir():
|
| + browsertester.browserlauncher.RemoveDirectory(temp_dir)
|
| + cleanup_funcs.append(CleanUpTempDir)
|
|
|
| # To get a guaranteed unique pipe name, use the base name of the
|
| # directory we just created.
|
| - windows_pipe_name = r'\\.\pipe\%s_crash_service' % os.path.basename(dumps_dir)
|
| + windows_pipe_name = r'\\.\pipe\%s_crash_service' % os.path.basename(temp_dir)
|
|
|
| # This environment variable enables Breakpad crash dumping in
|
| # non-official builds of Chromium.
|
| os.environ['CHROME_HEADLESS'] = '1'
|
| if sys.platform == 'win32':
|
| + dumps_dir = temp_dir
|
| # Override the default (global) Windows pipe name that Chromium will
|
| # use for out-of-process crash reporting.
|
| os.environ['CHROME_BREAKPAD_PIPE_NAME'] = windows_pipe_name
|
| @@ -121,11 +131,31 @@ def Main(cleanup_funcs):
|
| # it has successfully created the named pipe.
|
| time.sleep(1)
|
| elif sys.platform == 'darwin':
|
| + dumps_dir = temp_dir
|
| os.environ['BREAKPAD_DUMP_LOCATION'] = dumps_dir
|
| + elif sys.platform.startswith('linux'):
|
| + # The "--user-data-dir" option is not effective for the Breakpad
|
| + # setup in Linux Chromium, because Breakpad is initialized before
|
| + # "--user-data-dir" is read. So we set HOME to redirect the crash
|
| + # dumps to a temporary directory.
|
| + home_dir = temp_dir
|
| + os.environ['HOME'] = home_dir
|
| + # On Linux, we also need to set CHROME_ENABLE_BREAKPAD.
|
| + os.environ['CHROME_ENABLE_BREAKPAD'] = '1'
|
|
|
| result = browser_tester.Run(options.url, options)
|
|
|
| - dmp_files = GetDumpFiles(dumps_dir)
|
| + # Find crash dump results.
|
| + if sys.platform.startswith('linux'):
|
| + # Look in "~/.config/*/Crash Reports". This will find crash
|
| + # reports under ~/.config/chromium or ~/.config/google-chrome, or
|
| + # under other subdirectories in case the branding is changed.
|
| + dumps_dirs = [os.path.join(path, 'Crash Reports')
|
| + for path in ListPathsInDir(os.path.join(home_dir, '.config'))]
|
| + else:
|
| + dumps_dirs = [dumps_dir]
|
| + dmp_files = GetDumpFiles(dumps_dirs)
|
| +
|
| failed = False
|
| msg = ('crash_dump_tester: ERROR: Got %i crash dumps but expected %i\n' %
|
| (len(dmp_files), options.expected_crash_dumps))
|
|
|