Fix version handling for boolean groups.

R=etiennej@chromium.org

Review URL: https://codereview.chromium.org/939083002
diff --git a/mojo/public/python/mojo_bindings/descriptor.py b/mojo/public/python/mojo_bindings/descriptor.py
index 45e073f..4143c51 100644
--- a/mojo/public/python/mojo_bindings/descriptor.py
+++ b/mojo/public/python/mojo_bindings/descriptor.py
@@ -608,7 +608,10 @@
   def GetByteSize(self):
     raise NotImplementedError()
 
-  def GetVersion(self):
+  def GetMinVersion(self):
+    raise NotImplementedError()
+
+  def GetMaxVersion(self):
     raise NotImplementedError()
 
   def Serialize(self, obj, data_offset, data, handle_offset):
@@ -617,6 +620,9 @@
   def Deserialize(self, value, context):
     raise NotImplementedError()
 
+  def Filter(self, version):
+    raise NotImplementedError()
+
 
 class SingleFieldGroup(FieldGroup, FieldDescriptor):
   """A FieldGroup that contains a single FieldDescriptor."""
@@ -632,7 +638,10 @@
   def GetByteSize(self):
     return self.field_type.GetByteSize()
 
-  def GetVersion(self):
+  def GetMinVersion(self):
+    return self.version
+
+  def GetMaxVersion(self):
     return self.version
 
   def Serialize(self, obj, data_offset, data, handle_offset):
@@ -643,12 +652,16 @@
     entity = self.field_type.Deserialize(value, context)
     return { self.name: entity }
 
+  def Filter(self, version):
+    return self
+
 
 class BooleanGroup(FieldGroup):
   """A FieldGroup to pack booleans."""
   def __init__(self, descriptors):
     FieldGroup.__init__(self, descriptors)
-    self.version = min([descriptor.version  for descriptor in descriptors])
+    self.min_version = min([descriptor.version  for descriptor in descriptors])
+    self.max_version = max([descriptor.version  for descriptor in descriptors])
 
   def GetTypeCode(self):
     return 'B'
@@ -656,8 +669,11 @@
   def GetByteSize(self):
     return 1
 
-  def GetVersion(self):
-    return self.version
+  def GetMinVersion(self):
+    return self.min_version
+
+  def GetMaxVersion(self):
+    return self.max_version
 
   def Serialize(self, obj, data_offset, data, handle_offset):
     value = _ConvertBooleansToByte(
@@ -670,6 +686,10 @@
                                      fillvalue=False)
     return dict(values)
 
+  def Filter(self, version):
+    return BooleanGroup(
+        filter(lambda d: d.version <= version, self.descriptors))
+
 
 def _SerializeNativeArray(value, data_offset, data, length):
   data_size = len(data)
diff --git a/mojo/public/python/mojo_bindings/serialization.py b/mojo/public/python/mojo_bindings/serialization.py
index 2e887c2..8f5cc67 100644
--- a/mojo/public/python/mojo_bindings/serialization.py
+++ b/mojo/public/python/mojo_bindings/serialization.py
@@ -170,11 +170,12 @@
 def _GetVersion(groups):
   if not len(groups):
     return 0
-  return max([x.version for x in groups])
+  return max([x.GetMaxVersion() for x in groups])
 
 
 def _FilterGroups(groups, version):
-  return [group for group in groups if group.GetVersion() <= version]
+  return [group.Filter(version) for
+          group in groups if group.GetMinVersion() <= version]
 
 
 def _GetStruct(groups):