"""Script that is used by PRESUBMIT.py to check Android new infobar files.
This file checks for the following:
- whether new infobar identifier targeting Android is appended
- whether new infobar related files are introduced in Android related folder.
"""
import re
import os
import pathlib
INFOBAR_DELEGATE_H = 'components/infobars/core/infobar_delegate.h'
INFOBAR_ANDROID_FOLDERS = (
'chrome/browser/ui/android/infobars',
'chrome/android/java/src/org/chromium/chrome/browser/infobar')
def CheckDeprecationOnUpload(input_api, output_api):
"""
Returns result for all the presubmit upload checks for newly added infobars.
"""
result = []
result.extend(_CheckNewInfobar(input_api, output_api))
return result
def _IncludeFiles(f):
return pathlib.Path(f.LocalPath()).suffix in ('.h', '.cc', '.java')
def _CheckNewInfobar(input_api, output_api):
warnings = []
for f in input_api.AffectedFiles(include_deletes=False,
file_filter=_IncludeFiles):
if f.Action() == 'A' and (os.path.dirname(
f.LocalPath()) in INFOBAR_ANDROID_FOLDERS) and (
'infobar' in os.path.basename(f.LocalPath()).lower()):
warnings.append(' %s' % f.LocalPath())
if (f.LocalPath() == INFOBAR_DELEGATE_H):
contents = input_api.ReadFile(f)
p = re.compile('enum InfoBarIdentifier {(.*?)}',
re.IGNORECASE | re.DOTALL | re.MULTILINE)
ids = p.search(contents).group(1)
find_id = re.compile('(.*) =')
for line_number, line in f.ChangedContents():
if line not in ids:
continue
if line.strip().startswith('//'):
continue
match = find_id.search(line)
if not match:
continue
infobar_id = match.group(1)
if infobar_id.endswith("_ANDROID") or infobar_id.endswith("_MOBILE"):
warnings.append(' %s:%d\n \t%s' %
(f.LocalPath(), line_number, line.strip()))
if warnings:
return [
output_api.PresubmitPromptWarning(
'''
Android InfoBar Deprecation Check failed:
Your new code appears to add a new infobar on Android.
On Android, InfoBar UI will be deprecated in favor of the new Message UI.
All Android infobars are being migrated or have been migrated to Message UI.
See components/messages/README.md or reach out to components/messages/OWNERS
for more information.
''', warnings)
]
return []