Make coverage.py py3 and Windows compatible

Python3 does not have urllib2, and Windows needs to specify python
for running python scripts in command line.

Change-Id: If5eaebc2015a4361aebac0df89db1afe34d35605
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2949810
Commit-Queue: Yuke Liao <[email protected]>
Reviewed-by: Yuke Liao <[email protected]>
Cr-Commit-Position: refs/heads/master@{#890983}
diff --git a/tools/code_coverage/coverage.py b/tools/code_coverage/coverage.py
index 6149485..9af3f2c 100755
--- a/tools/code_coverage/coverage.py
+++ b/tools/code_coverage/coverage.py
@@ -81,6 +81,13 @@
 import subprocess
 import urllib2
 
+import six
+
+if six.PY2:
+  from urllib2 import urlopen
+else:
+  from urllib.request import urlopen
+
 sys.path.append(
     os.path.join(
         os.path.dirname(__file__), os.path.pardir, os.path.pardir,
@@ -154,8 +161,9 @@
     LLVM_COV_PATH = os.path.join(llvm_bin_dir, 'llvm-cov')
     LLVM_PROFDATA_PATH = os.path.join(llvm_bin_dir, 'llvm-profdata')
   else:
-    subprocess.check_call(
-        ['tools/clang/scripts/update.py', '--package', 'coverage_tools'])
+    subprocess.check_call([
+        'python', 'tools/clang/scripts/update.py', '--package', 'coverage_tools'
+    ])
 
   if coverage_utils.GetHostPlatform() == 'win':
     LLVM_COV_PATH += '.exe'
@@ -997,8 +1005,9 @@
   # Setup coverage binaries even when script is called with empty params. This
   # is used by coverage bot for initial setup.
   if len(sys.argv) == 1:
-    subprocess.check_call(
-        ['tools/clang/scripts/update.py', '--package', 'coverage_tools'])
+    subprocess.check_call([
+        'python', 'tools/clang/scripts/update.py', '--package', 'coverage_tools'
+    ])
     print(__doc__)
     return
 
@@ -1087,7 +1096,7 @@
       args.ignore_filename_regex, args.format)
   component_mappings = None
   if not args.no_component_view:
-    component_mappings = json.load(urllib2.urlopen(COMPONENT_MAPPING_URL))
+    component_mappings = json.load(urlopen(COMPONENT_MAPPING_URL))
 
   # Call prepare here.
   processor = coverage_utils.CoverageReportPostProcessor(