Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(808)

Side by Side Diff: components/crash/content/app/breakpad_linux.cc

Issue 1518913002: [Android WebView] Update microdump generation for sandboxed renderers (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed typo Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/crash/content/app/breakpad_linux.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // For linux_syscall_support.h. This makes it safe to call embedded system 5 // For linux_syscall_support.h. This makes it safe to call embedded system
6 // calls when in seccomp mode. 6 // calls when in seccomp mode.
7 7
8 #include "components/crash/content/app/breakpad_linux.h" 8 #include "components/crash/content/app/breakpad_linux.h"
9 9
10 #include <fcntl.h> 10 #include <fcntl.h>
(...skipping 721 matching lines...) Expand 10 before | Expand all | Expand 10 after
732 if (!succeeded) { 732 if (!succeeded) {
733 static const char msg[] = "Microdump crash handler failed.\n"; 733 static const char msg[] = "Microdump crash handler failed.\n";
734 WriteLog(msg, sizeof(msg) - 1); 734 WriteLog(msg, sizeof(msg) - 1);
735 return false; 735 return false;
736 } 736 }
737 737
738 const bool is_browser_process = (context != nullptr); 738 const bool is_browser_process = (context != nullptr);
739 return FinalizeCrashDoneAndroid(is_browser_process); 739 return FinalizeCrashDoneAndroid(is_browser_process);
740 } 740 }
741 741
742 // The microdump handler does NOT upload anything. It just dumps out on the
743 // system console (logcat) a restricted and serialized variant of a minidump.
744 // See crbug.com/410294 for more details.
745 void InitMicrodumpCrashHandlerIfNecessary(const std::string& process_type) {
746 if (!GetCrashReporterClient()->ShouldEnableBreakpadMicrodumps())
747 return;
748
749 VLOG(1) << "Enabling microdumps crash handler (process_type:"
750 << process_type << ")";
751
752 // The exception handler runs in a compromised context and cannot use c_str()
753 // as that would require the heap. Therefore, we have to guarantee that the
754 // build fingerprint and product info pointers are always valid.
755 const char* product_name = nullptr;
756 const char* product_version = nullptr;
757 GetCrashReporterClient()->GetProductNameAndVersion(&product_name,
758 &product_version);
759
760 const char* android_build_fp =
761 base::android::BuildInfo::GetInstance()->android_build_fp();
762
763 g_microdump_info.Get().Initialize(process_type, product_name, product_version,
764 android_build_fp);
765 }
766
767 bool CrashDoneInProcessNoUpload( 742 bool CrashDoneInProcessNoUpload(
768 const google_breakpad::MinidumpDescriptor& descriptor, 743 const google_breakpad::MinidumpDescriptor& descriptor,
769 void* context, 744 void* context,
770 const bool succeeded) { 745 const bool succeeded) {
771 // WARNING: this code runs in a compromised context. It may not call into 746 // WARNING: this code runs in a compromised context. It may not call into
772 // libc nor allocate memory normally. 747 // libc nor allocate memory normally.
773 if (!succeeded) { 748 if (!succeeded) {
774 static const char msg[] = "Crash dump generation failed.\n"; 749 static const char msg[] = "Crash dump generation failed.\n";
775 WriteLog(msg, sizeof(msg) - 1); 750 WriteLog(msg, sizeof(msg) - 1);
776 return false; 751 return false;
(...skipping 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after
1851 GetCrashReporterClient()->GetAndroidMinidumpDescriptor()); 1826 GetCrashReporterClient()->GetAndroidMinidumpDescriptor());
1852 if (minidump_fd < 0) { 1827 if (minidump_fd < 0) {
1853 NOTREACHED() << "Could not find minidump FD, crash reporting disabled."; 1828 NOTREACHED() << "Could not find minidump FD, crash reporting disabled.";
1854 } else { 1829 } else {
1855 InitCrashKeys(); 1830 InitCrashKeys();
1856 EnableNonBrowserCrashDumping(process_type, minidump_fd); 1831 EnableNonBrowserCrashDumping(process_type, minidump_fd);
1857 } 1832 }
1858 } 1833 }
1859 } 1834 }
1860 1835
1836 // The microdump handler does NOT upload anything. It just dumps out on the
1837 // system console (logcat) a restricted and serialized variant of a minidump.
1838 // See crbug.com/410294 for more details.
1839 void InitMicrodumpCrashHandlerIfNecessary(const std::string& process_type) {
1840 if (!GetCrashReporterClient()->ShouldEnableBreakpadMicrodumps())
1841 return;
1842
1843 VLOG(1) << "Enabling microdumps crash handler (process_type:"
1844 << process_type << ")";
1845
1846 // The exception handler runs in a compromised context and cannot use c_str()
1847 // as that would require the heap. Therefore, we have to guarantee that the
1848 // build fingerprint and product info pointers are always valid.
1849 const char* product_name = nullptr;
1850 const char* product_version = nullptr;
1851 GetCrashReporterClient()->GetProductNameAndVersion(&product_name,
1852 &product_version);
1853
1854 const char* android_build_fp =
1855 base::android::BuildInfo::GetInstance()->android_build_fp();
1856
1857 g_microdump_info.Get().Initialize(process_type, product_name, product_version,
1858 android_build_fp);
1859 }
1860
1861 void AddGpuFingerprintToMicrodumpCrashHandler( 1861 void AddGpuFingerprintToMicrodumpCrashHandler(
1862 const std::string& gpu_fingerprint) { 1862 const std::string& gpu_fingerprint) {
1863 g_microdump_info.Get().SetGpuFingerprint(gpu_fingerprint); 1863 g_microdump_info.Get().SetGpuFingerprint(gpu_fingerprint);
1864 } 1864 }
1865 #endif // OS_ANDROID 1865 #endif // OS_ANDROID
1866 1866
1867 bool IsCrashReporterEnabled() { 1867 bool IsCrashReporterEnabled() {
1868 return g_is_crash_reporter_enabled; 1868 return g_is_crash_reporter_enabled;
1869 } 1869 }
1870 1870
1871 } // namespace breakpad 1871 } // namespace breakpad
OLDNEW
« no previous file with comments | « components/crash/content/app/breakpad_linux.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698