summaryrefslogtreecommitdiff
path: root/chromium/PRESUBMIT.py
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2019-02-13 15:05:36 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2019-02-14 10:33:47 +0000
commite684a3455bcc29a6e3e66a004e352dea4e1141e7 (patch)
treed55b4003bde34d7d05f558f02cfd82b2a66a7aac /chromium/PRESUBMIT.py
parent2b94bfe47ccb6c08047959d1c26e392919550e86 (diff)
downloadqtwebengine-chromium-e684a3455bcc29a6e3e66a004e352dea4e1141e7.tar.gz
BASELINE: Update Chromium to 72.0.3626.110 and Ninja to 1.9.0
Change-Id: Ic57220b00ecc929a893c91f5cc552f5d3e99e922 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/PRESUBMIT.py')
-rw-r--r--chromium/PRESUBMIT.py147
1 files changed, 71 insertions, 76 deletions
diff --git a/chromium/PRESUBMIT.py b/chromium/PRESUBMIT.py
index 2391c99652e..c3db09847f8 100644
--- a/chromium/PRESUBMIT.py
+++ b/chromium/PRESUBMIT.py
@@ -616,8 +616,8 @@ _KNOWN_INVALID_JSON_FILE_PATTERNS = [
r'test[\\/]data[\\/]',
r'^components[\\/]policy[\\/]resources[\\/]policy_templates\.json$',
r'^third_party[\\/]protobuf[\\/]',
- r'^third_party[\\/]WebKit[\\/]LayoutTests[\\/]external[\\/]wpt[\\/]',
r'^third_party[\\/]blink[\\/]renderer[\\/]devtools[\\/]protocol\.json$',
+ r'^third_party[\\/]blink[\\/]web_tests[\\/]external[\\/]wpt[\\/]',
]
@@ -629,6 +629,7 @@ _VALID_OS_MACROS = (
'OS_BSD',
'OS_CAT', # For testing.
'OS_CHROMEOS',
+ 'OS_CYGWIN', # third_party code.
'OS_FREEBSD',
'OS_FUCHSIA',
'OS_IOS',
@@ -666,12 +667,13 @@ _ANDROID_SPECIFIC_PYDEPS_FILES = [
'build/android/gyp/create_test_runner_script.pydeps',
'build/android/gyp/create_tool_wrapper.pydeps',
'build/android/gyp/desugar.pydeps',
+ 'build/android/gyp/dexsplitter.pydeps',
'build/android/gyp/dex.pydeps',
'build/android/gyp/dist_aar.pydeps',
'build/android/gyp/emma_instr.pydeps',
'build/android/gyp/filter_zip.pydeps',
'build/android/gyp/gcc_preprocess.pydeps',
- 'build/android/gyp/generate_proguarded_module_jar.pydeps',
+ 'build/android/gyp/generate_linker_version_script.pydeps',
'build/android/gyp/ijar.pydeps',
'build/android/gyp/java_cpp_enum.pydeps',
'build/android/gyp/javac.pydeps',
@@ -690,8 +692,8 @@ _ANDROID_SPECIFIC_PYDEPS_FILES = [
'build/android/test_runner.pydeps',
'build/android/test_wrapper/logdog_wrapper.pydeps',
'build/protoc_java.pydeps',
- 'build/secondary/third_party/android_platform/'
- 'development/scripts/stack.pydeps',
+ ('build/secondary/third_party/android_platform/'
+ 'development/scripts/stack.pydeps'),
'net/tools/testserver/testserver.pydeps',
]
@@ -715,7 +717,7 @@ _KNOWN_ROBOTS = set(
) | set('%s@appspot.gserviceaccount.com' % s for s in ('findit-for-me',)
) | set('%s@developer.gserviceaccount.com' % s for s in ('3su6n15k.default',)
) | set('%s@chops-service-accounts.iam.gserviceaccount.com' % s
- for s in ('v8-ci-autoroll-builder',)
+ for s in ('v8-ci-autoroll-builder', 'wpt-autoroller',)
) | set('%s@skia-public.iam.gserviceaccount.com' % s
for s in ('chromium-autoroll',)
) | set('%s@skia-corp.google.com.iam.gserviceaccount.com' % s
@@ -1659,6 +1661,7 @@ def _CheckSpamLogging(input_api, output_api):
r"^ui[\\/]base[\\/]resource[\\/]data_pack.cc$",
r"^ui[\\/]aura[\\/]bench[\\/]bench_main\.cc$",
r"^ui[\\/]ozone[\\/]platform[\\/]cast[\\/]",
+ r"^webrunner[\\/]browser[\\/]frame_impl.cc$",
r"^storage[\\/]browser[\\/]fileapi[\\/]" +
r"dump_file_system.cc$",
r"^headless[\\/]app[\\/]headless_shell\.cc$"))
@@ -2716,70 +2719,6 @@ def _CheckNoDeprecatedJs(input_api, output_api):
return results
-def _CheckForRiskyJsArrowFunction(line_number, line):
- if ' => ' in line:
- return "line %d, is using an => (arrow) function\n %s\n" % (
- line_number, line)
- return ''
-
-
-def _CheckForRiskyJsConstLet(input_api, line_number, line):
- if input_api.re.match('^\s*(const|let)\s', line):
- return "line %d, is using const/let keyword\n %s\n" % (
- line_number, line)
- return ''
-
-
-def _CheckForRiskyJsFeatures(input_api, output_api):
- maybe_ios_js = [r"^(ios|components|ui\/webui\/resources)\/.+\.js$"]
- # 'ui/webui/resources/cr_components are not allowed on ios'
- not_ios_filter = (r".*ui\/webui\/resources\/cr_components.*", )
- file_filter = lambda f: input_api.FilterSourceFile(f, white_list=maybe_ios_js,
- black_list=not_ios_filter)
- results = []
- for f in input_api.AffectedFiles(file_filter=file_filter):
- arrow_error_lines = []
- const_let_error_lines = []
- for lnum, line in f.ChangedContents():
- arrow_error_lines += filter(None, [
- _CheckForRiskyJsArrowFunction(lnum, line),
- ])
-
- const_let_error_lines += filter(None, [
- _CheckForRiskyJsConstLet(input_api, lnum, line),
- ])
-
- if arrow_error_lines:
- arrow_error_lines = map(
- lambda e: "%s:%s" % (f.LocalPath(), e), arrow_error_lines)
- results.append(
- output_api.PresubmitPromptWarning('\n'.join(arrow_error_lines + [
-"""
-Use of => (arrow) operator detected in:
-%s
-Please ensure your code does not run on iOS9 (=> (arrow) does not work there).
-https://chromium.googlesource.com/chromium/src/+/master/styleguide/web/es6.md#Arrow-Functions
-""" % f.LocalPath()
- ])))
-
- if const_let_error_lines:
- const_let_error_lines = map(
- lambda e: "%s:%s" % (f.LocalPath(), e), const_let_error_lines)
- results.append(
- output_api.PresubmitPromptWarning('\n'.join(const_let_error_lines + [
-"""
-Use of const/let keywords detected in:
-%s
-Please ensure your code does not run on iOS9 because const/let is not fully
-supported.
-https://chromium.googlesource.com/chromium/src/+/master/styleguide/web/es6.md#let-Block_Scoped-Variables
-https://chromium.googlesource.com/chromium/src/+/master/styleguide/web/es6.md#const-Block_Scoped-Constants
-""" % f.LocalPath()
- ])))
-
- return results
-
-
def _CheckForRelativeIncludes(input_api, output_api):
# Need to set the sys.path so PRESUBMIT_test.py runs properly
import sys
@@ -2843,19 +2782,29 @@ def _CheckWatchlistDefinitionsEntrySyntax(key, value, ast):
return None
-def _CheckWatchlistsEntrySyntax(key, value, ast):
+def _CheckWatchlistsEntrySyntax(key, value, ast, email_regex):
if not isinstance(key, ast.Str):
return 'Key at line %d must be a string literal' % key.lineno
if not isinstance(value, ast.List):
return 'Value at line %d must be a list' % value.lineno
+ for element in value.elts:
+ if not isinstance(element, ast.Str):
+ return 'Watchlist elements on line %d is not a string' % key.lineno
+ if not email_regex.match(element.s):
+ return ('Watchlist element on line %d doesn\'t look like a valid ' +
+ 'email: %s') % (key.lineno, element.s)
return None
-def _CheckWATCHLISTSEntries(wd_dict, w_dict, ast):
+def _CheckWATCHLISTSEntries(wd_dict, w_dict, input_api):
mismatch_template = (
'Mismatch between WATCHLIST_DEFINITIONS entry (%s) and WATCHLISTS '
'entry (%s)')
+ email_regex = input_api.re.compile(
+ r"^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]+$")
+
+ ast = input_api.ast
i = 0
last_key = ''
while True:
@@ -2875,7 +2824,8 @@ def _CheckWATCHLISTSEntries(wd_dict, w_dict, ast):
if result is not None:
return 'Bad entry in WATCHLIST_DEFINITIONS dict: %s' % result
- result = _CheckWatchlistsEntrySyntax(w_key, w_dict.values[i], ast)
+ result = _CheckWatchlistsEntrySyntax(
+ w_key, w_dict.values[i], ast, email_regex)
if result is not None:
return 'Bad entry in WATCHLISTS dict: %s' % result
@@ -2893,7 +2843,8 @@ def _CheckWATCHLISTSEntries(wd_dict, w_dict, ast):
i = i + 1
-def _CheckWATCHLISTSSyntax(expression, ast):
+def _CheckWATCHLISTSSyntax(expression, input_api):
+ ast = input_api.ast
if not isinstance(expression, ast.Expression):
return 'WATCHLISTS file must contain a valid expression'
dictionary = expression.body
@@ -2919,7 +2870,7 @@ def _CheckWATCHLISTSSyntax(expression, ast):
'The second entry of the dict in WATCHLISTS file must be '
'WATCHLISTS dict')
- return _CheckWATCHLISTSEntries(first_value, second_value, ast)
+ return _CheckWATCHLISTSEntries(first_value, second_value, input_api)
def _CheckWATCHLISTS(input_api, output_api):
@@ -2943,7 +2894,7 @@ def _CheckWATCHLISTS(input_api, output_api):
return [output_api.PresubmitError(
'Cannot parse WATCHLISTS file', long_text=repr(e))]
- result = _CheckWATCHLISTSSyntax(expression, input_api.ast)
+ result = _CheckWATCHLISTSSyntax(expression, input_api)
if result is not None:
return [output_api.PresubmitError(result)]
break
@@ -2991,6 +2942,50 @@ def _CheckNewHeaderWithoutGnChange(input_api, output_api):
return []
+def _CheckCorrectProductNameInMessages(input_api, output_api):
+ """Check that Chromium-branded strings don't include "Chrome" or vice versa.
+
+ This assumes we won't intentionally reference one product from the other
+ product.
+ """
+ all_problems = []
+ test_cases = [{
+ "filename_postfix": "google_chrome_strings.grd",
+ "correct_name": "Chrome",
+ "incorrect_name": "Chromium",
+ }, {
+ "filename_postfix": "chromium_strings.grd",
+ "correct_name": "Chromium",
+ "incorrect_name": "Chrome",
+ }]
+
+ for test_case in test_cases:
+ problems = []
+ filename_filter = lambda x: x.LocalPath().endswith(
+ test_case["filename_postfix"])
+
+ # Check each new line. Can yield false positives in multiline comments, but
+ # easier than trying to parse the XML because messages can have nested
+ # children, and associating message elements with affected lines is hard.
+ for f in input_api.AffectedSourceFiles(filename_filter):
+ for line_num, line in f.ChangedContents():
+ if "<message" in line or "<!--" in line or "-->" in line:
+ continue
+ if test_case["incorrect_name"] in line:
+ problems.append(
+ "Incorrect product name in %s:%d" % (f.LocalPath(), line_num))
+
+ if problems:
+ message = (
+ "Strings in %s-branded string files should reference \"%s\", not \"%s\""
+ % (test_case["correct_name"], test_case["correct_name"],
+ test_case["incorrect_name"]))
+ all_problems.append(
+ output_api.PresubmitPromptWarning(message, items=problems))
+
+ return all_problems
+
+
def _AndroidSpecificOnUploadChecks(input_api, output_api):
"""Groups checks that target android code."""
results = []
@@ -3062,12 +3057,12 @@ def _CommonChecks(input_api, output_api):
results.extend(_CheckJavaStyle(input_api, output_api))
results.extend(_CheckIpcOwners(input_api, output_api))
results.extend(_CheckUselessForwardDeclarations(input_api, output_api))
- results.extend(_CheckForRiskyJsFeatures(input_api, output_api))
results.extend(_CheckForRelativeIncludes(input_api, output_api))
results.extend(_CheckWATCHLISTS(input_api, output_api))
results.extend(input_api.RunTests(
input_api.canned_checks.CheckVPythonSpec(input_api, output_api)))
results.extend(_CheckTranslationScreenshots(input_api, output_api))
+ results.extend(_CheckCorrectProductNameInMessages(input_api, output_api))
for f in input_api.AffectedFiles():
path, name = input_api.os_path.split(f.LocalPath())