Home | History | Annotate | Download | only in webdata
      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 
     12 namespace autofill {
     13 
     14 class AutofillProfile;
     15 class CreditCard;
     16 
     17 // For classic Autofill form fields, the KeyType is AutofillKey.
     18 // Autofill++ types such as AutofillProfile and CreditCard simply use an int.
     19 template <typename KeyType>
     20 class 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 
     42 class 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 
     51 typedef std::vector<AutofillChange> AutofillChangeList;
     52 
     53 // Change notification details for Autofill profile changes.
     54 class 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