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