Reland: Add presubmit check for changes in 3pp

Reland of CL https://webrtc-review.googlesource.com/c/src/+/77421

Copied description:
--
Add presubmit check for changes in 3pp

Presubmit check will test will new changes be overriden by autoroll
or not. In more details presubmit will check:
1. Each dependency in third_party have to be specified in one of:
   a. THIRD_PARTY_CHROMIUM_DEPS.json
   b. THIRD_PARTY_WEBRTC_DEPS.json
2. Each dependency not specified in both files from #1
3. Changes won't be overriden by chromium third_party deps autoroll:
   a. Changes were made in WebRTC owned dependency
   b. Changes were addition of new Chromium owned dependency
--
Also if commit message contains tag NO_AUTOIMPORT_DEPS_CHECK equal
to True, than changes in chromium specific deps will be permitted.
It is required for autoroller to be able to commit its changes and
not to fail on presubmit check.

Bug: webrtc:8366
Change-Id: I545a4778445855cf3db7cf257ca0cb63753aac06
Reviewed-on: https://webrtc-review.googlesource.com/78042
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Commit-Queue: Artem Titov <titovartem@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#23348}
diff --git a/presubmit_test_mocks.py b/presubmit_test_mocks.py
index 4b2b3c7..510a553 100644
--- a/presubmit_test_mocks.py
+++ b/presubmit_test_mocks.py
@@ -9,6 +9,9 @@
 # This file is inspired to [1].
 # [1] - https://cs.chromium.org/chromium/src/PRESUBMIT_test_mocks.py
 
+import os.path
+import re
+
 
 class MockInputApi(object):
   """Mock class for the InputApi class.
@@ -20,11 +23,23 @@
   def __init__(self):
     self.change = MockChange([], [])
     self.files = []
+    self.presubmit_local_path = os.path.dirname(__file__)
 
   def AffectedSourceFiles(self, file_filter=None):
+    return self.AffectedFiles(file_filter=file_filter)
+
+  def AffectedFiles(self, file_filter=None, include_deletes=False):
     # pylint: disable=unused-argument
     return self.files
 
+  @classmethod
+  def FilterSourceFile(cls, affected_file, white_list=(), black_list=()):
+    # pylint: disable=unused-argument
+    return True
+
+  def PresubmitLocalPath(self):
+    return self.presubmit_local_path
+
   def ReadFile(self, affected_file, mode='rU'):
     filename = affected_file.AbsoluteLocalPath()
     for f in self.files:
@@ -64,13 +79,20 @@
   current change.
   """
 
-  def __init__(self, changed_files, bugs_from_description):
+  def __init__(self, changed_files, bugs_from_description, tags=None):
     self._changed_files = changed_files
     self._bugs_from_description = bugs_from_description
+    self.tags = dict() if not tags else tags
 
   def BugsFromDescription(self):
     return self._bugs_from_description
 
+  def __getattr__(self, attr):
+    """Return tags directly as attributes on the object."""
+    if not re.match(r"^[A-Z_]*$", attr):
+      raise AttributeError(self, attr)
+    return self.tags.get(attr)
+
 
 class MockFile(object):
   """Mock class for the File class.
@@ -79,11 +101,30 @@
   MockInputApi for presubmit unittests.
   """
 
-  def __init__(self, local_path):
+  def __init__(self, local_path, new_contents=None, old_contents=None,
+      action='A'):
+    if new_contents is None:
+      new_contents = ["Data"]
     self._local_path = local_path
+    self._new_contents = new_contents
+    self._changed_contents = [(i + 1, l) for i, l in enumerate(new_contents)]
+    self._action = action
+    self._old_contents = old_contents
+
+  def Action(self):
+    return self._action
+
+  def ChangedContents(self):
+    return self._changed_contents
+
+  def NewContents(self):
+    return self._new_contents
 
   def LocalPath(self):
     return self._local_path
 
   def AbsoluteLocalPath(self):
     return self._local_path
+
+  def OldContents(self):
+    return self._old_contents