1// Copyright (c) 2012 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 CHROME_BROWSER_SYNC_GLUE_AUTOFILL_PROFILE_DATA_TYPE_CONTROLLER_H_
6#define CHROME_BROWSER_SYNC_GLUE_AUTOFILL_PROFILE_DATA_TYPE_CONTROLLER_H_
7
8#include "base/compiler_specific.h"
9#include "base/memory/ref_counted.h"
10#include "base/scoped_observer.h"
11#include "components/autofill/core/browser/personal_data_manager_observer.h"
12#include "components/sync_driver/non_ui_data_type_controller.h"
13
14class Profile;
15class ProfileSyncComponentsFactory;
16
17namespace autofill {
18class PersonalDataManager;
19}  // namespace autofill
20
21namespace browser_sync {
22
23class AutofillProfileDataTypeController
24    : public sync_driver::NonUIDataTypeController,
25      public autofill::PersonalDataManagerObserver {
26 public:
27  AutofillProfileDataTypeController(
28      ProfileSyncComponentsFactory* profile_sync_factory,
29      Profile* profile);
30
31  // NonUIDataTypeController implementation.
32  virtual syncer::ModelType type() const OVERRIDE;
33  virtual syncer::ModelSafeGroup model_safe_group() const OVERRIDE;
34
35  // PersonalDataManagerObserver implementation:
36  virtual void OnPersonalDataChanged() OVERRIDE;
37
38 protected:
39  virtual ~AutofillProfileDataTypeController();
40
41  // NonUIDataTypeController implementation.
42  virtual bool PostTaskOnBackendThread(
43      const tracked_objects::Location& from_here,
44      const base::Closure& task) OVERRIDE;
45  virtual bool StartModels() OVERRIDE;
46  virtual void StopModels() OVERRIDE;
47
48 private:
49  // Callback to notify that WebDatabase has loaded.
50  void WebDatabaseLoaded();
51
52  Profile* const profile_;
53  autofill::PersonalDataManager* personal_data_;
54  bool callback_registered_;
55
56  DISALLOW_COPY_AND_ASSIGN(AutofillProfileDataTypeController);
57};
58
59}  // namespace browser_sync
60
61#endif  // CHROME_BROWSER_SYNC_GLUE_AUTOFILL_PROFILE_DATA_TYPE_CONTROLLER_H_
62