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