// Copyright 2015 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_BAD_MESSAGE_H_ #define CONTENT_BROWSER_BAD_MESSAGE_H_ #include "base/debug/crash_logging.h" #include "content/common/buildflags.h" namespace content { class BrowserMessageFilter; class RenderProcessHost; namespace bad_message { // The browser process often chooses to terminate a renderer if it receives // a bad IPC message. The reasons are tracked for metrics. // // Content embedders should implement their own bad message statistics but // should use similar histogram names to make analysis easier. // // NOTE: Do not remove or reorder elements in this list. Add new entries at the // end. Items may be renamed but do not change the values. We rely on the enum // values in histograms. enum BadMessageReason { … }; // Called when the browser receives a bad IPC message from a renderer process on // the UI thread. Logs the event, records a histogram metric for the |reason|, // and terminates the process for |host|. void ReceivedBadMessage(RenderProcessHost* host, BadMessageReason reason); // Equivalent to the above, but callable from any thread. void ReceivedBadMessage(int render_process_id, BadMessageReason reason); #if BUILDFLAG(CONTENT_ENABLE_LEGACY_IPC) // Called when a browser message filter receives a bad IPC message from a // renderer or other child process. Logs the event, records a histogram metric // for the |reason|, and terminates the process for |filter|. void ReceivedBadMessage(BrowserMessageFilter* filter, BadMessageReason reason); #endif // Site isolation. These keys help debug renderer kills such as // https://crbug.com/773140. // Retuns a key for logging a requested SiteInfo. base::debug::CrashKeyString* GetRequestedSiteInfoKey(); } // namespace bad_message } // namespace content #endif // CONTENT_BROWSER_BAD_MESSAGE_H_