1 // Copyright (c) 2011 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_THEME_CHANGE_PROCESSOR_H_ 6 #define CHROME_BROWSER_SYNC_GLUE_THEME_CHANGE_PROCESSOR_H_ 7 #pragma once 8 9 #include "base/basictypes.h" 10 #include "chrome/browser/sync/engine/syncapi.h" 11 #include "chrome/browser/sync/glue/change_processor.h" 12 #include "content/common/notification_observer.h" 13 #include "content/common/notification_registrar.h" 14 #include "content/common/notification_type.h" 15 16 class NotificationDetails; 17 class NotificationSource; 18 class Profile; 19 20 namespace browser_sync { 21 22 class UnrecoverableErrorHandler; 23 24 // This class is responsible for taking changes from the 25 // ThemeService and applying them to the sync_api 'syncable' 26 // model, and vice versa. All operations and use of this class are 27 // from the UI thread. 28 class ThemeChangeProcessor : public ChangeProcessor, 29 public NotificationObserver { 30 public: 31 explicit ThemeChangeProcessor(UnrecoverableErrorHandler* error_handler); 32 virtual ~ThemeChangeProcessor(); 33 34 // NotificationObserver implementation. 35 // ThemeService -> sync_api model change application. 36 virtual void Observe(NotificationType type, 37 const NotificationSource& source, 38 const NotificationDetails& details); 39 40 // ChangeProcessor implementation. 41 // sync_api model -> ThemeService change application. 42 virtual void ApplyChangesFromSyncModel( 43 const sync_api::BaseTransaction* trans, 44 const sync_api::SyncManager::ChangeRecord* changes, 45 int change_count); 46 47 protected: 48 // ChangeProcessor implementation. 49 virtual void StartImpl(Profile* profile); 50 virtual void StopImpl(); 51 52 private: 53 void StartObserving(); 54 void StopObserving(); 55 56 NotificationRegistrar notification_registrar_; 57 // Profile associated with the ThemeService. Non-NULL iff |running()| is 58 // true. 59 Profile* profile_; 60 61 DISALLOW_COPY_AND_ASSIGN(ThemeChangeProcessor); 62 }; 63 64 } // namespace browser_sync 65 66 #endif // CHROME_BROWSER_SYNC_GLUE_THEME_CHANGE_PROCESSOR_H_ 67