168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file. 468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/extensions/pending_enables.h" 668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/extensions/sync_bundle.h" 923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "components/sync_driver/sync_prefs.h" 1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace extensions { 1268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)PendingEnables::PendingEnables(scoped_ptr<sync_driver::SyncPrefs> sync_prefs, 1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) SyncBundle* sync_bundle, 1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) syncer::ModelType enable_type) 1668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) : sync_prefs_(sync_prefs.Pass()), 1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) sync_bundle_(sync_bundle), 1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) enable_type_(enable_type), 1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) is_sync_enabled_for_test_(false) {} 2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)PendingEnables::~PendingEnables() { 2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void PendingEnables::OnExtensionEnabled(const std::string& extension_id) { 2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (IsWaitingForSync()) 2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ids_.insert(extension_id); 2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void PendingEnables::OnExtensionDisabled(const std::string& extension_id) { 3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (IsWaitingForSync()) 3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ids_.erase(extension_id); 3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void PendingEnables::OnSyncStarted(ExtensionService* service) { 3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) for (std::set<std::string>::const_iterator it = ids_.begin(); 3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) it != ids_.end(); ++it) { 3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const Extension* extension = service->GetExtensionById(*it, true); 3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (extension) 3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) sync_bundle_->SyncChangeIfNeeded(*extension); 4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) ids_.clear(); 4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)bool PendingEnables::Contains(const std::string& extension_id) const { 4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return ids_.find(extension_id) != ids_.end(); 4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)bool PendingEnables::IsSyncEnabled() { 4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (is_sync_enabled_for_test_) 5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return true; 5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return sync_prefs_ && 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) sync_prefs_->HasSyncSetupCompleted() && 5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) sync_prefs_->GetPreferredDataTypes(syncer::ModelTypeSet(enable_type_)) 5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) .Has(enable_type_); 5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)bool PendingEnables::IsWaitingForSync() { 5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) return IsSyncEnabled() && !sync_bundle_->IsSyncing(); 5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} 6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)} // namespace extensions 6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 63