| # Copyright 2022 The Chromium Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Presubmit tests for //android_webview/ |
| |
| Gates against using Context#bindService API before upload. |
| """ |
| |
| USE_PYTHON3 = True |
| |
| |
| def CheckChangeOnCommit(input_api, output_api): |
| results = [] |
| results.extend(_CheckNo_Context_bindService_Added(input_api, output_api)) |
| return results |
| |
| def CheckChangeOnUpload(input_api, output_api): |
| results = [] |
| results.extend(_CheckNo_Context_bindService_Added(input_api, output_api)) |
| return results |
| |
| |
| def _CheckNo_Context_bindService_Added(input_api, output_api): |
| """Checks that new no files under //android_webview directly use the |
| Context#bindService. This is because Android platform disallows calling |
| Context#bindService() from within a BroadcastReceiver context. |
| """ |
| errors = [] |
| run_with_pattern_part_api = input_api.re.compile( |
| r'.*\.bindService\(.*') |
| |
| def _FilterFile(affected_file): |
| skipFiles = (input_api.DEFAULT_FILES_TO_SKIP + |
| (r'.*android_webview[/\\]common[/\\]services[/\\]ServiceHelper\.java', |
| r'.*android_webview[/\\]js_sandbox[/\\].*',)) |
| return input_api.FilterSourceFile( |
| affected_file, |
| files_to_skip=skipFiles, |
| files_to_check=[r'.+\.java$']) |
| |
| for f in input_api.AffectedSourceFiles(_FilterFile): |
| for line_num, line in f.ChangedContents(): |
| match = run_with_pattern_part_api.search(line) |
| if match: |
| if "ServiceHelper.bindService" not in line: |
| errors.append("%s:%d:%s" % (f.LocalPath(), line_num, line)) |
| |
| results = [] |
| |
| if errors: |
| results.append(output_api.PresubmitPromptWarning(""" |
| New code in //android_webview should not use \ |
| android.content.Context#bindService. Instead use \ |
| android_webview.common.services.ServiceHelper#bindService. |
| """, errors)) |
| |
| return results |