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)) |