form_group.cc revision 4a5e2dc747d50c653511c68ccb2cfbfb740bd5a7
1// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/autofill/form_group.h"
6
7string16 FormGroup::GetPreviewText(const AutoFillType& type) const {
8  return GetFieldText(type);
9}
10
11const string16 FormGroup::Label() const { return string16(); }
12
13bool FormGroup::operator!=(const FormGroup& form_group) const {
14  FieldTypeSet a, b, symmetric_difference;
15  GetAvailableFieldTypes(&a);
16  form_group.GetAvailableFieldTypes(&b);
17  std::set_symmetric_difference(
18      a.begin(), a.end(),
19      b.begin(), b.end(),
20      std::inserter(symmetric_difference, symmetric_difference.begin()));
21
22  if (!symmetric_difference.empty())
23    return true;
24
25  return (!IntersectionOfTypesHasEqualValues(form_group));
26}
27
28bool FormGroup::IsSubsetOf(const FormGroup& form_group) const {
29  FieldTypeSet types;
30  GetAvailableFieldTypes(&types);
31
32  for (FieldTypeSet::const_iterator iter = types.begin(); iter != types.end();
33       ++iter) {
34    AutoFillType type(*iter);
35    if (GetFieldText(type) != form_group.GetFieldText(type))
36      return false;
37  }
38
39  return true;
40}
41
42bool FormGroup::IntersectionOfTypesHasEqualValues(
43    const FormGroup& form_group) const {
44  FieldTypeSet a, b, intersection;
45  GetAvailableFieldTypes(&a);
46  form_group.GetAvailableFieldTypes(&b);
47  std::set_intersection(a.begin(), a.end(),
48                        b.begin(), b.end(),
49                        std::inserter(intersection, intersection.begin()));
50
51  // An empty intersection can't have equal values.
52  if (intersection.empty())
53    return false;
54
55  for (FieldTypeSet::const_iterator iter = intersection.begin();
56       iter != intersection.end(); ++iter) {
57    AutoFillType type(*iter);
58    if (GetFieldText(type) != form_group.GetFieldText(type))
59      return false;
60  }
61
62  return true;
63}
64
65void FormGroup::MergeWith(const FormGroup& form_group) {
66  FieldTypeSet a, b, intersection;
67  GetAvailableFieldTypes(&a);
68  form_group.GetAvailableFieldTypes(&b);
69  std::set_difference(b.begin(), b.end(),
70                      a.begin(), a.end(),
71                      std::inserter(intersection, intersection.begin()));
72
73  for (FieldTypeSet::const_iterator iter = intersection.begin();
74       iter != intersection.end(); ++iter) {
75    AutoFillType type(*iter);
76    SetInfo(type, form_group.GetFieldText(type));
77  }
78}
79
80void FormGroup::OverwriteWith(const FormGroup& form_group) {
81  FieldTypeSet a;;
82  form_group.GetAvailableFieldTypes(&a);
83
84  for (FieldTypeSet::const_iterator iter = a.begin(); iter != a.end(); ++iter) {
85    AutoFillType type(*iter);
86    SetInfo(type, form_group.GetFieldText(type));
87  }
88}
89