Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / browser / extensions / extension_sync_service.h
blob81c6a5bff3b3c5e25706539dfcff2abb7319d019
1 // Copyright 2013 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.
5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_SYNC_SERVICE_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_SYNC_SERVICE_H_
8 #include <string>
9 #include <vector>
11 #include "base/compiler_specific.h"
12 #include "chrome/browser/extensions/app_sync_bundle.h"
13 #include "chrome/browser/extensions/extension_prefs.h"
14 #include "chrome/browser/extensions/extension_sync_bundle.h"
15 #include "chrome/browser/extensions/pending_enables.h"
16 #include "components/browser_context_keyed_service/browser_context_keyed_service.h"
17 #include "extensions/common/extension.h"
18 #include "sync/api/string_ordinal.h"
19 #include "sync/api/sync_change.h"
20 #include "sync/api/syncable_service.h"
22 class ExtensionErrorUI;
23 class ExtensionSyncData;
24 class Profile;
26 namespace base {
27 class SequencedTaskRunner;
30 namespace extensions {
31 class AppSyncData;
32 class ExtensionPrefs;
33 class ExtensionSyncData;
34 } // namespace extensions
36 namespace syncer {
37 class SyncErrorFactory;
40 class ExtensionSyncService : public syncer::SyncableService,
41 public BrowserContextKeyedService {
42 public:
43 ExtensionSyncService(Profile* profile,
44 extensions::ExtensionPrefs* extension_prefs,
45 ExtensionService* extension_service);
47 virtual ~ExtensionSyncService();
49 // Convenience function to get the ExtensionSyncService for a Profile.
50 static ExtensionSyncService* Get(Profile* profile);
52 const extensions::ExtensionPrefs& extension_prefs() const {
53 return *extension_prefs_;
56 // Notifies Sync (if needed) of a newly-installed extension or a change to
57 // an existing extension.
58 virtual void SyncExtensionChangeIfNeeded(
59 const extensions::Extension& extension);
61 // syncer::SyncableService implementation.
62 virtual syncer::SyncMergeResult MergeDataAndStartSyncing(
63 syncer::ModelType type,
64 const syncer::SyncDataList& initial_sync_data,
65 scoped_ptr<syncer::SyncChangeProcessor> sync_processor,
66 scoped_ptr<syncer::SyncErrorFactory> sync_error_factory) OVERRIDE;
67 virtual void StopSyncing(syncer::ModelType type) OVERRIDE;
68 virtual syncer::SyncDataList GetAllSyncData(
69 syncer::ModelType type) const OVERRIDE;
70 virtual syncer::SyncError ProcessSyncChanges(
71 const tracked_objects::Location& from_here,
72 const syncer::SyncChangeList& change_list) OVERRIDE;
74 // Gets the sync data for the given extension, assuming that the extension is
75 // syncable.
76 extensions::ExtensionSyncData GetExtensionSyncData(
77 const extensions::Extension& extension) const;
79 // Gets the sync data for the given app, assuming that the app is
80 // syncable.
81 extensions::AppSyncData GetAppSyncData(
82 const extensions::Extension& extension) const;
84 // Gets the ExtensionSyncData for all extensions.
85 std::vector<extensions::ExtensionSyncData> GetExtensionSyncDataList() const;
87 // Gets the AppSyncData for all extensions.
88 std::vector<extensions::AppSyncData> GetAppSyncDataList() const;
90 // Applies the change specified passed in by either ExtensionSyncData or
91 // AppSyncData to the current system.
92 // Returns false if the changes were not completely applied and were added
93 // to the pending list to be tried again.
94 bool ProcessExtensionSyncData(
95 const extensions::ExtensionSyncData& extension_sync_data);
96 bool ProcessAppSyncData(const extensions::AppSyncData& app_sync_data);
98 syncer::SyncChange PrepareToSyncUninstallExtension(
99 const extensions::Extension* extension,
100 bool extensions_ready);
101 void ProcessSyncUninstallExtension(const std::string& extension_id,
102 const syncer::SyncChange& sync_change);
104 void SyncEnableExtension(const extensions::Extension& extension);
105 void SyncDisableExtension(const extensions::Extension& extension);
107 void SyncOrderingChange(const std::string& extension_id);
109 // |flare| provides a StartSyncFlare to the SyncableService. See
110 // sync_start_util for more.
111 void SetSyncStartFlare(const syncer::SyncableService::StartSyncFlare& flare);
113 private:
114 // Return true if the sync type of |extension| matches |type|.
115 bool IsCorrectSyncType(const extensions::Extension& extension,
116 syncer::ModelType type)
117 const;
119 // Whether the given extension has been enabled before sync has started.
120 bool IsPendingEnable(const std::string& extension_id) const;
122 // Handles setting the extension specific values in |extension_sync_data| to
123 // the current system.
124 // Returns false if the changes were not completely applied and need to be
125 // tried again later.
126 bool ProcessExtensionSyncDataHelper(
127 const extensions::ExtensionSyncData& extension_sync_data,
128 syncer::ModelType type);
130 // The normal profile associated with this ExtensionService.
131 Profile* profile_;
133 // Preferences for the owning profile.
134 extensions::ExtensionPrefs* extension_prefs_;
136 ExtensionService* extension_service_;
138 extensions::AppSyncBundle app_sync_bundle_;
139 extensions::ExtensionSyncBundle extension_sync_bundle_;
141 // Set of extensions/apps that have been enabled before sync has started.
142 extensions::PendingEnables pending_app_enables_;
143 extensions::PendingEnables pending_extension_enables_;
145 scoped_ptr<ExtensionErrorUI> extension_error_ui_;
146 // Sequenced task runner for extension related file operations.
147 scoped_refptr<base::SequencedTaskRunner> file_task_runner_;
149 // Run()ning tells sync to try and start soon, because syncable changes
150 // have started happening. It will cause sync to call us back
151 // asynchronously via MergeDataAndStartSyncing as soon as possible.
152 syncer::SyncableService::StartSyncFlare flare_;
154 DISALLOW_COPY_AND_ASSIGN(ExtensionSyncService);
157 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_SYNC_SERVICE_H_