Chromium Code Reviews| Index: chrome/browser/sync/glue/extension_setting_data_type_controller.cc |
| diff --git a/chrome/browser/sync/glue/extension_setting_data_type_controller.cc b/chrome/browser/sync/glue/extension_setting_data_type_controller.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..313d5522dbfa5176adc4f2bcfc1bb580a3923649 |
| --- /dev/null |
| +++ b/chrome/browser/sync/glue/extension_setting_data_type_controller.cc |
| @@ -0,0 +1,105 @@ |
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/sync/glue/extension_setting_data_type_controller.h" |
| + |
| +#include "base/metrics/histogram.h" |
| +#include "chrome/browser/extensions/extension_service.h" |
| +#include "chrome/browser/extensions/extension_settings_ui_wrapper.h" |
| +#include "chrome/browser/profiles/profile.h" |
| +#include "chrome/browser/sync/api/syncable_service.h" |
| +#include "chrome/browser/sync/glue/generic_change_processor.h" |
| +#include "content/browser/browser_thread.h" |
| + |
| +namespace browser_sync { |
| + |
| +ExtensionSettingDataTypeController::ExtensionSettingDataTypeController( |
| + ProfileSyncFactory* profile_sync_factory, |
| + Profile* profile, |
| + ProfileSyncService* profile_sync_service) |
| + : NonFrontendDataTypeController(profile_sync_factory, profile), |
| + extension_settings_ui_wrapper_( |
| + profile->GetExtensionService()->extension_settings()), |
| + extension_settings_(NULL), |
| + profile_sync_service_(profile_sync_service) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| +} |
| + |
| +ExtensionSettingDataTypeController::~ExtensionSettingDataTypeController() {} |
| + |
| +syncable::ModelType ExtensionSettingDataTypeController::type() const { |
| + return syncable::EXTENSION_SETTINGS; |
| +} |
| + |
| +browser_sync::ModelSafeGroup |
| +ExtensionSettingDataTypeController::model_safe_group() const { |
| + return browser_sync::GROUP_FILE; |
| +} |
| + |
| +bool ExtensionSettingDataTypeController::StartModels() { |
| + return true; |
| +} |
| + |
| +bool ExtensionSettingDataTypeController::StartAssociationAsync() { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + DCHECK_EQ(state(), ASSOCIATING); |
| + extension_settings_ui_wrapper_->RunWithSettings( |
| + base::Bind( |
| + &ExtensionSettingDataTypeController:: |
| + StartAssociationWithExtensionSettings, |
| + this)); |
| + return true; |
| +} |
| + |
| +void ExtensionSettingDataTypeController::StartAssociationWithExtensionSettings( |
| + ExtensionSettings* extension_settings) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| + extension_settings_ = extension_settings; |
| + // Calls CreateSyncComponents. |
|
akalin
2011/09/21 05:41:53
// Calls CreateSyncComponents, which expects exten
not at google - send to devlin
2011/09/21 06:22:41
Done.
|
| + StartAssociation(); |
| +} |
| + |
| +void ExtensionSettingDataTypeController::CreateSyncComponents() { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); |
| + DCHECK_EQ(state(), ASSOCIATING); |
| + DCHECK(extension_settings_); |
| + ProfileSyncFactory::SyncComponents sync_components = |
| + profile_sync_factory()->CreateExtensionSettingSyncComponents( |
| + extension_settings_, profile_sync_service_, this); |
| + set_model_associator(sync_components.model_associator); |
| + set_change_processor(sync_components.change_processor); |
| +} |
| + |
| +bool ExtensionSettingDataTypeController::StopAssociationAsync() { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + DCHECK_EQ(state(), STOPPING); |
| + if (!BrowserThread::PostTask( |
| + BrowserThread::FILE, |
| + FROM_HERE, |
| + base::Bind( |
| + &ExtensionSettingDataTypeController::StopAssociation, |
| + this))) { |
| + NOTREACHED(); |
| + } |
| + return true; |
| +} |
| + |
| +void ExtensionSettingDataTypeController::RecordUnrecoverableError( |
| + const tracked_objects::Location& from_here, |
| + const std::string& message) { |
| + UMA_HISTOGRAM_COUNTS("Sync.ExtensionSettingRunFailures", 1); |
| +} |
| + |
| +void ExtensionSettingDataTypeController::RecordAssociationTime( |
| + base::TimeDelta time) { |
| + UMA_HISTOGRAM_TIMES("Sync.ExtensionSettingAssociationTime", time); |
| +} |
| + |
| +void ExtensionSettingDataTypeController::RecordStartFailure( |
| + StartResult result) { |
| + UMA_HISTOGRAM_ENUMERATION( |
| + "Sync.ExtensionSettingStartFailures", result, MAX_START_RESULT); |
| +} |
| + |
| +} // namespace browser_sync |