1 // Copyright 2015 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_BROWSER_BAD_MESSAGE_H_ 6 #define CONTENT_BROWSER_BAD_MESSAGE_H_ 7 8 #include "base/debug/crash_logging.h" 9 #include "content/common/content_export.h" 10 11 namespace content { 12 class BrowserMessageFilter; 13 class RenderProcessHost; 14 15 namespace bad_message { 16 17 // The browser process often chooses to terminate a renderer if it receives 18 // a bad IPC message. The reasons are tracked for metrics. 19 // 20 // Content embedders should implement their own bad message statistics but 21 // should use similar histogram names to make analysis easier. 22 // 23 // NOTE: Do not remove or reorder elements in this list. Add new entries at the 24 // end. Items may be renamed but do not change the values. We rely on the enum 25 // values in histograms. 26 enum BadMessageReason { 27 NC_IN_PAGE_NAVIGATION = 0, 28 RFH_CAN_COMMIT_URL_BLOCKED = 1, 29 RFH_CAN_ACCESS_FILES_OF_PAGE_STATE = 2, 30 RFH_SANDBOX_FLAGS = 3, 31 RFH_NO_PROXY_TO_PARENT = 4, 32 RPH_DESERIALIZATION_FAILED = 5, 33 OBSOLETE_RVH_CAN_ACCESS_FILES_OF_PAGE_STATE = 6, 34 OBSOLETE_RFH_FILE_CHOOSER_PATH = 7, 35 OBSOLETE_RWH_SYNTHETIC_GESTURE = 8, 36 OBSOLETE_RWH_FOCUS = 9, 37 OBSOLETE_RWH_BLUR = 10, 38 RWH_SHARED_BITMAP = 11, 39 OBSOLETE_RWH_BAD_ACK_MESSAGE = 12, 40 OBSOLETE_RWHVA_SHARED_MEMORY = 13, 41 SERVICE_WORKER_BAD_URL = 14, 42 OBSOLETE_WC_INVALID_FRAME_SOURCE = 15, 43 OBSOLETE_RWHVM_UNEXPECTED_FRAME_TYPE = 16, 44 RFPH_DETACH = 17, 45 DFH_BAD_EMBEDDER_MESSAGE = 18, 46 NC_AUTO_SUBFRAME = 19, 47 CSDH_NOT_RECOGNIZED = 20, 48 OBSOLETE_DSMF_OPEN_STORAGE = 21, 49 DSMF_LOAD_STORAGE = 22, 50 OBSOLETE_DBMF_INVALID_ORIGIN_ON_OPEN = 23, 51 OBSOLETE_DBMF_DB_NOT_OPEN_ON_MODIFY = 24, 52 OBSOLETE_DBMF_DB_NOT_OPEN_ON_CLOSE = 25, 53 OBSOLETE_DBMF_INVALID_ORIGIN_ON_SQLITE_ERROR = 26, 54 RDH_INVALID_PRIORITY = 27, 55 OBSOLETE_RDH_REQUEST_NOT_TRANSFERRING = 28, 56 RDH_BAD_DOWNLOAD = 29, 57 OBSOLETE_NMF_NO_PERMISSION_SHOW = 30, 58 OBSOLETE_NMF_NO_PERMISSION_CLOSE = 31, 59 OBSOLETE_NMF_NO_PERMISSION_VERIFY = 32, 60 MH_INVALID_MIDI_PORT = 33, 61 MH_SYS_EX_PERMISSION = 34, 62 ACDH_REGISTER = 35, 63 ACDH_UNREGISTER = 36, 64 ACDH_SET_SPAWNING = 37, 65 ACDH_SELECT_CACHE = 38, 66 OBSOLETE_ACDH_SELECT_CACHE_FOR_WORKER = 39, 67 ACDH_SELECT_CACHE_FOR_SHARED_WORKER = 40, 68 ACDH_MARK_AS_FOREIGN_ENTRY = 41, 69 ACDH_PENDING_REPLY_IN_GET_STATUS = 42, 70 ACDH_GET_STATUS = 43, 71 ACDH_PENDING_REPLY_IN_START_UPDATE = 44, 72 ACDH_START_UPDATE = 45, 73 ACDH_PENDING_REPLY_IN_SWAP_CACHE = 46, 74 ACDH_SWAP_CACHE = 47, 75 SWDH_NOT_HANDLED = 48, 76 OBSOLETE_SWDH_REGISTER_BAD_URL = 49, 77 OBSOLETE_SWDH_REGISTER_NO_HOST = 50, 78 OBSOLETE_SWDH_REGISTER_CANNOT = 51, 79 OBSOLETE_SWDH_UNREGISTER_BAD_URL = 52, 80 OBSOLETE_SWDH_UNREGISTER_NO_HOST = 53, 81 OBSOLETE_SWDH_UNREGISTER_CANNOT = 54, 82 OBSOLETE_SWDH_GET_REGISTRATION_BAD_URL = 55, 83 OBSOLETE_SWDH_GET_REGISTRATION_NO_HOST = 56, 84 OBSOLETE_SWDH_GET_REGISTRATION_CANNOT = 57, 85 OBSOLETE_SWDH_GET_REGISTRATION_FOR_READY_NO_HOST = 58, 86 OBSOLETE_SWDH_GET_REGISTRATION_FOR_READY_ALREADY_IN_PROGRESS = 59, 87 SWDH_POST_MESSAGE = 60, 88 OBSOLETE_SWDH_PROVIDER_CREATED_NO_HOST = 61, 89 OBSOLETE_SWDH_PROVIDER_DESTROYED_NO_HOST = 62, 90 OBSOLETE_SWDH_SET_HOSTED_VERSION_NO_HOST = 63, 91 OBSOLETE_SWDH_SET_HOSTED_VERSION = 64, 92 OBSOLETE_SWDH_WORKER_SCRIPT_LOAD_NO_HOST = 65, 93 SWDH_INCREMENT_WORKER_BAD_HANDLE = 66, 94 SWDH_DECREMENT_WORKER_BAD_HANDLE = 67, 95 OBSOLETE_SWDH_INCREMENT_REGISTRATION_BAD_HANDLE = 68, 96 OBSOLETE_SWDH_DECREMENT_REGISTRATION_BAD_HANDLE = 69, 97 SWDH_TERMINATE_BAD_HANDLE = 70, 98 OBSOLETE_FAMF_APPEND_ITEM_TO_BLOB = 71, 99 OBSOLETE_FAMF_APPEND_SHARED_MEMORY_TO_BLOB = 72, 100 OBSOLETE_FAMF_MALFORMED_STREAM_URL = 73, 101 OBSOLETE_FAMF_APPEND_ITEM_TO_STREAM = 74, 102 OBSOLETE_FAMF_APPEND_SHARED_MEMORY_TO_STREAM = 75, 103 OBSOLETE_IDBDH_CAN_READ_FILE = 76, 104 OBSOLETE_IDBDH_GET_OR_TERMINATE = 77, 105 RFMF_SET_COOKIE_BAD_ORIGIN = 78, 106 RFMF_GET_COOKIES_BAD_ORIGIN = 79, 107 OBSOLETE_SWDH_GET_REGISTRATIONS_NO_HOST = 80, 108 OBSOLETE_SWDH_GET_REGISTRATIONS_INVALID_ORIGIN = 81, 109 OBSOLETE_AOAH_UNAUTHORIZED_URL = 82, 110 BDH_INVALID_SERVICE_ID = 83, 111 OBSOLETE_RFH_COMMIT_DESERIALIZATION_FAILED = 84, 112 BDH_INVALID_CHARACTERISTIC_ID = 85, 113 OBSOLETE_SWDH_UPDATE_NO_HOST = 86, 114 OBSOLETE_SWDH_UPDATE_BAD_REGISTRATION_ID = 87, 115 OBSOLETE_SWDH_UPDATE_CANNOT = 88, 116 OBSOLETE_SWDH_UNREGISTER_BAD_REGISTRATION_ID = 89, 117 BDH_INVALID_WRITE_VALUE_LENGTH = 90, 118 OBSOLETE_WC_MEMORY_CACHE_RESOURCE_BAD_SECURITY_INFO = 91, 119 OBSOLETE_WC_RENDERER_DID_NAVIGATE_BAD_SECURITY_INFO = 92, 120 OBSOLETE_BDH_DUPLICATE_REQUEST_DEVICE_ID = 93, 121 CSDH_INVALID_ORIGIN = 94, 122 OBSOLETE_RDH_ILLEGAL_ORIGIN = 95, 123 OBSOLETE_RDH_UNAUTHORIZED_HEADER_REQUEST = 96, 124 RDH_INVALID_URL = 97, 125 OBSOLETE_BDH_CHARACTERISTIC_ALREADY_SUBSCRIBED = 98, 126 RFH_OWNER_PROPERTY = 99, 127 OBSOLETE_BDH_EMPTY_OR_INVALID_FILTERS = 100, 128 OBSOLETE_WC_CONTENT_WITH_CERT_ERRORS_BAD_SECURITY_INFO = 101, 129 OBSOLETE_RFMF_RENDERER_FAKED_ITS_OWN_DEATH = 102, 130 DWNLD_INVALID_SAVABLE_RESOURCE_LINKS_RESPONSE = 103, 131 OBSOLETE_DWNLD_INVALID_SERIALIZE_AS_MHTML_RESPONSE = 104, 132 BDH_DEVICE_NOT_ALLOWED_FOR_ORIGIN = 105, 133 OBSOLETE_ACI_WRONG_STORAGE_PARTITION = 106, 134 OBSOLETE_RDHI_WRONG_STORAGE_PARTITION = 107, 135 RDH_INVALID_REQUEST_ID = 108, 136 BDH_SERVICE_NOT_ALLOWED_FOR_ORIGIN = 109, 137 WSI_UNEXPECTED_ADD_CHANNEL_REQUEST = 110, 138 WSI_UNEXPECTED_SEND_FRAME = 111, 139 RFH_UNEXPECTED_LOAD_START = 112, 140 NMF_INVALID_ARGUMENT = 113, 141 RFH_INVALID_ORIGIN_ON_COMMIT = 114, 142 BDH_UUID_REGISTERED = 115, 143 BDH_CONSTRUCTION_FAILED = 116, 144 BDH_INVALID_REFCOUNT_OPERATION = 117, 145 BDH_INVALID_URL_OPERATION = 118, 146 OBSOLETE_IDBDH_INVALID_ORIGIN = 119, 147 OBSOLETE_RFH_FAIL_PROVISIONAL_LOAD_NO_HANDLE = 120, 148 OBSOLETE_RFH_FAIL_PROVISIONAL_LOAD_NO_ERROR = 121, 149 NI_IN_PAGE_NAVIGATION = 122, 150 RPH_MOJO_PROCESS_ERROR = 123, 151 OBSOLETE_DBMF_INVALID_ORIGIN_ON_GET_SPACE = 124, 152 OBSOLETE_DBMF_INVALID_ORIGIN_ON_MODIFIED = 125, 153 OBSOLETE_DBMF_INVALID_ORIGIN_ON_CLOSED = 126, 154 OBSOLETE_WSI_INVALID_HEADER_VALUE = 127, 155 OBSOLETE_SWDH_SET_HOSTED_VERSION_INVALID_HOST = 128, 156 OBSOLETE_SWDH_SET_HOSTED_VERSION_PROCESS_MISMATCH = 129, 157 OBSOLETE_MSDH_INVALID_FRAME_ID = 130, 158 SDH_INVALID_PORT_RANGE = 131, 159 SCO_INVALID_ARGUMENT = 132, 160 RFH_INCONSISTENT_DEVTOOLS_MESSAGE = 133, 161 DSH_DUPLICATE_CONNECTION_ID = 134, 162 DSH_NOT_CREATED_SESSION_ID = 135, 163 DSH_NOT_ALLOCATED_SESSION_ID = 136, 164 DSH_DELETED_SESSION_ID = 137, 165 OBSOLETE_DSH_WRONG_STORAGE_PARTITION = 138, 166 BDH_DISALLOWED_ORIGIN = 139, 167 ARH_CREATED_STREAM_WITHOUT_AUTHORIZATION = 140, 168 MDDH_INVALID_DEVICE_TYPE_REQUEST = 141, 169 OBSOLETE_MDDH_UNAUTHORIZED_ORIGIN = 142, 170 OBSOLETE_SWDH_ENABLE_NAVIGATION_PRELOAD_NO_HOST = 143, 171 OBSOLETE_SWDH_ENABLE_NAVIGATION_PRELOAD_INVALID_ORIGIN = 144, 172 OBSOLETE_SWDH_ENABLE_NAVIGATION_PRELOAD_BAD_REGISTRATION_ID = 145, 173 OBSOLETE_RDH_TRANSFERRING_REQUEST_NOT_FOUND = 174 146, // Disabled - crbug.com/659613. 175 OBSOLETE_RDH_TRANSFERRING_NONNAVIGATIONAL_REQUEST = 147, 176 OBSOLETE_SWDH_GET_NAVIGATION_PRELOAD_STATE_NO_HOST = 148, 177 OBSOLETE_SWDH_GET_NAVIGATION_PRELOAD_STATE_INVALID_ORIGIN = 149, 178 OBSOLETE_SWDH_GET_NAVIGATION_PRELOAD_STATE_BAD_REGISTRATION_ID = 150, 179 OBSOLETE_SWDH_SET_NAVIGATION_PRELOAD_HEADER_NO_HOST = 151, 180 OBSOLETE_SWDH_SET_NAVIGATION_PRELOAD_HEADER_INVALID_ORIGIN = 152, 181 OBSOLETE_SWDH_SET_NAVIGATION_PRELOAD_HEADER_BAD_REGISTRATION_ID = 153, 182 OBSOLETE_SWDH_SET_NAVIGATION_PRELOAD_HEADER_BAD_VALUE = 154, 183 MDDH_INVALID_SUBSCRIPTION_REQUEST = 155, 184 OBSOLETE_MDDH_INVALID_UNSUBSCRIPTION_REQUEST = 156, 185 OBSOLETE_AOAH_NONSENSE_DEVICE_ID = 157, 186 BDH_INVALID_OPTIONS = 158, 187 RFH_DID_ADD_CONSOLE_MESSAGE_BAD_SEVERITY = 159, 188 AIRH_VOLUME_OUT_OF_RANGE = 160, 189 BDH_INVALID_DESCRIPTOR_ID = 161, 190 OBSOLETE_RWH_INVALID_BEGIN_FRAME_ACK_DID_NOT_SWAP = 162, 191 OBSOLETE_RWH_INVALID_BEGIN_FRAME_ACK_COMPOSITOR_FRAME = 163, 192 BFSI_INVALID_DEVELOPER_ID = 164, 193 BFSI_INVALID_REQUESTS = 165, 194 BFSI_INVALID_TITLE = 166, 195 RWH_INVALID_FRAME_TOKEN = 167, 196 RWH_BAD_FRAME_SINK_REQUEST = 168, 197 RWH_SURFACE_INVARIANTS_VIOLATION = 169, 198 ILLEGAL_UPLOAD_PARAMS = 170, 199 RFH_BASE_URL_FOR_DATA_URL_SPECIFIED = 171, 200 OBSOLETE_RFPH_ILLEGAL_UPLOAD_PARAMS = 172, 201 OBSOLETE_SWDH_PROVIDER_CREATED_ILLEGAL_TYPE = 173, 202 OBSOLETE_SWDH_PROVIDER_CREATED_ILLEGAL_TYPE_NOT_WINDOW = 174, 203 OBSOLETE_SWDH_PROVIDER_CREATED_ILLEGAL_TYPE_SERVICE_WORKER = 175, 204 OBSOLETE_SWDH_PROVIDER_CREATED_DUPLICATE_ID = 176, 205 OBSOLETE_SWDH_PROVIDER_CREATED_BAD_ID = 177, 206 RFH_KEEP_ALIVE_HANDLE_REQUESTED_INCORRECTLY = 178, 207 BFSI_INVALID_UNIQUE_ID = 179, 208 BPE_UNEXPECTED_MESSAGE_BEFORE_BPGM_CREATION = 180, 209 WEBUI_SEND_FROM_UNAUTHORIZED_PROCESS = 181, 210 CPFC_RESIZE_PARAMS_CHANGED_LOCAL_SURFACE_ID_UNCHANGED = 182, 211 BPG_RESIZE_PARAMS_CHANGED_LOCAL_SURFACE_ID_UNCHANGED = 183, 212 RFH_NEGATIVE_SELECTION_START_OFFSET = 184, 213 WEBUI_BAD_SCHEME_ACCESS = 185, 214 CSDH_UNEXPECTED_OPERATION = 186, 215 RMF_BAD_URL_CACHEABLE_METADATA = 187, 216 RFH_INTERFACE_PROVIDER_MISSING = 188, 217 OBSOLETE_RFH_INTERFACE_PROVIDER_SUPERFLUOUS = 189, 218 AIRH_UNEXPECTED_BITSTREAM = 190, 219 ARH_UNEXPECTED_BITSTREAM = 191, 220 RDH_NULL_CLIENT = 192, 221 RVH_WEB_UI_BINDINGS_MISMATCH = 193, 222 WCI_NEW_WIDGET_PROCESS_MISMATCH = 194, 223 AUTH_INVALID_EFFECTIVE_DOMAIN = 195, 224 AUTH_INVALID_RELYING_PARTY = 196, 225 RWH_COPY_REQUEST_ATTEMPT = 197, 226 SYNC_COMPOSITOR_NO_FUTURE_FRAME = 198, 227 SYNC_COMPOSITOR_NO_BEGIN_FRAME = 199, 228 WEBUI_BAD_HOST_ACCESS = 200, 229 OBSOLETE_RFMF_BLOB_URL_TOKEN_FOR_NON_BLOB_URL = 201, 230 PERMISSION_SERVICE_BAD_PERMISSION_DESCRIPTOR = 202, 231 BLOB_URL_TOKEN_FOR_NON_BLOB_URL = 203, 232 OBSOLETE_RFPH_BLOB_URL_TOKEN_FOR_NON_BLOB_URL = 204, 233 RFH_ERROR_PROCESS_NON_ERROR_COMMIT = 205, 234 RFH_ERROR_PROCESS_NON_UNIQUE_ORIGIN_COMMIT = 206, 235 RFH_CANNOT_RENDER_FALLBACK_CONTENT = 207, 236 RFH_CHILD_FRAME_NEEDS_OWNER_ELEMENT_TYPE = 208, 237 OBSOLETE_RFH_INVALID_WEB_REPORTING_CRASH_ID = 209, 238 RFH_DETACH_MAIN_FRAME = 210, 239 RFH_BROWSER_INTERFACE_BROKER_MISSING = 211, 240 RFPH_POST_MESSAGE_INVALID_SOURCE_ORIGIN = 212, 241 INVALID_INITIATOR_ORIGIN = 213, 242 RFHI_BEGIN_NAVIGATION_MISSING_INITIATOR_ORIGIN = 214, 243 RFHI_BEGIN_NAVIGATION_NON_WEBBY_TRANSITION = 215, 244 RFH_NO_MATCHING_NAVIGATION_REQUEST_ON_COMMIT = 216, 245 AUTH_INVALID_ICON_URL = 217, 246 MDDH_INVALID_STREAM_SELECTION_INFO = 218, 247 REGISTER_PROTOCOL_HANDLER_INVALID_URL = 219, 248 NC_SAME_DOCUMENT_POST_COMMIT_ERROR = 220, 249 RFH_INVALID_WEB_UI_CONTROLLER = 221, 250 RFPH_ADVANCE_FOCUS_INTO_PORTAL = 222, 251 RFH_UNEXPECTED_EMBEDDING_TOKEN = 223, 252 RFH_MISSING_EMBEDDING_TOKEN = 224, 253 RFH_BAD_DOCUMENT_POLICY_HEADER = 225, 254 RFMF_INVALID_PLUGIN_EMBEDDER_ORIGIN = 226, 255 RFH_INVALID_CALL_FROM_NOT_MAIN_FRAME = 227, 256 INPUT_ROUTER_INVALID_EVENT_SOURCE = 228, 257 RFH_INACTIVE_CHECK_FROM_SPECULATIVE_RFH = 229, 258 RFH_SUBFRAME_CAPTURE_ON_MAIN_FRAME = 230, 259 RFH_CSP_ATTRIBUTE = 231, 260 RFH_RECEIVED_ASSOCIATED_MESSAGE_WHILE_BFCACHED = 232, 261 RWH_CLOSE_PORTAL = 233, 262 MSDH_INVALID_STREAM_TYPE = 234, 263 RFH_CREATE_CHILD_FRAME_TOKENS_NOT_FOUND = 235, 264 265 // Please add new elements here. The naming convention is abbreviated class 266 // name (e.g. RenderFrameHost becomes RFH) plus a unique description of the 267 // reason. After making changes, you MUST update histograms.xml by running: 268 // "python tools/metrics/histograms/update_bad_message_reasons.py" 269 BAD_MESSAGE_MAX 270 }; 271 272 // Called when the browser receives a bad IPC message from a renderer process on 273 // the UI thread. Logs the event, records a histogram metric for the |reason|, 274 // and terminates the process for |host|. 275 void ReceivedBadMessage(RenderProcessHost* host, BadMessageReason reason); 276 277 // Equivalent to the above, but callable from any thread. 278 CONTENT_EXPORT void ReceivedBadMessage(int render_process_id, 279 BadMessageReason reason); 280 281 // Called when a browser message filter receives a bad IPC message from a 282 // renderer or other child process. Logs the event, records a histogram metric 283 // for the |reason|, and terminates the process for |filter|. 284 void ReceivedBadMessage(BrowserMessageFilter* filter, BadMessageReason reason); 285 286 // Site isolation. These keys help debug renderer kills such as 287 // https://crbug.com/773140. 288 // Retuns a key for logging a requested SiteInfo. 289 base::debug::CrashKeyString* GetRequestedSiteInfoKey(); 290 291 } // namespace bad_message 292 } // namespace content 293 294 #endif // CONTENT_BROWSER_BAD_MESSAGE_H_ 295