// Copyright (c) 2010 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_GLUE_FORM_FIELD_H_
#define WEBKIT_GLUE_FORM_FIELD_H_

#include <vector>

#ifdef ANDROID
#include "base/base_api.h"
#endif
#include "base/string16.h"
#ifndef ANDROID
#include "third_party/WebKit/Source/WebKit/chromium/public/WebFormControlElement.h"
#endif

namespace webkit_glue {

// Stores information about a field in a form.
struct
#ifdef ANDROID
BASE_API
#endif
FormField {
  FormField();
#ifndef ANDROID
  explicit FormField(WebKit::WebFormControlElement element);
#endif
  FormField(const string16& label,
            const string16& name,
            const string16& value,
            const string16& form_control_type,
            int max_length,
            bool is_autofilled);
  virtual ~FormField();

  // Equality tests for identity which does not include |value_| or |size_|.
  // Use |StrictlyEqualsHack| method to test all members.
  // 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;

  // Test equality of all data members.
  // TODO(dhollowa): This will be removed when we implement field ids.
  bool StrictlyEqualsHack(const FormField& field) const;

  string16 label;
  string16 name;
  string16 value;
  string16 form_control_type;
  int max_length;
  bool is_autofilled;
  std::vector<string16> option_strings;
};

// So we can compare FormFields with EXPECT_EQ().
std::ostream& operator<<(std::ostream& os, const FormField& field);

}  // namespace webkit_glue

#endif  // WEBKIT_GLUE_FORM_FIELD_H_
