blob: 539a9c948c620aaf7fcbee1dd6b48d24f57f3ae9 [file]
# Copyright 2026 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Presubmit script for content/.
See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
for more details about the presubmit API built into depot_tools.
"""
_WARN_AGAINST_DCHECK_PREFIXES = (
'content/browser/renderer_host/navigation_request.h',
'content/browser/renderer_host/navigation_request.cc',
'content/browser/renderer_host/render_frame_host_android.cc',
'content/browser/renderer_host/render_frame_host_csp_context.cc',
'content/browser/renderer_host/render_frame_host_factory.cc',
'content/browser/renderer_host/render_frame_host_impl.h',
'content/browser/renderer_host/render_frame_host_impl.cc',
'content/browser/renderer_host/render_frame_host_manager.h',
'content/browser/renderer_host/render_frame_host_manager.cc',
# TODO(crbug.com/497761255): Enable this for:
# - content/browser/ (root files)
# - content/browser/renderer_host/
# - content/browser/loader/
# - content/browser/network/
# - content/browser/security/
)
def _WarnAgainstDCHECK(input_api, output_api):
"""
Warn against adding new DCHECKs. CHECKS are preferred in these files, because
they are cheap and cause an immediate crash, as opposed to a potential
vulnerability that could be exploited in the wild.
See go/check-content-navigation for details.
"""
problems = []
def FilterFile(affected_file):
path = affected_file.LocalPath()
for prefix in _WARN_AGAINST_DCHECK_PREFIXES:
if path.startswith(prefix):
return True
return False
dcheck_re = input_api.re.compile(r'\bDCHECK(?!_IS_ON\b)')
for f in input_api.AffectedSourceFiles(FilterFile):
for line_num, line in f.ChangedContents():
if dcheck_re.search(line):
problems.append(f'{f.LocalPath()}:{line_num}: {line.strip()}')
if problems:
return [output_api.PresubmitPromptWarning(
'DCHECK is discouraged in this file. CHECKs are cheap and are '
'preferred when possible.',
problems)]
return []
def CheckChangeOnUpload(input_api, output_api):
return _WarnAgainstDCHECK(input_api, output_api)
def CheckChangeOnCommit(input_api, output_api):
return _WarnAgainstDCHECK(input_api, output_api)