12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // Copyright 2015 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "extensions/browser/bad_message.h"
- #include "base/debug/crash_logging.h"
- #include "base/logging.h"
- #include "base/metrics/histogram_functions.h"
- #include "base/strings/string_number_conversions.h"
- #include "content/public/browser/browser_message_filter.h"
- #include "content/public/browser/render_process_host.h"
- namespace extensions {
- namespace bad_message {
- namespace {
- void LogBadMessage(BadMessageReason reason) {
- LOG(ERROR) << "Terminating extension renderer for bad IPC message, reason "
- << reason;
- base::UmaHistogramSparse("Stability.BadMessageTerminated.Extensions", reason);
- }
- base::debug::CrashKeyString* GetBadMessageCrashKey() {
- static auto* crash_key = base::debug::AllocateCrashKeyString(
- "extension_bad_message_reason", base::debug::CrashKeySize::Size64);
- return crash_key;
- }
- } // namespace
- void ReceivedBadMessage(content::RenderProcessHost* host,
- BadMessageReason reason) {
- base::debug::ScopedCrashKeyString crash_key(GetBadMessageCrashKey(),
- base::NumberToString(reason));
- LogBadMessage(reason);
- host->ShutdownForBadMessage(
- content::RenderProcessHost::CrashReportMode::GENERATE_CRASH_DUMP);
- }
- void ReceivedBadMessage(int render_process_id, BadMessageReason reason) {
- content::RenderProcessHost* rph =
- content::RenderProcessHost::FromID(render_process_id);
- // The render process was already terminated.
- if (!rph)
- return;
- ReceivedBadMessage(rph, reason);
- }
- void ReceivedBadMessage(content::BrowserMessageFilter* filter,
- BadMessageReason reason) {
- base::debug::ScopedCrashKeyString crash_key(GetBadMessageCrashKey(),
- base::NumberToString(reason));
- LogBadMessage(reason);
- filter->ShutdownForBadMessage();
- }
- } // namespace bad_message
- } // namespace extensions
|