1// Copyright 2013 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#ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOFILL_CHANGE_H__
6#define COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOFILL_CHANGE_H__
7
8#include <vector>
9
10#include "components/autofill/core/browser/webdata/autofill_entry.h"
11
12namespace autofill {
13
14class AutofillProfile;
15class CreditCard;
16
17// For classic Autofill form fields, the KeyType is AutofillKey.
18// Autofill++ types such as AutofillProfile and CreditCard simply use an int.
19template <typename KeyType>
20class GenericAutofillChange {
21 public:
22  typedef enum {
23    ADD,
24    UPDATE,
25    REMOVE
26  } Type;
27
28  virtual ~GenericAutofillChange() {}
29
30  Type type() const { return type_; }
31  const KeyType& key() const { return key_; }
32
33 protected:
34  GenericAutofillChange(Type type, const KeyType& key)
35      : type_(type),
36        key_(key) {}
37 private:
38  Type type_;
39  KeyType key_;
40};
41
42class AutofillChange : public GenericAutofillChange<AutofillKey> {
43 public:
44  AutofillChange(Type type, const AutofillKey& key);
45  virtual ~AutofillChange();
46  bool operator==(const AutofillChange& change) const {
47    return type() == change.type() && key() == change.key();
48  }
49};
50
51typedef std::vector<AutofillChange> AutofillChangeList;
52
53// Change notification details for Autofill profile changes.
54class AutofillProfileChange : public GenericAutofillChange<std::string> {
55 public:
56  // The |type| input specifies the change type.  The |key| input is the key,
57  // which is expected to be the GUID identifying the |profile|.
58  // When |type| == ADD, |profile| should be non-NULL.
59  // When |type| == UPDATE, |profile| should be non-NULL.
60  // When |type| == REMOVE, |profile| should be NULL.
61  AutofillProfileChange(Type type,
62                        const std::string& key,
63                        const AutofillProfile* profile);
64  virtual ~AutofillProfileChange();
65
66  const AutofillProfile* profile() const { return profile_; }
67  bool operator==(const AutofillProfileChange& change) const;
68
69 private:
70  // Weak reference, can be NULL.
71  const AutofillProfile* profile_;
72};
73
74}  // namespace autofill
75
76#endif  // COMPONENTS_AUTOFILL_CORE_BROWSER_WEBDATA_AUTOFILL_CHANGE_H__
77