• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #include "chrome/browser/extensions/pending_enables.h"
6 
7 #include "chrome/browser/extensions/extension_service.h"
8 #include "chrome/browser/extensions/sync_bundle.h"
9 #include "chrome/browser/sync/sync_prefs.h"
10 
11 namespace extensions {
12 
PendingEnables(scoped_ptr<browser_sync::SyncPrefs> sync_prefs,SyncBundle * sync_bundle,syncer::ModelType enable_type)13 PendingEnables::PendingEnables(scoped_ptr<browser_sync::SyncPrefs> sync_prefs,
14                                SyncBundle* sync_bundle,
15                                syncer::ModelType enable_type)
16     : sync_prefs_(sync_prefs.Pass()),
17       sync_bundle_(sync_bundle),
18       enable_type_(enable_type),
19       is_sync_enabled_for_test_(false) {
20 }
21 
~PendingEnables()22 PendingEnables::~PendingEnables() {
23 }
24 
OnExtensionEnabled(const std::string & extension_id)25 void PendingEnables::OnExtensionEnabled(const std::string& extension_id) {
26   if (IsWaitingForSync())
27     ids_.insert(extension_id);
28 }
29 
OnExtensionDisabled(const std::string & extension_id)30 void PendingEnables::OnExtensionDisabled(const std::string& extension_id) {
31   if (IsWaitingForSync())
32     ids_.erase(extension_id);
33 }
34 
OnSyncStarted(ExtensionService * service)35 void PendingEnables::OnSyncStarted(ExtensionService* service) {
36   for (std::set<std::string>::const_iterator it = ids_.begin();
37        it != ids_.end(); ++it) {
38     const Extension* extension = service->GetExtensionById(*it, true);
39     if (extension)
40       sync_bundle_->SyncChangeIfNeeded(*extension);
41   }
42   ids_.clear();
43 }
44 
Contains(const std::string & extension_id) const45 bool PendingEnables::Contains(const std::string& extension_id) const {
46   return ids_.find(extension_id) != ids_.end();
47 }
48 
IsSyncEnabled()49 bool PendingEnables::IsSyncEnabled() {
50   if (is_sync_enabled_for_test_)
51     return true;
52   return sync_prefs_ &&
53       sync_prefs_->HasSyncSetupCompleted() &&
54       sync_prefs_->GetPreferredDataTypes(syncer::ModelTypeSet(enable_type_))
55           .Has(enable_type_);
56 }
57 
IsWaitingForSync()58 bool PendingEnables::IsWaitingForSync() {
59   return IsSyncEnabled() && !sync_bundle_->IsSyncing();
60 }
61 
62 }  // namespace extensions
63 
64