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