diff --git a/patches/chromium/.patches b/patches/chromium/.patches index 911e2f5e1b53a..e6b4cb3a8aa34 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -110,3 +110,4 @@ cherry-pick-30261f9de11e.patch cherry-pick-88f263f401b4.patch cherry-pick-229fdaf8fc05.patch cherry-pick-1ed869ad4bb3.patch +crashpad-initialize-logging.patch diff --git a/patches/chromium/crashpad-initialize-logging.patch b/patches/chromium/crashpad-initialize-logging.patch new file mode 100644 index 0000000000000..32156ea3e570e --- /dev/null +++ b/patches/chromium/crashpad-initialize-logging.patch @@ -0,0 +1,146 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Joshua Peraza +Date: Wed, 21 Oct 2020 11:10:25 -0700 +Subject: Initialize logging for crashpad + +Although logging to files is not yet supported by mini_chromium, it is +the default behavior for OS_WIN in chromium. This change should +cause crashpad to log via OutputDebugString() on Windows, instead of +debug.log files. Future work (crbug.com/crashpad/26) should arrange for +logs to be uploaded with reports, embedded in associated minidumps or as +file attachments. + +Bug: chromium:711159 +Change-Id: I0f9004f7de94dd29d555cc7d23c48a63da6b4bba +Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/2425108 +Reviewed-by: Mark Mentovai + +diff --git a/base/logging.cc b/base/logging.cc +index 2da71c73819b34a45911131e2cc8bff861178789..6b701b7a8dee0d015758e11771c5c1f3a6b8d13b 100644 +--- a/base/logging.cc ++++ b/base/logging.cc +@@ -421,21 +421,23 @@ bool BaseInitLoggingImpl(const LoggingSettings& settings) { + 0u); + #endif + +- base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); +- // Don't bother initializing |g_vlog_info| unless we use one of the +- // vlog switches. +- if (command_line->HasSwitch(switches::kV) || +- command_line->HasSwitch(switches::kVModule)) { +- // NOTE: If |g_vlog_info| has already been initialized, it might be in use +- // by another thread. Don't delete the old VLogInfo, just create a second +- // one. We keep track of both to avoid memory leak warnings. +- CHECK(!g_vlog_info_prev); +- g_vlog_info_prev = g_vlog_info; +- +- g_vlog_info = +- new VlogInfo(command_line->GetSwitchValueASCII(switches::kV), +- command_line->GetSwitchValueASCII(switches::kVModule), +- &g_min_log_level); ++ if (base::CommandLine::InitializedForCurrentProcess()) { ++ base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); ++ // Don't bother initializing |g_vlog_info| unless we use one of the ++ // vlog switches. ++ if (command_line->HasSwitch(switches::kV) || ++ command_line->HasSwitch(switches::kVModule)) { ++ // NOTE: If |g_vlog_info| has already been initialized, it might be in use ++ // by another thread. Don't delete the old VLogInfo, just create a second ++ // one. We keep track of both to avoid memory leak warnings. ++ CHECK(!g_vlog_info_prev); ++ g_vlog_info_prev = g_vlog_info; ++ ++ g_vlog_info = ++ new VlogInfo(command_line->GetSwitchValueASCII(switches::kV), ++ command_line->GetSwitchValueASCII(switches::kVModule), ++ &g_min_log_level); ++ } + } + + g_logging_destination = settings.logging_dest; +@@ -446,7 +448,10 @@ bool BaseInitLoggingImpl(const LoggingSettings& settings) { + config.min_severity = FX_LOG_INFO; + config.console_fd = -1; + config.log_service_channel = ZX_HANDLE_INVALID; +- std::string log_tag = command_line->GetProgram().BaseName().AsUTF8Unsafe(); ++ std::string log_tag = base::CommandLine::ForCurrentProcess() ++ ->GetProgram() ++ .BaseName() ++ .AsUTF8Unsafe(); + const char* log_tag_data = log_tag.data(); + config.tags = &log_tag_data; + config.num_tags = 1; +diff --git a/third_party/crashpad/crashpad/DEPS b/third_party/crashpad/crashpad/DEPS +index ccb447cde9a9ee3c1fe29419abfa8aa63d777455..6ee9db5400cf12ae4812a261e78234581b036c25 100644 +--- a/third_party/crashpad/crashpad/DEPS ++++ b/third_party/crashpad/crashpad/DEPS +@@ -42,7 +42,7 @@ deps = { + '7bde79cc274d06451bf65ae82c012a5d3e476b5a', + 'crashpad/third_party/mini_chromium/mini_chromium': + Var('chromium_git') + '/chromium/mini_chromium@' + +- 'ae14a14ab4cea36db9c446741581d427a7fc7f89', ++ '5fc64bfbf1c000161445c586de45e40464ff2314', + 'crashpad/third_party/libfuzzer/src': + Var('chromium_git') + '/chromium/llvm-project/compiler-rt/lib/fuzzer.git@' + + 'fda403cf93ecb8792cb1d061564d89a6553ca020', +diff --git a/third_party/crashpad/crashpad/handler/handler_main.cc b/third_party/crashpad/crashpad/handler/handler_main.cc +index d56857ff9042a0e4ed55bb101e419948f4028305..579a7c364077d2b6a78803fa75f7180109b37c89 100644 +--- a/third_party/crashpad/crashpad/handler/handler_main.cc ++++ b/third_party/crashpad/crashpad/handler/handler_main.cc +@@ -494,16 +494,26 @@ class ScopedStoppable { + DISALLOW_COPY_AND_ASSIGN(ScopedStoppable); + }; + ++void InitCrashpadLogging() { ++ logging::LoggingSettings settings; ++#if defined(OS_CHROMEOS) ++ settings.logging_dest = logging::LOG_TO_FILE; ++ settings.log_file_path = "/var/log/chrome/chrome"; ++#elif defined(OS_WIN) ++ settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; ++#else ++ settings.logging_dest = ++ logging::LOG_TO_SYSTEM_DEBUG_LOG | logging::LOG_TO_STDERR; ++#endif ++ logging::InitLogging(settings); ++} ++ + } // namespace + + int HandlerMain(int argc, + char* argv[], + const UserStreamDataSources* user_stream_sources) { +-#if defined(OS_CHROMEOS) +- if (freopen("/var/log/chrome/chrome", "a", stderr) == nullptr) { +- PLOG(ERROR) << "Failed to redirect stderr to /var/log/chrome/chrome"; +- } +-#endif ++ InitCrashpadLogging(); + + InstallCrashHandler(); + CallMetricsRecordNormalExit metrics_record_normal_exit; +diff --git a/third_party/crashpad/crashpad/test/gtest_main.cc b/third_party/crashpad/crashpad/test/gtest_main.cc +index 67cfa0d72d7eb469775201f3a9df906f27c302a9..c67b8e24bb940935d5da88428ed3058a135f5a57 100644 +--- a/third_party/crashpad/crashpad/test/gtest_main.cc ++++ b/third_party/crashpad/crashpad/test/gtest_main.cc +@@ -12,6 +12,7 @@ + // See the License for the specific language governing permissions and + // limitations under the License. + ++#include "base/logging.h" + #include "build/build_config.h" + #include "gtest/gtest.h" + #include "test/main_arguments.h" +@@ -99,6 +100,12 @@ int main(int argc, char* argv[]) { + + #endif // CRASHPAD_IS_IN_CHROMIUM + ++ // base::TestSuite initializes logging when using Chromium's test launcher. ++ logging::LoggingSettings settings; ++ settings.logging_dest = ++ logging::LOG_TO_STDERR | logging::LOG_TO_SYSTEM_DEBUG_LOG; ++ logging::InitLogging(settings); ++ + #if defined(CRASHPAD_TEST_LAUNCHER_GOOGLEMOCK) + testing::InitGoogleMock(&argc, argv); + #elif defined(CRASHPAD_TEST_LAUNCHER_GOOGLETEST)