• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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