Add a presubmit check that makes sure no interfaces or categories are in libbase.

BUG=46929
TEST=none

Review URL: http://codereview.chromium.org/6017004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@69672 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index 311cb20..1f97a89 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -29,6 +29,25 @@
        "\n"
 )
 
+def _CheckNoInterfacesInBase(input_api, output_api, source_file_filter):
+  """Checks to make sure no files in libbase.a have |@interface|."""
+  pattern = input_api.re.compile(r'@interface')
+  files = []
+  for f in input_api.AffectedSourceFiles(source_file_filter):
+    if (f.LocalPath().find('base/') != -1 and
+        f.LocalPath().find('base/test/') == -1):
+      contents = input_api.ReadFile(f)
+      if pattern.search(contents):
+        files.append(f)
+
+  if len(files):
+    return [ output_api.PresubmitError(
+        'Objective-C interfaces or categories are forbidden in libbase. ' +
+        'See http://groups.google.com/a/chromium.org/group/chromium-dev/' +
+        'browse_thread/thread/efb28c10435987fd',
+        files) ]
+  return []
+
 def _CheckSingletonInHeaders(input_api, output_api, source_file_filter):
   """Checks to make sure no header files have |Singleton<|."""
   pattern = input_api.re.compile(r'Singleton<')
@@ -101,6 +120,8 @@
       input_api, output_api, source_file_filter=sources))
   results.extend(_CheckSingletonInHeaders(
       input_api, output_api, source_file_filter=sources))
+  results.extend(_CheckNoInterfacesInBase(
+      input_api, output_api, source_file_filter=sources))
   return results