Home | History | Annotate | Download | only in glue
      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_EXTENSION_CHANGE_PROCESSOR_H_
      6 #define CHROME_BROWSER_SYNC_GLUE_EXTENSION_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 "chrome/browser/sync/glue/extension_sync_traits.h"
     13 #include "content/common/notification_observer.h"
     14 #include "content/common/notification_registrar.h"
     15 #include "content/common/notification_type.h"
     16 
     17 class ExtensionServiceInterface;
     18 
     19 namespace browser_sync {
     20 
     21 class UnrecoverableErrorHandler;
     22 
     23 // This class is responsible for taking changes from the
     24 // ExtensionService and applying them to the sync_api 'syncable'
     25 // model, and vice versa. All operations and use of this class are
     26 // from the UI thread.
     27 class ExtensionChangeProcessor : public ChangeProcessor,
     28                                  public NotificationObserver {
     29  public:
     30   // Does not take ownership of |error_handler|.
     31   ExtensionChangeProcessor(
     32       const ExtensionSyncTraits& traits,
     33       UnrecoverableErrorHandler* error_handler);
     34   virtual ~ExtensionChangeProcessor();
     35 
     36   // NotificationObserver implementation.
     37   // BrowserExtensionProvider -> sync_api model change application.
     38   virtual void Observe(NotificationType type,
     39                        const NotificationSource& source,
     40                        const NotificationDetails& details);
     41 
     42   // ChangeProcessor implementation.
     43   // sync_api model -> BrowserExtensionProvider change application.
     44   virtual void ApplyChangesFromSyncModel(
     45       const sync_api::BaseTransaction* trans,
     46       const sync_api::SyncManager::ChangeRecord* changes,
     47       int change_count);
     48 
     49  protected:
     50   // ChangeProcessor implementation.
     51   virtual void StartImpl(Profile* profile);
     52   virtual void StopImpl();
     53 
     54  private:
     55   void StartObserving();
     56   void StopObserving();
     57 
     58   NotificationRegistrar notification_registrar_;
     59   const ExtensionSyncTraits traits_;
     60 
     61   // Non-NULL iff |running()| is true.
     62   Profile* profile_;
     63   ExtensionServiceInterface* extension_service_;
     64   sync_api::UserShare* user_share_;
     65 
     66   DISALLOW_COPY_AND_ASSIGN(ExtensionChangeProcessor);
     67 };
     68 
     69 }  // namespace browser_sync
     70 
     71 #endif  // CHROME_BROWSER_SYNC_GLUE_EXTENSION_CHANGE_PROCESSOR_H_
     72