// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include <algorithm> #include "chrome/browser/autofill/form_group.h" #include <iterator> const string16 FormGroup::Label() const { return string16(); } bool FormGroup::operator!=(const FormGroup& form_group) const { FieldTypeSet a, b, symmetric_difference; GetAvailableFieldTypes(&a); form_group.GetAvailableFieldTypes(&b); std::set_symmetric_difference( a.begin(), a.end(), b.begin(), b.end(), std::inserter(symmetric_difference, symmetric_difference.begin())); if (!symmetric_difference.empty()) return true; return (!IntersectionOfTypesHasEqualValues(form_group)); } bool FormGroup::IsSubsetOf(const FormGroup& form_group) const { FieldTypeSet types; GetAvailableFieldTypes(&types); for (FieldTypeSet::const_iterator iter = types.begin(); iter != types.end(); ++iter) { if (StringToLowerASCII(GetInfo(*iter)) != StringToLowerASCII(form_group.GetInfo(*iter))) return false; } return true; } bool FormGroup::IntersectionOfTypesHasEqualValues( const FormGroup& form_group) const { FieldTypeSet a, b, intersection; GetAvailableFieldTypes(&a); form_group.GetAvailableFieldTypes(&b); std::set_intersection(a.begin(), a.end(), b.begin(), b.end(), std::inserter(intersection, intersection.begin())); // An empty intersection can't have equal values. if (intersection.empty()) return false; for (FieldTypeSet::const_iterator iter = intersection.begin(); iter != intersection.end(); ++iter) { if (StringToLowerASCII(GetInfo(*iter)) != StringToLowerASCII(form_group.GetInfo(*iter))) return false; } return true; } void FormGroup::MergeWith(const FormGroup& form_group) { FieldTypeSet a, b, intersection; GetAvailableFieldTypes(&a); form_group.GetAvailableFieldTypes(&b); std::set_difference(b.begin(), b.end(), a.begin(), a.end(), std::inserter(intersection, intersection.begin())); for (FieldTypeSet::const_iterator iter = intersection.begin(); iter != intersection.end(); ++iter) { SetInfo(*iter, form_group.GetInfo(*iter)); } } void FormGroup::OverwriteWith(const FormGroup& form_group) { FieldTypeSet a;; form_group.GetAvailableFieldTypes(&a); for (FieldTypeSet::const_iterator iter = a.begin(); iter != a.end(); ++iter) { SetInfo(*iter, form_group.GetInfo(*iter)); } }