password_change_processor.h revision c407dc5cd9bdc5668497f21b26b09d988ab439de
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 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_SYNC_GLUE_PASSWORD_CHANGE_PROCESSOR_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_SYNC_GLUE_PASSWORD_CHANGE_PROCESSOR_H_
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/glue/change_processor.h"
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/scoped_ptr.h"
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/sync/glue/sync_backend_host.h"
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/notification_observer.h"
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/notification_registrar.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/common/notification_type.h"
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PasswordStore;
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MessageLoop;
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass NotificationService;
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser_sync {
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PasswordModelAssociator;
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass UnrecoverableErrorHandler;
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This class is responsible for taking changes from the password backend and
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// applying them to the sync_api 'syncable' model, and vice versa. All
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// operations and use of this class are from the DB thread on Windows and Linux,
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// or the password thread on Mac.
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PasswordChangeProcessor : public ChangeProcessor,
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                public NotificationObserver {
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PasswordChangeProcessor(PasswordModelAssociator* model_associator,
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          PasswordStore* password_store,
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          UnrecoverableErrorHandler* error_handler);
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~PasswordChangeProcessor();
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // NotificationObserver implementation.
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Passwords -> sync_api model change application.
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void Observe(NotificationType type,
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationSource& source,
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                       const NotificationDetails& details);
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // sync_api model -> WebDataService change application.
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void ApplyChangesFromSyncModel(
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const sync_api::BaseTransaction* trans,
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      const sync_api::SyncManager::ChangeRecord* changes,
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      int change_count);
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch protected:
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void StartImpl(Profile* profile);
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual void StopImpl();
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void StartObserving();
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void StopObserving();
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The two models should be associated according to this ModelAssociator.
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PasswordModelAssociator* model_associator_;
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // The model we are processing changes from.  This is owned by the
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // WebDataService which is kept alive by our data type controller
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // holding a reference.
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PasswordStore* password_store_;
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  NotificationRegistrar notification_registrar_;
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool observing_;
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MessageLoop* expected_loop_;
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(PasswordChangeProcessor);
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace browser_sync
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_SYNC_GLUE_PASSWORD_CHANGE_PROCESSOR_H_
80