• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2014 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_EXTENSIONS_API_SYNCED_NOTIFICATIONS_PRIVATE_SYNCED_NOTIFICATIONS_SHIM_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_SYNCED_NOTIFICATIONS_PRIVATE_SYNCED_NOTIFICATIONS_SHIM_H_
7 
8 #include <string>
9 
10 #include "base/callback.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "chrome/common/extensions/api/synced_notifications_private.h"
13 #include "sync/api/syncable_service.h"
14 
15 namespace extensions {
16 struct Event;
17 }
18 
19 // Shim for SYNCED_NOTIFICATIONS and SYNCED_NOTIFICATIONS_APP_INFO datatypes
20 // to interface with their extension backed sync code.
21 class SyncedNotificationsShim : public syncer::SyncableService {
22  public:
23   // Callback for firing extension events.
24   typedef base::Callback<void(scoped_ptr<extensions::Event>)> EventLauncher;
25 
26   explicit SyncedNotificationsShim(const EventLauncher& event_launcher);
27   virtual ~SyncedNotificationsShim();
28 
29   // SyncableService interface.
30   virtual syncer::SyncMergeResult MergeDataAndStartSyncing(
31       syncer::ModelType type,
32       const syncer::SyncDataList& initial_sync_data,
33       scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
34       scoped_ptr<syncer::SyncErrorFactory> error_handler) OVERRIDE;
35   virtual void StopSyncing(syncer::ModelType type) OVERRIDE;
36   virtual syncer::SyncError ProcessSyncChanges(
37       const tracked_objects::Location& from_here,
38       const syncer::SyncChangeList& change_list) OVERRIDE;
39   virtual syncer::SyncDataList GetAllSyncData(
40       syncer::ModelType type) const OVERRIDE;
41 
42   // JS interface methods (see synced_notifications_private.h).
43   bool GetInitialData(
44       extensions::api::synced_notifications_private::SyncDataType data_type,
45       std::vector<
46           linked_ptr<extensions::api::synced_notifications_private::SyncData> >*
47           js_data_list) const;
48   bool UpdateNotification(const std::string& changed_notification);
49   bool SetRenderContext(
50       extensions::api::synced_notifications_private::RefreshRequest
51           refresh_status,
52       const std::string& new_context);
53 
54   // Returns whether both sync notification datatypes are up and running.
55   bool IsSyncReady() const;
56 
57  private:
58   // Callback to trigger firing extension events.
59   EventLauncher event_launcher_;
60 
61   // The sync change processors, initialized via MergeDataAndStartSyncing.
62   scoped_ptr<syncer::SyncChangeProcessor> notifications_change_processor_;
63   scoped_ptr<syncer::SyncChangeProcessor> app_info_change_processor_;
64 
65   DISALLOW_COPY_AND_ASSIGN(SyncedNotificationsShim);
66 };
67 
68 #endif  // CHROME_BROWSER_EXTENSIONS_API_SYNCED_NOTIFICATIONS_PRIVATE_SYNCED_NOTIFICATIONS_SHIM_H_
69