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