Drop meta_filters support (#16363)

This exposes JSON objects to our public API, which should really
be an implementation detail.

It's also nowadays unused, as it (unsurprisingly) turned out to be
super fragile.
diff --git a/tools/manifest/manifest.py b/tools/manifest/manifest.py
index a17453c..dc38d38 100644
--- a/tools/manifest/manifest.py
+++ b/tools/manifest/manifest.py
@@ -26,13 +26,6 @@
     pass
 
 
-def iterfilter(filters, iter):
-    for f in filters:
-        iter = f(iter)
-    for item in iter:
-        yield item
-
-
 item_classes = {"testharness": TestharnessTest,
                 "reftest": RefTest,
                 "reftest_node": RefTestNode,
@@ -45,7 +38,7 @@
 
 
 class TypeData(object):
-    def __init__(self, manifest, type_cls, meta_filters):
+    def __init__(self, manifest, type_cls):
         """Dict-like object containing the TestItems for each test type.
 
         Loading an actual Item class for each test is unnecessarily
@@ -61,7 +54,6 @@
         self.json_data = {}
         self.tests_root = None
         self.data = {}
-        self.meta_filters = meta_filters or []
 
     def __getitem__(self, key):
         if key not in self.data:
@@ -134,7 +126,7 @@
         if self.json_data is not None:
             data = set()
             path = from_os_path(key)
-            for test in iterfilter(self.meta_filters, self.json_data.get(path, [])):
+            for test in self.json_data.get(path, []):
                 manifest_item = self.type_cls.from_json(self.manifest, path, test)
                 data.add(manifest_item)
             try:
@@ -153,7 +145,7 @@
                 if key in self.data:
                     continue
                 data = set()
-                for test in iterfilter(self.meta_filters, self.json_data.get(path, [])):
+                for test in self.json_data.get(path, []):
                     manifest_item = self.type_cls.from_json(self.manifest, path, test)
                     data.add(manifest_item)
                 self.data[key] = data
@@ -190,12 +182,12 @@
 
 
 class ManifestData(dict):
-    def __init__(self, manifest, meta_filters=None):
+    def __init__(self, manifest):
         """Dictionary subclass containing a TypeData instance for each test type,
         keyed by type name"""
         self.initialized = False
         for key, value in iteritems(item_classes):
-            self[key] = TypeData(manifest, value, meta_filters=meta_filters)
+            self[key] = TypeData(manifest, value)
         self.initialized = True
         self.json_obj = None
 
@@ -214,10 +206,10 @@
 
 
 class Manifest(object):
-    def __init__(self, tests_root=None, url_base="/", meta_filters=None):
+    def __init__(self, tests_root=None, url_base="/"):
         assert url_base is not None
         self._path_hash = {}
-        self._data = ManifestData(self, meta_filters)
+        self._data = ManifestData(self)
         self._reftest_nodes_by_url = None
         self.tests_root = tests_root
         self.url_base = url_base
@@ -396,12 +388,12 @@
         return rv
 
     @classmethod
-    def from_json(cls, tests_root, obj, types=None, meta_filters=None):
+    def from_json(cls, tests_root, obj, types=None):
         version = obj.get("version")
         if version != CURRENT_VERSION:
             raise ManifestVersionMismatch
 
-        self = cls(tests_root, url_base=obj.get("url_base", "/"), meta_filters=meta_filters)
+        self = cls(tests_root, url_base=obj.get("url_base", "/"))
         if not hasattr(obj, "items") and hasattr(obj, "paths"):
             raise ManifestError
 
@@ -419,17 +411,17 @@
         return self
 
 
-def load(tests_root, manifest, types=None, meta_filters=None):
+def load(tests_root, manifest, types=None):
     logger = get_logger()
 
     logger.warning("Prefer load_and_update instead")
-    return _load(logger, tests_root, manifest, types, meta_filters)
+    return _load(logger, tests_root, manifest, types)
 
 
 __load_cache = {}
 
 
-def _load(logger, tests_root, manifest, types=None, meta_filters=None, allow_cached=True):
+def _load(logger, tests_root, manifest, types=None, allow_cached=True):
     # "manifest" is a path or file-like object.
     manifest_path = (manifest if isinstance(manifest, string_types)
                      else manifest.name)
@@ -445,8 +437,7 @@
             with open(manifest) as f:
                 rv = Manifest.from_json(tests_root,
                                         fast_json.load(f),
-                                        types=types,
-                                        meta_filters=meta_filters)
+                                        types=types)
         except IOError:
             return None
         except ValueError:
@@ -455,8 +446,7 @@
     else:
         rv = Manifest.from_json(tests_root,
                                 fast_json.load(manifest),
-                                types=types,
-                                meta_filters=meta_filters)
+                                types=types)
 
     if allow_cached:
         __load_cache[manifest_path] = rv
@@ -472,7 +462,6 @@
                     cache_root=None,
                     working_copy=True,
                     types=None,
-                    meta_filters=None,
                     write_manifest=True,
                     allow_cached=True):
     logger = get_logger()
@@ -484,7 +473,6 @@
                              tests_root,
                              manifest_path,
                              types=types,
-                             meta_filters=meta_filters,
                              allow_cached=allow_cached)
         except ManifestVersionMismatch:
             logger.info("Manifest version changed, rebuilding")
@@ -493,7 +481,7 @@
             logger.info("Manifest url base did not match, rebuilding")
 
     if manifest is None:
-        manifest = Manifest(tests_root, url_base, meta_filters=meta_filters)
+        manifest = Manifest(tests_root, url_base)
         update = True
 
     if update:
diff --git a/tools/manifest/tests/test_manifest.py b/tools/manifest/tests/test_manifest.py
index 5916961..25944d5 100644
--- a/tools/manifest/tests/test_manifest.py
+++ b/tools/manifest/tests/test_manifest.py
@@ -298,34 +298,6 @@
     assert set(m.iterpath("missing")) == set()
 
 
-def test_filter():
-    m = manifest.Manifest()
-
-    sources = [SourceFileWithTest("test1", "0"*40, item.RefTestNode, references=[("/test1-ref", "==")]),
-               SourceFileWithTests("test2", "0"*40, item.TestharnessTest, [("test2-1.html",),
-                                                                           ("test2-2.html",)]),
-               SourceFileWithTest("test3", "0"*40, item.TestharnessTest)]
-    m.update([(s, True) for s in sources])
-
-    json = m.to_json()
-
-    def filter(it):
-        for test in it:
-            if test[0] in ["test2-2.html", "test3"]:
-                yield test
-
-    filtered_manifest = manifest.Manifest.from_json("/", json, types=["testharness"], meta_filters=[filter])
-
-    actual = [
-        (ty, path, [test.id for test in tests])
-        for (ty, path, tests) in filtered_manifest
-    ]
-    assert actual == [
-        ("testharness", "test2", ["/test2-2.html"]),
-        ("testharness", "test3", ["/test3"]),
-    ]
-
-
 def test_reftest_node_by_url():
     m = manifest.Manifest()
 
diff --git a/tools/wptrunner/wptrunner/testloader.py b/tools/wptrunner/wptrunner/testloader.py
index 7b9bbf3..bd08a9c 100644
--- a/tools/wptrunner/wptrunner/testloader.py
+++ b/tools/wptrunner/wptrunner/testloader.py
@@ -110,14 +110,13 @@
 
 class ManifestLoader(object):
     def __init__(self, test_paths, force_manifest_update=False, manifest_download=False,
-                 types=None, meta_filters=None):
+                 types=None):
         do_delayed_imports()
         self.test_paths = test_paths
         self.force_manifest_update = force_manifest_update
         self.manifest_download = manifest_download
         self.types = types
         self.logger = structured.get_default_logger()
-        self.meta_filters = meta_filters
         if self.logger is None:
             self.logger = structured.structuredlog.StructuredLogger("ManifestLoader")
 
@@ -137,7 +136,7 @@
             download_from_github(manifest_path, tests_path)
         return manifest.load_and_update(tests_path, manifest_path, url_base,
                                         cache_root=cache_root, update=self.force_manifest_update,
-                                        meta_filters=self.meta_filters, types=self.types)
+                                        types=self.types)
 
 
 def iterfilter(filters, iter):