|  | # Copyright 2014 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 script for Chromium browser code. | 
|  |  | 
|  | This script currently checks HTML/CSS/JS files in resources/ and ui/webui/. | 
|  |  | 
|  | See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts | 
|  | for more details about the presubmit API built into depot_tools, and see | 
|  | http://www.chromium.org/developers/web-development-style-guide for the rules | 
|  | checked for here. | 
|  | """ | 
|  |  | 
|  |  | 
|  | def CheckChangeOnUpload(input_api, output_api): | 
|  | return _CommonChecks(input_api, output_api) | 
|  |  | 
|  |  | 
|  | def CheckChangeOnCommit(input_api, output_api): | 
|  | return _CommonChecks(input_api, output_api) | 
|  |  | 
|  |  | 
|  | def _CommonChecks(input_api, output_api): | 
|  | """Checks common to both upload and commit.""" | 
|  | results = [] | 
|  |  | 
|  | path = input_api.os_path | 
|  | cwd = input_api.PresubmitLocalPath() | 
|  | resources = path.join(cwd, 'resources') | 
|  | webui = path.join(cwd, 'ui', 'webui') | 
|  |  | 
|  | affected_files = (f.AbsoluteLocalPath() for f in input_api.AffectedFiles()) | 
|  |  | 
|  | would_affect_tests = [ | 
|  | path.join(cwd, 'PRESUBMIT.py'), | 
|  | path.join(cwd, 'test_presubmit.py'), | 
|  | ] | 
|  | would_affect_tests += input_api.glob(path.join(cwd, 'web_dev_style', '*.py')) | 
|  |  | 
|  | if any(f for f in affected_files if f in would_affect_tests): | 
|  | tests = [path.join(cwd, 'test_presubmit.py')] | 
|  | results.extend( | 
|  | input_api.canned_checks.RunUnitTests(input_api, output_api, tests)) | 
|  |  | 
|  | import sys | 
|  | old_path = sys.path | 
|  |  | 
|  | try: | 
|  | sys.path = [cwd] + old_path | 
|  | from web_dev_style import (resource_checker, css_checker, html_checker, | 
|  | js_checker) | 
|  |  | 
|  | search_dirs = (resources, webui) | 
|  | def _html_css_js_resource(p): | 
|  | return p.endswith(('.html', '.css', '.js')) and p.startswith(search_dirs) | 
|  |  | 
|  | BLACKLIST = ['chrome/browser/resources/md_downloads/crisper.js', | 
|  | 'chrome/browser/resources/md_downloads/vulcanized.html', | 
|  | 'chrome/browser/resources/pdf/index.html', | 
|  | 'chrome/browser/resources/pdf/index.js'] | 
|  | def is_resource(maybe_resource): | 
|  | return (maybe_resource.LocalPath() not in BLACKLIST and | 
|  | _html_css_js_resource(maybe_resource.AbsoluteLocalPath())) | 
|  |  | 
|  | results.extend(resource_checker.ResourceChecker( | 
|  | input_api, output_api, file_filter=is_resource).RunChecks()) | 
|  | results.extend(css_checker.CSSChecker( | 
|  | input_api, output_api, file_filter=is_resource).RunChecks()) | 
|  | results.extend(html_checker.HtmlChecker( | 
|  | input_api, output_api, file_filter=is_resource).RunChecks()) | 
|  | results.extend(js_checker.JSChecker( | 
|  | input_api, output_api, file_filter=is_resource).RunChecks()) | 
|  | finally: | 
|  | sys.path = old_path | 
|  |  | 
|  | return results |