1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_WEBDATA_AUTOFILL_CHANGE_H__
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_WEBDATA_AUTOFILL_CHANGE_H__
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/webdata/autofill_entry.h"
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass AutofillProfile;
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass CreditCard;
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// For classic Autofill form fields, the KeyType is AutofillKey.
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Autofill++ types such as AutofillProfile and CreditCard simply use an int.
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename KeyType>
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GenericAutofillChange {
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  typedef enum {
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    ADD,
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    UPDATE,
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    REMOVE
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  } Type;
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~GenericAutofillChange() {}
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Type type() const { return type_; }
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const KeyType& key() const { return key_; }
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  GenericAutofillChange(Type type, const KeyType& key)
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      : type_(type),
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch        key_(key) {}
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Type type_;
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  KeyType key_;
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutofillChange : public GenericAutofillChange<AutofillKey> {
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
41513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  AutofillChange(Type type, const AutofillKey& key);
42513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual ~AutofillChange();
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool operator==(const AutofillChange& change) const {
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return type() == change.type() && key() == change.key();
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Change notification details for Autofill profile changes.
49dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass AutofillProfileChange : public GenericAutofillChange<std::string> {
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
51513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // The |type| input specifies the change type.  The |key| input is the key,
52dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // which is expected to be the GUID identifying the |profile|.
53513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // When |type| == ADD, |profile| should be non-NULL.
54513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // When |type| == UPDATE, |profile| should be non-NULL.
55513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // When |type| == REMOVE, |profile| should be NULL.
56513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  AutofillProfileChange(Type type,
57dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                        std::string key,
58ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                        const AutofillProfile* profile);
59513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual ~AutofillProfileChange();
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const AutofillProfile* profile() const { return profile_; }
62513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool operator==(const AutofillProfileChange& change) const;
63513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
65513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Weak reference, can be NULL.
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  const AutofillProfile* profile_;
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
69ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Change notification details for Autofill credit card changes.
70dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass AutofillCreditCardChange : public GenericAutofillChange<std::string> {
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
72513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // The |type| input specifies the change type.  The |key| input is the key,
73dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // which is expected to be the GUID identifying the |credit_card|.
74513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // When |type| == ADD, |credit_card| should be non-NULL.
75513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // When |type| == UPDATE, |credit_card| should be non-NULL.
76513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // When |type| == REMOVE, |credit_card| should be NULL.
77513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  AutofillCreditCardChange(Type type,
78dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                           std::string key,
79513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                           const CreditCard* credit_card);
80513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  virtual ~AutofillCreditCardChange();
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const CreditCard* credit_card() const { return credit_card_; }
83513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  bool operator==(const AutofillCreditCardChange& change) const;
84513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
85513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch private:
86513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  // Weak reference, can be NULL.
87513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  const CreditCard* credit_card_;
88513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch};
89513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_WEBDATA_AUTOFILL_CHANGE_H__
91