| # Copyright 2022 The Chromium Authors |
| # 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. |
| """ |
| |
| defCheckChangeOnCommit(input_api, output_api): |
| results=[] |
| results.extend(_CheckNoContextBindServiceAdded(input_api, output_api)) |
| return results |
| |
| defCheckChangeOnUpload(input_api, output_api): |
| results=[] |
| results.extend(_CheckNoContextBindServiceAdded(input_api, output_api)) |
| return results |
| |
| def_CheckNoContextBindServiceAdded(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=[] |
| bind_service_pattern= input_api.re.compile( |
| r'.*\.bindService\(.*') |
| |
| def_FilterFile(affected_file): |
| skip_files=(input_api.DEFAULT_FILES_TO_SKIP+ |
| (r'.*android_webview[/\\]common[/\\]services[/\\]ServiceHelper\.java', |
| r'.*android_webview[/\\]support_library[/\\]boundary_interfaces[/\\].*', |
| r'.*android_webview[/\\]js_sandbox[/\\].*',)) |
| return input_api.FilterSourceFile( |
| affected_file, |
| files_to_skip=skip_files, |
| files_to_check=[r'.+\.java$']) |
| |
| for fin input_api.AffectedSourceFiles(_FilterFile): |
| for line_num, linein f.ChangedContents(): |
| match= bind_service_pattern.search(line) |
| if match: |
| if"ServiceHelper.bindService"notin 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 |