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