// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_WEBDATA_AUTOFILL_CHANGE_H__ #define CHROME_BROWSER_WEBDATA_AUTOFILL_CHANGE_H__ #pragma once #include "chrome/browser/webdata/autofill_entry.h" class AutofillProfile; class CreditCard; // For classic Autofill form fields, the KeyType is AutofillKey. // Autofill++ types such as AutofillProfile and CreditCard simply use an int. template <typename KeyType> class GenericAutofillChange { public: typedef enum { ADD, UPDATE, REMOVE } Type; virtual ~GenericAutofillChange() {} Type type() const { return type_; } const KeyType& key() const { return key_; } protected: GenericAutofillChange(Type type, const KeyType& key) : type_(type), key_(key) {} private: Type type_; KeyType key_; }; class AutofillChange : public GenericAutofillChange<AutofillKey> { public: AutofillChange(Type type, const AutofillKey& key); virtual ~AutofillChange(); bool operator==(const AutofillChange& change) const { return type() == change.type() && key() == change.key(); } }; // Change notification details for Autofill profile changes. class AutofillProfileChange : public GenericAutofillChange<std::string> { public: // The |type| input specifies the change type. The |key| input is the key, // which is expected to be the GUID identifying the |profile|. // When |type| == ADD, |profile| should be non-NULL. // When |type| == UPDATE, |profile| should be non-NULL. // When |type| == REMOVE, |profile| should be NULL. AutofillProfileChange(Type type, std::string key, const AutofillProfile* profile); virtual ~AutofillProfileChange(); const AutofillProfile* profile() const { return profile_; } bool operator==(const AutofillProfileChange& change) const; private: // Weak reference, can be NULL. const AutofillProfile* profile_; }; // Change notification details for Autofill credit card changes. class AutofillCreditCardChange : public GenericAutofillChange<std::string> { public: // The |type| input specifies the change type. The |key| input is the key, // which is expected to be the GUID identifying the |credit_card|. // When |type| == ADD, |credit_card| should be non-NULL. // When |type| == UPDATE, |credit_card| should be non-NULL. // When |type| == REMOVE, |credit_card| should be NULL. AutofillCreditCardChange(Type type, std::string key, const CreditCard* credit_card); virtual ~AutofillCreditCardChange(); const CreditCard* credit_card() const { return credit_card_; } bool operator==(const AutofillCreditCardChange& change) const; private: // Weak reference, can be NULL. const CreditCard* credit_card_; }; #endif // CHROME_BROWSER_WEBDATA_AUTOFILL_CHANGE_H__