Forbid newly introducing ThreadTaskRunnerHandle/SequencedTaskRunnerHandle::Get()

In most cases, using ThreadTaskRunnerHandle::Get() or
SequencedTaskRunnerHandle::Get() in renderers is semantically wrong.
Additionally, these task usage prevents flexible renderer scheduing,
e.g. throttling tasks for a hidden iframe.

This CL introduces presubmit checks to forbide newly introducing those
Get() usages.

Bug: 827065
Change-Id: I92cd9d4207d5664e42763939e5c1c8d293897799
Reviewed-on: https://chromium-review.googlesource.com/995241
Reviewed-by: Daniel Cheng <[email protected]>
Reviewed-by: Alexander Timin <[email protected]>
Reviewed-by: Kentaro Hara <[email protected]>
Commit-Queue: Hajime Hoshi <[email protected]>
Cr-Commit-Position: refs/heads/master@{#549759}
diff --git a/content/renderer/PRESUBMIT_test.py b/content/renderer/PRESUBMIT_test.py
new file mode 100755
index 0000000..691c024
--- /dev/null
+++ b/content/renderer/PRESUBMIT_test.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+# Copyright 2018 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.
+
+import os
+import sys
+import unittest
+
+import PRESUBMIT
+
+sys.path.append(
+    os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..'))
+from PRESUBMIT_test_mocks import (MockInputApi, MockOutputApi, MockAffectedFile)
+
+class GetTest(unittest.TestCase):
+  def testNewUsageThreadTaskRunnerHandleGet(self):
+    diff = ['scoped_refptr<SingleThreadTaskRunner> task_runner =',
+             '    base::ThreadTaskRunnerHandle::Get()']
+    input_api = MockInputApi()
+    input_api.files = [MockAffectedFile('content/renderer/foo.cc', diff)]
+    errors = PRESUBMIT._CheckForUseOfGlobalTaskRunnerGetter(input_api,
+                                                            MockOutputApi())
+    self.assertEqual(1, len(errors))
+
+  def testNewUsageSequencedTaskRunnerHandleGet(self):
+    diff = ['scoped_refptr<SequencedThreadTaskRunner> task_runner =',
+             '    base::SequencedTaskRunnerHandle::Get()']
+    input_api = MockInputApi()
+    input_api.files = [MockAffectedFile('content/renderer/foo.cc', diff)]
+    errors = PRESUBMIT._CheckForUseOfGlobalTaskRunnerGetter(input_api,
+                                                            MockOutputApi())
+    self.assertEqual(1, len(errors))
+
+if __name__ == '__main__':
+  unittest.main()