summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/bindings/scripts/web_idl/extended_attribute.py
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/bindings/scripts/web_idl/extended_attribute.py')
-rw-r--r--chromium/third_party/blink/renderer/bindings/scripts/web_idl/extended_attribute.py42
1 files changed, 37 insertions, 5 deletions
diff --git a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/extended_attribute.py b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/extended_attribute.py
index ee6967af9b1..36eec862f47 100644
--- a/chromium/third_party/blink/renderer/bindings/scripts/web_idl/extended_attribute.py
+++ b/chromium/third_party/blink/renderer/bindings/scripts/web_idl/extended_attribute.py
@@ -169,10 +169,12 @@ class ExtendedAttributes(object):
"""
def __init__(self, extended_attributes=None):
- assert extended_attributes is None or (isinstance(
- extended_attributes, (list, tuple)) and all(
- isinstance(attr, ExtendedAttribute)
- for attr in extended_attributes))
+ assert (extended_attributes is None
+ or isinstance(extended_attributes, ExtendedAttributes)
+ or (isinstance(extended_attributes, (list, tuple)) and all(
+ isinstance(attr, ExtendedAttribute)
+ for attr in extended_attributes)))
+
sorted_ext_attrs = sorted(
extended_attributes or [], key=lambda x: x.key)
@@ -181,8 +183,15 @@ class ExtendedAttributes(object):
for key, ext_attrs in itertools.groupby(
sorted_ext_attrs, key=lambda x: x.key)
}
+ self._keys = None
+ self._length = None
+ self._on_ext_attrs_updated()
+
+ def _on_ext_attrs_updated(self):
self._keys = tuple(sorted(self._ext_attrs.keys()))
- self._length = len(sorted_ext_attrs)
+ self._length = 0
+ for ext_attrs in self._ext_attrs.values():
+ self._length += len(ext_attrs)
@classmethod
def equals(cls, lhs, rhs):
@@ -256,3 +265,26 @@ class ExtendedAttributes(object):
"""Returns self.get(key).values if the key exists or an empty list."""
ext_attr = self.get(key)
return ext_attr.values if ext_attr else ()
+
+ def _append(self, ext_attr):
+ assert isinstance(ext_attr, ExtendedAttribute)
+
+ if ext_attr.key not in self._ext_attrs:
+ self._ext_attrs[ext_attr.key] = (ext_attr, )
+ else:
+ self._ext_attrs[ext_attr.key] = (tuple(
+ sorted(
+ self._ext_attrs[ext_attr.key] + (ext_attr, ),
+ key=lambda x: x.syntactic_form)))
+ self._on_ext_attrs_updated()
+
+
+class ExtendedAttributesMutable(ExtendedAttributes):
+ def __getstate__(self):
+ assert False, "ExtendedAttributesMutable must not be pickled."
+
+ def __setstate__(self, state):
+ assert False, "ExtendedAttributesMutable must not be pickled."
+
+ def append(self, ext_attr):
+ self._append(ext_attr)