// Copyright (c) 2012 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. #ifndef WEBKIT_FORMS_FORM_FIELD_H_ #define WEBKIT_FORMS_FORM_FIELD_H_ #include #include "base/string16.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebFormControlElement.h" #include "webkit/forms/webkit_forms_export.h" namespace webkit { namespace forms { // Stores information about a field in a form. struct WEBKIT_FORMS_EXPORT FormField { FormField(); virtual ~FormField(); // Equality tests for identity which does not include |value| or // |is_autofilled|. // TODO(dhollowa): These operators need to be revised when we implement field // ids. bool operator==(const FormField& field) const; bool operator!=(const FormField& field) const; // Comparsion operator exposed for STL map. Uses label, then name to sort. bool operator<(const FormField& field) const; string16 label; string16 name; string16 value; string16 form_control_type; string16 autocomplete_type; size_t max_length; bool is_autofilled; bool is_focusable; bool should_autocomplete; // For the HTML snippet ||, the // value is "US" and the contents are "United States". std::vector option_values; std::vector option_contents; }; // So we can compare FormFields with EXPECT_EQ(). WEBKIT_FORMS_EXPORT std::ostream& operator<<(std::ostream& os, const FormField& field); } // namespace forms } // namespace webkit // Prefer to use this macro in place of |EXPECT_EQ()| for comparing |FormField|s // in test code. #define EXPECT_FORM_FIELD_EQUALS(expected, actual) \ do { \ EXPECT_EQ(expected.label, actual.label); \ EXPECT_EQ(expected.name, actual.name); \ EXPECT_EQ(expected.value, actual.value); \ EXPECT_EQ(expected.form_control_type, actual.form_control_type); \ EXPECT_EQ(expected.autocomplete_type, actual.autocomplete_type); \ EXPECT_EQ(expected.max_length, actual.max_length); \ EXPECT_EQ(expected.is_autofilled, actual.is_autofilled); \ } while (0) #endif // WEBKIT_FORMS_FORM_FIELD_H_