summaryrefslogtreecommitdiff
path: root/chromium/components/crash
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-07-12 14:07:37 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-07-17 10:29:26 +0000
commitec02ee4181c49b61fce1c8fb99292dbb8139cc90 (patch)
tree25cde714b2b71eb639d1cd53f5a22e9ba76e14ef /chromium/components/crash
parentbb09965444b5bb20b096a291445170876225268d (diff)
downloadqtwebengine-chromium-ec02ee4181c49b61fce1c8fb99292dbb8139cc90.tar.gz
BASELINE: Update Chromium to 59.0.3071.134
Change-Id: Id02ef6fb2204c5fd21668a1c3e6911c83b17585a Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Diffstat (limited to 'chromium/components/crash')
-rw-r--r--chromium/components/crash/content/app/breakpad_linux.cc15
-rw-r--r--chromium/components/crash/content/app/breakpad_win.cc10
-rw-r--r--chromium/components/crash/content/app/crash_reporter_client.cc6
-rw-r--r--chromium/components/crash/content/app/crash_reporter_client.h16
-rw-r--r--chromium/components/crash/content/app/crashpad.cc6
-rw-r--r--chromium/components/crash/content/app/crashpad.h13
-rw-r--r--chromium/components/crash/content/app/crashpad_mac.mm30
-rw-r--r--chromium/components/crash/content/app/crashpad_win.cc53
-rw-r--r--chromium/components/crash/content/app/fallback_crash_handler_launcher_win_unittest.cc5
-rw-r--r--chromium/components/crash/content/app/fallback_crash_handler_win.cc1
-rw-r--r--chromium/components/crash/content/app/fallback_crash_handler_win_unittest.cc6
-rw-r--r--chromium/components/crash/content/app/fallback_crash_handling_win_unittest.cc6
-rw-r--r--chromium/components/crash/content/app/run_as_crashpad_handler_win.cc43
-rw-r--r--chromium/components/crash/content/app/run_as_crashpad_handler_win.h9
-rw-r--r--chromium/components/crash/content/browser/crash_dump_observer_android.cc3
-rw-r--r--chromium/components/crash/content/browser/crash_dump_observer_android.h2
16 files changed, 162 insertions, 62 deletions
diff --git a/chromium/components/crash/content/app/breakpad_linux.cc b/chromium/components/crash/content/app/breakpad_linux.cc
index 722ce16dca6..0d3de65043a 100644
--- a/chromium/components/crash/content/app/breakpad_linux.cc
+++ b/chromium/components/crash/content/app/breakpad_linux.cc
@@ -143,7 +143,7 @@ class MicrodumpInfo {
void SetMinidumpSanitizationFields(MinidumpDescriptor* minidump_descriptor,
const SanitizationInfo& sanitization_info);
-base::LazyInstance<MicrodumpInfo> g_microdump_info =
+base::LazyInstance<MicrodumpInfo>::DestructorAtExit g_microdump_info =
LAZY_INSTANCE_INITIALIZER;
#endif
@@ -980,9 +980,7 @@ void MicrodumpInfo::Initialize(const std::string& process_type,
true, // Install handlers.
-1); // Server file descriptor. -1 for in-process.
- if (process_type != kWebViewSingleProcessType &&
- process_type != kBrowserProcessType &&
- !process_type.empty()) {
+ if (!is_browser_process) {
g_signal_code_pipe_fd =
GetCrashReporterClient()->GetAndroidCrashSignalFD();
if (g_signal_code_pipe_fd != -1)
@@ -1953,7 +1951,14 @@ void InitCrashReporter(const std::string& process_type) {
if (parsed_command_line.HasSwitch(switches::kDisableBreakpad))
return;
- if (process_type.empty()) {
+ bool is_browser_process =
+#if defined(OS_ANDROID)
+ process_type == kWebViewSingleProcessType ||
+ process_type == kBrowserProcessType ||
+#endif
+ process_type.empty();
+
+ if (is_browser_process) {
bool enable_breakpad = GetCrashReporterClient()->GetCollectStatsConsent() ||
GetCrashReporterClient()->IsRunningUnattended();
enable_breakpad &=
diff --git a/chromium/components/crash/content/app/breakpad_win.cc b/chromium/components/crash/content/app/breakpad_win.cc
index c80c02303db..c09961c7f6a 100644
--- a/chromium/components/crash/content/app/breakpad_win.cc
+++ b/chromium/components/crash/content/app/breakpad_win.cc
@@ -290,10 +290,10 @@ long WINAPI ChromeExceptionFilter(EXCEPTION_POINTERS* info) {
return EXCEPTION_EXECUTE_HANDLER;
}
-// Exception filter for the service process used when breakpad is not enabled.
-// We just display the "Do you want to restart" message and then die
-// (without calling the previous filter).
-long WINAPI ServiceExceptionFilter(EXCEPTION_POINTERS* info) {
+// Exception filter for the Cloud Print service process used when breakpad is
+// not enabled. We just display the "Do you want to restart" message and then
+// die (without calling the previous filter).
+long WINAPI CloudPrintServiceExceptionFilter(EXCEPTION_POINTERS* info) {
DumpDoneCallback(NULL, NULL, NULL, info, NULL, false);
return EXCEPTION_EXECUTE_HANDLER;
}
@@ -583,7 +583,7 @@ void InitCrashReporter(const std::string& process_type_switch) {
default_filter = &ChromeExceptionFilter;
} else if (process_type == L"service") {
callback = &DumpDoneCallback;
- default_filter = &ServiceExceptionFilter;
+ default_filter = &CloudPrintServiceExceptionFilter;
}
if (GetCrashReporterClient()->ShouldCreatePipeName(process_type))
diff --git a/chromium/components/crash/content/app/crash_reporter_client.cc b/chromium/components/crash/content/app/crash_reporter_client.cc
index eac090b9cad..2e9ee28e1b0 100644
--- a/chromium/components/crash/content/app/crash_reporter_client.cc
+++ b/chromium/components/crash/content/app/crash_reporter_client.cc
@@ -173,6 +173,12 @@ bool CrashReporterClient::ShouldEnableBreakpadMicrodumps() {
}
#endif
+#if defined(OS_MACOSX) || defined(OS_WIN)
+bool CrashReporterClient::ShouldMonitorCrashHandlerExpensively() {
+ return false;
+}
+#endif
+
bool CrashReporterClient::EnableBreakpadForProcess(
const std::string& process_type) {
return false;
diff --git a/chromium/components/crash/content/app/crash_reporter_client.h b/chromium/components/crash/content/app/crash_reporter_client.h
index ccc30483da6..9f69c193dda 100644
--- a/chromium/components/crash/content/app/crash_reporter_client.h
+++ b/chromium/components/crash/content/app/crash_reporter_client.h
@@ -179,6 +179,22 @@ class CrashReporterClient {
virtual bool ShouldEnableBreakpadMicrodumps();
#endif
+#if defined(OS_MACOSX) || defined(OS_WIN)
+ // This method should return true to configure a crash reporter capable of
+ // monitoring itself for its own crashes to do so, even if self-monitoring
+ // would be expensive. "Expensive" self-monitoring dedicates an additional
+ // crash handler process to handle the crashes of the initial crash handler
+ // process.
+ //
+ // In some cases, inexpensive self-monitoring may also be available. When it
+ // is, it may be used when this method returns false. If only expensive
+ // self-monitoring is available, returning false from this function will
+ // prevent the crash handler process from being monitored for crashes at all.
+ //
+ // The default implementation returns false.
+ virtual bool ShouldMonitorCrashHandlerExpensively();
+#endif
+
// Returns true if breakpad should run in the given process type.
virtual bool EnableBreakpadForProcess(const std::string& process_type);
};
diff --git a/chromium/components/crash/content/app/crashpad.cc b/chromium/components/crash/content/app/crashpad.cc
index 76f67348ab0..dcec3468435 100644
--- a/chromium/components/crash/content/app/crashpad.cc
+++ b/chromium/components/crash/content/app/crashpad.cc
@@ -204,6 +204,12 @@ void InitializeCrashpadWithEmbeddedHandler(bool initial_client,
}
#endif // OS_WIN
+crashpad::CrashpadClient& GetCrashpadClient() {
+ static crashpad::CrashpadClient* const client =
+ new crashpad::CrashpadClient();
+ return *client;
+}
+
void SetUploadConsent(bool consent) {
if (!g_database)
return;
diff --git a/chromium/components/crash/content/app/crashpad.h b/chromium/components/crash/content/app/crashpad.h
index eeb65ac69b7..ada0eaec733 100644
--- a/chromium/components/crash/content/app/crashpad.h
+++ b/chromium/components/crash/content/app/crashpad.h
@@ -12,6 +12,15 @@
#include <vector>
#include "base/files/file_path.h"
+#include "build/build_config.h"
+
+#if defined(OS_MACOSX)
+#include "base/mac/scoped_mach_port.h"
+#endif
+
+namespace crashpad {
+class CrashpadClient;
+}
namespace crash_reporter {
@@ -55,6 +64,10 @@ void InitializeCrashpadWithEmbeddedHandler(bool initial_client,
const std::string& process_type);
#endif // OS_WIN
+// Returns the CrashpadClient for this process. This will lazily create it if
+// it does not already exist. This is called as part of InitializeCrashpad.
+crashpad::CrashpadClient& GetCrashpadClient();
+
// Enables or disables crash report upload, taking the given consent to upload
// into account. Consent may be ignored, uploads may not be enabled even with
// consent, but will only be enabled without consent when policy enforces crash
diff --git a/chromium/components/crash/content/app/crashpad_mac.mm b/chromium/components/crash/content/app/crashpad_mac.mm
index 7df66ea3d32..3bae07e14c6 100644
--- a/chromium/components/crash/content/app/crashpad_mac.mm
+++ b/chromium/components/crash/content/app/crashpad_mac.mm
@@ -66,12 +66,18 @@ base::FilePath PlatformCrashpadInitialization(bool initial_client,
base::SysNSStringToUTF8(product).append("_Mac");
#if defined(GOOGLE_CHROME_BUILD)
+ // Empty means stable.
+ const bool allow_empty_channel = true;
+#else
+ const bool allow_empty_channel = false;
+#endif
NSString* channel = base::mac::ObjCCast<NSString>(
[outer_bundle objectForInfoDictionaryKey:@"KSChannelID"]);
if (channel) {
process_annotations["channel"] = base::SysNSStringToUTF8(channel);
+ } else if (allow_empty_channel) {
+ process_annotations["channel"] = "";
}
-#endif
NSString* version =
base::mac::ObjCCast<NSString>([base::mac::FrameworkBundle()
@@ -81,6 +87,16 @@ base::FilePath PlatformCrashpadInitialization(bool initial_client,
process_annotations["plat"] = std::string("OS X");
std::vector<std::string> arguments;
+
+ if (crash_reporter_client->ShouldMonitorCrashHandlerExpensively()) {
+ arguments.push_back("--monitor-self");
+ }
+
+ // Set up --monitor-self-annotation even in the absence of --monitor-self
+ // so that minidumps produced by Crashpad's generate_dump tool will
+ // contain these annotations.
+ arguments.push_back("--monitor-self-annotation=ptype=crashpad-handler");
+
if (!browser_process) {
// If this is an initial client that's not the browser process, it's
// important that the new Crashpad handler also not be connected to any
@@ -90,15 +106,9 @@ base::FilePath PlatformCrashpadInitialization(bool initial_client,
"--reset-own-crash-exception-port-to-system-default");
}
- crashpad::CrashpadClient crashpad_client;
- bool result = crashpad_client.StartHandler(handler_path,
- database_path,
- metrics_path,
- url,
- process_annotations,
- arguments,
- true,
- false);
+ bool result = GetCrashpadClient().StartHandler(
+ handler_path, database_path, metrics_path, url, process_annotations,
+ arguments, true, false);
// If this is an initial client that's not the browser process, it's
// important to sever the connection to any existing handler. If
diff --git a/chromium/components/crash/content/app/crashpad_win.cc b/chromium/components/crash/content/app/crashpad_win.cc
index 89f3d2b9926..94a350f4b5a 100644
--- a/chromium/components/crash/content/app/crashpad_win.cc
+++ b/chromium/components/crash/content/app/crashpad_win.cc
@@ -9,7 +9,6 @@
#include "base/debug/crash_logging.h"
#include "base/environment.h"
#include "base/files/file_util.h"
-#include "base/lazy_instance.h"
#include "base/numerics/safe_conversions.h"
#include "base/strings/string16.h"
#include "base/strings/string_number_conversions.h"
@@ -26,13 +25,6 @@
namespace crash_reporter {
namespace internal {
-namespace {
-
-base::LazyInstance<crashpad::CrashpadClient>::Leaky g_crashpad_client =
- LAZY_INSTANCE_INITIALIZER;
-
-} // namespace
-
void GetPlatformCrashpadAnnotations(
std::map<std::string, std::string>* annotations) {
CrashReporterClient* crash_reporter_client = GetCrashReporterClient();
@@ -43,7 +35,14 @@ void GetPlatformCrashpadAnnotations(
exe_file, &product_name, &version, &special_build, &channel_name);
(*annotations)["prod"] = base::UTF16ToUTF8(product_name);
(*annotations)["ver"] = base::UTF16ToUTF8(version);
- (*annotations)["channel"] = base::UTF16ToUTF8(channel_name);
+#if defined(GOOGLE_CHROME_BUILD)
+ // Empty means stable.
+ const bool allow_empty_channel = true;
+#else
+ const bool allow_empty_channel = false;
+#endif
+ if (allow_empty_channel || !channel_name.empty())
+ (*annotations)["channel"] = base::UTF16ToUTF8(channel_name);
if (!special_build.empty())
(*annotations)["special"] = base::UTF16ToUTF8(special_build);
#if defined(ARCH_CPU_X86)
@@ -104,32 +103,48 @@ base::FilePath PlatformCrashpadInitialization(bool initial_client,
// If the handler is embedded in the binary (e.g. chrome, setup), we
// reinvoke it with --type=crashpad-handler. Otherwise, we use the
// standalone crashpad_handler.exe (for tests, etc.).
- std::vector<std::string> arguments;
+ std::vector<std::string> start_arguments;
if (embedded_handler) {
- arguments.push_back(std::string("--type=") + switches::kCrashpadHandler);
+ start_arguments.push_back(std::string("--type=") +
+ switches::kCrashpadHandler);
// The prefetch argument added here has to be documented in
// chrome_switches.cc, below the kPrefetchArgument* constants. A constant
// can't be used here because crashpad can't depend on Chrome.
- arguments.push_back("/prefetch:7");
+ start_arguments.push_back("/prefetch:7");
} else {
base::FilePath exe_dir = exe_file.DirName();
exe_file = exe_dir.Append(FILE_PATH_LITERAL("crashpad_handler.exe"));
}
- g_crashpad_client.Get().StartHandler(
- exe_file, database_path, metrics_path, url, process_annotations,
- arguments, false, false);
+ std::vector<std::string> arguments(start_arguments);
+
+ if (crash_reporter_client->ShouldMonitorCrashHandlerExpensively()) {
+ arguments.push_back("--monitor-self");
+ for (const std::string& start_argument : start_arguments) {
+ arguments.push_back(std::string("--monitor-self-argument=") +
+ start_argument);
+ }
+ }
+
+ // Set up --monitor-self-annotation even in the absence of --monitor-self so
+ // that minidumps produced by Crashpad's generate_dump tool will contain
+ // these annotations.
+ arguments.push_back(std::string("--monitor-self-annotation=ptype=") +
+ switches::kCrashpadHandler);
+
+ GetCrashpadClient().StartHandler(exe_file, database_path, metrics_path, url,
+ process_annotations, arguments, false,
+ false);
// If we're the browser, push the pipe name into the environment so child
// processes can connect to it. If we inherited another crashpad_handler's
// pipe name, we'll overwrite it here.
env->SetVar(kPipeNameVar,
- base::UTF16ToUTF8(g_crashpad_client.Get().GetHandlerIPCPipe()));
+ base::UTF16ToUTF8(GetCrashpadClient().GetHandlerIPCPipe()));
} else {
std::string pipe_name_utf8;
if (env->GetVar(kPipeNameVar, &pipe_name_utf8)) {
- g_crashpad_client.Get().SetHandlerIPCPipe(
- base::UTF8ToUTF16(pipe_name_utf8));
+ GetCrashpadClient().SetHandlerIPCPipe(base::UTF8ToUTF16(pipe_name_utf8));
}
}
@@ -218,7 +233,7 @@ extern "C" {
// releases of Chrome. Please contact syzygy-team@chromium.org before doing so!
int __declspec(dllexport) CrashForException(
EXCEPTION_POINTERS* info) {
- crash_reporter::internal::g_crashpad_client.Get().DumpAndCrash(info);
+ crash_reporter::GetCrashpadClient().DumpAndCrash(info);
return EXCEPTION_CONTINUE_SEARCH;
}
diff --git a/chromium/components/crash/content/app/fallback_crash_handler_launcher_win_unittest.cc b/chromium/components/crash/content/app/fallback_crash_handler_launcher_win_unittest.cc
index c19ae79d17d..07340432cec 100644
--- a/chromium/components/crash/content/app/fallback_crash_handler_launcher_win_unittest.cc
+++ b/chromium/components/crash/content/app/fallback_crash_handler_launcher_win_unittest.cc
@@ -143,9 +143,10 @@ TEST_F(FallbackCrashHandlerLauncherTest, LaunchAndWaitForHandler) {
// Because this process is heavily multithreaded it's going to be flaky
// and generally fraught with peril to try and grab a minidump of it.
// Instead, fire off a sacrificial process to do the testing.
- base::Process test_process = SpawnChild("TestCrashHandlerLauncherMain");
+ base::SpawnChildResult spawn_child =
+ SpawnChild("TestCrashHandlerLauncherMain");
int exit_code = 0;
- ASSERT_TRUE(test_process.WaitForExit(&exit_code));
+ ASSERT_TRUE(spawn_child.process.WaitForExit(&exit_code));
ASSERT_EQ(0, exit_code);
}
diff --git a/chromium/components/crash/content/app/fallback_crash_handler_win.cc b/chromium/components/crash/content/app/fallback_crash_handler_win.cc
index 2e3310d874d..01f63f364dd 100644
--- a/chromium/components/crash/content/app/fallback_crash_handler_win.cc
+++ b/chromium/components/crash/content/app/fallback_crash_handler_win.cc
@@ -479,6 +479,7 @@ bool FallbackCrashHandler::GenerateCrashDump(const std::string& product,
uint32_t minidump_type = MiniDumpWithUnloadedModules |
MiniDumpWithProcessThreadData |
+ MiniDumpWithFullMemoryInfo |
MiniDumpWithThreadInfo;
// Capture more detail for canary and dev channels. The prefix search caters
diff --git a/chromium/components/crash/content/app/fallback_crash_handler_win_unittest.cc b/chromium/components/crash/content/app/fallback_crash_handler_win_unittest.cc
index 13ca131f020..92c008ea804 100644
--- a/chromium/components/crash/content/app/fallback_crash_handler_win_unittest.cc
+++ b/chromium/components/crash/content/app/fallback_crash_handler_win_unittest.cc
@@ -169,12 +169,12 @@ TEST_F(FallbackCrashHandlerWinTest, GenerateCrashDump) {
cmd_line.AppendSwitchPath("directory", database_dir_.GetPath());
base::LaunchOptions options;
options.start_hidden = true;
- base::Process test_child = base::SpawnMultiProcessTestChild(
+ base::SpawnChildResult spawn_child = base::SpawnMultiProcessTestChild(
"FallbackCrashHandlerWinMain", cmd_line, options);
- ASSERT_TRUE(test_child.IsValid());
+ ASSERT_TRUE(spawn_child.process.IsValid());
int exit_code = -1;
- ASSERT_TRUE(test_child.WaitForExit(&exit_code));
+ ASSERT_TRUE(spawn_child.process.WaitForExit(&exit_code));
ASSERT_EQ(0, exit_code);
// Validate that the database contains one valid crash dump.
diff --git a/chromium/components/crash/content/app/fallback_crash_handling_win_unittest.cc b/chromium/components/crash/content/app/fallback_crash_handling_win_unittest.cc
index 7df6b20262a..02d69c5dd27 100644
--- a/chromium/components/crash/content/app/fallback_crash_handling_win_unittest.cc
+++ b/chromium/components/crash/content/app/fallback_crash_handling_win_unittest.cc
@@ -62,12 +62,12 @@ TEST_F(FallbackCrashHandlingTest, SetupAndRunAsFallbackCrashHandler) {
base::LaunchOptions options;
options.start_hidden = true;
- base::Process test_child = base::SpawnMultiProcessTestChild(
+ base::SpawnChildResult spawn_child = base::SpawnMultiProcessTestChild(
"FallbackCrashHandlingWinRunHandler", cmd_line, options);
- ASSERT_TRUE(test_child.IsValid());
+ ASSERT_TRUE(spawn_child.process.IsValid());
int exit_code = -1;
- ASSERT_TRUE(test_child.WaitForExit(&exit_code));
+ ASSERT_TRUE(spawn_child.process.WaitForExit(&exit_code));
ASSERT_EQ(kFallbackCrashTerminationCode, static_cast<uint32_t>(exit_code));
// Validate that the database contains one valid crash dump.
diff --git a/chromium/components/crash/content/app/run_as_crashpad_handler_win.cc b/chromium/components/crash/content/app/run_as_crashpad_handler_win.cc
index 20be2d108cf..6ea93489f1f 100644
--- a/chromium/components/crash/content/app/run_as_crashpad_handler_win.cc
+++ b/chromium/components/crash/content/app/run_as_crashpad_handler_win.cc
@@ -14,25 +14,46 @@
#include "base/strings/string16.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
+#include "third_party/crashpad/crashpad/client/crashpad_info.h"
+#include "third_party/crashpad/crashpad/client/simple_string_dictionary.h"
#include "third_party/crashpad/crashpad/handler/handler_main.h"
namespace crash_reporter {
-int RunAsCrashpadHandler(const base::CommandLine& command_line) {
+int RunAsCrashpadHandler(const base::CommandLine& command_line,
+ const char* process_type_switch) {
// Make sure this process terminates on OOM in the same mode as other Chrome
// processes.
base::EnableTerminationOnOutOfMemory();
+ // If the handler is started with --monitor-self, it'll need a ptype
+ // annotation set. It'll normally set one itself by being invoked with
+ // --monitor-self-annotation=ptype=crashpad-handler, but that leaves a window
+ // during self-monitoring initialization when the ptype is not set at all, so
+ // provide one here.
+ const std::string process_type =
+ command_line.GetSwitchValueASCII(process_type_switch);
+ if (!process_type.empty()) {
+ crashpad::SimpleStringDictionary* annotations =
+ new crashpad::SimpleStringDictionary();
+ annotations->SetKeyValue("ptype", process_type.c_str());
+ crashpad::CrashpadInfo* crashpad_info =
+ crashpad::CrashpadInfo::GetCrashpadInfo();
+ DCHECK(!crashpad_info->simple_annotations());
+ crashpad_info->set_simple_annotations(annotations);
+ }
+
std::vector<base::string16> argv = command_line.argv();
- const base::string16 process_type = L"--type=";
- argv.erase(std::remove_if(argv.begin(), argv.end(),
- [&process_type](const base::string16& str) {
- return base::StartsWith(
- str, process_type,
- base::CompareCase::SENSITIVE) ||
- (!str.empty() && str[0] == L'/');
- }),
- argv.end());
+ const base::string16 process_type_arg_prefix =
+ base::string16(L"--") + base::UTF8ToUTF16(process_type_switch) + L"=";
+ argv.erase(
+ std::remove_if(argv.begin(), argv.end(),
+ [&process_type_arg_prefix](const base::string16& str) {
+ return base::StartsWith(str, process_type_arg_prefix,
+ base::CompareCase::SENSITIVE) ||
+ (!str.empty() && str[0] == L'/');
+ }),
+ argv.end());
std::unique_ptr<char* []> argv_as_utf8(new char*[argv.size() + 1]);
std::vector<std::string> storage;
@@ -44,7 +65,7 @@ int RunAsCrashpadHandler(const base::CommandLine& command_line) {
argv_as_utf8[argv.size()] = nullptr;
argv.clear();
return crashpad::HandlerMain(static_cast<int>(storage.size()),
- argv_as_utf8.get());
+ argv_as_utf8.get(), nullptr);
}
} // namespace crash_reporter
diff --git a/chromium/components/crash/content/app/run_as_crashpad_handler_win.h b/chromium/components/crash/content/app/run_as_crashpad_handler_win.h
index 8bed61093af..ade72a01db9 100644
--- a/chromium/components/crash/content/app/run_as_crashpad_handler_win.h
+++ b/chromium/components/crash/content/app/run_as_crashpad_handler_win.h
@@ -12,10 +12,15 @@ class CommandLine;
namespace crash_reporter {
// Helper for running an embedded copy of crashpad_handler. Searches for and
-// removes --switches::kProcessType=xyz arguments in the command line, and all
+// removes --(process_type_switch)=xyz arguments in the command line, and all
// options starting with '/' (for "/prefetch:N"), and then runs
// crashpad::HandlerMain with the remaining arguments.
-int RunAsCrashpadHandler(const base::CommandLine& command_line);
+//
+// Normally, pass switches::kProcessType for process_type_switch. It's accepted
+// as a parameter because this component does not have access to content/, where
+// that variable lives.
+int RunAsCrashpadHandler(const base::CommandLine& command_line,
+ const char* process_type_switch);
} // namespace crash_reporter
diff --git a/chromium/components/crash/content/browser/crash_dump_observer_android.cc b/chromium/components/crash/content/browser/crash_dump_observer_android.cc
index bc5449f45df..72189b15d96 100644
--- a/chromium/components/crash/content/browser/crash_dump_observer_android.cc
+++ b/chromium/components/crash/content/browser/crash_dump_observer_android.cc
@@ -21,7 +21,8 @@ using content::BrowserThread;
namespace breakpad {
namespace {
-base::LazyInstance<CrashDumpObserver> g_instance = LAZY_INSTANCE_INITIALIZER;
+base::LazyInstance<CrashDumpObserver>::DestructorAtExit g_instance =
+ LAZY_INSTANCE_INITIALIZER;
}
// static
diff --git a/chromium/components/crash/content/browser/crash_dump_observer_android.h b/chromium/components/crash/content/browser/crash_dump_observer_android.h
index fbff47625db..3f049f31dd4 100644
--- a/chromium/components/crash/content/browser/crash_dump_observer_android.h
+++ b/chromium/components/crash/content/browser/crash_dump_observer_android.h
@@ -70,7 +70,7 @@ class CrashDumpObserver : public content::BrowserChildProcessObserver,
content::FileDescriptorInfo* mappings);
private:
- friend struct base::DefaultLazyInstanceTraits<CrashDumpObserver>;
+ friend struct base::LazyInstanceTraitsBase<CrashDumpObserver>;
CrashDumpObserver();
~CrashDumpObserver() override;