| Index: chrome/browser/sync/profile_sync_service.cc
|
| diff --git a/chrome/browser/sync/profile_sync_service.cc b/chrome/browser/sync/profile_sync_service.cc
|
| index bb184cdb4caff914b4a73317201dcb90f5e9b3b0..a6d388c11fb446a0f9cd264d25a737a1410cf297 100644
|
| --- a/chrome/browser/sync/profile_sync_service.cc
|
| +++ b/chrome/browser/sync/profile_sync_service.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "chrome/browser/sync/profile_sync_service.h"
|
|
|
| +#include <set>
|
| +
|
| #include "app/l10n_util.h"
|
| #include "base/callback.h"
|
| #include "base/command_line.h"
|
| @@ -21,6 +23,10 @@
|
| #include "chrome/browser/sync/glue/data_type_manager.h"
|
| #include "chrome/browser/sync/profile_sync_factory.h"
|
| #include "chrome/common/chrome_switches.h"
|
| +#include "chrome/common/notification_details.h"
|
| +#include "chrome/common/notification_service.h"
|
| +#include "chrome/common/notification_source.h"
|
| +#include "chrome/common/notification_type.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "chrome/common/time_format.h"
|
| #include "grit/generated_resources.h"
|
| @@ -50,8 +56,13 @@ ProfileSyncService::ProfileSyncService(ProfileSyncFactory* factory,
|
| is_auth_in_progress_(false),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(wizard_(this)),
|
| unrecoverable_error_detected_(false),
|
| - startup_had_first_time_(false),
|
| notification_method_(browser_sync::kDefaultNotificationMethod) {
|
| + registrar_.Add(this,
|
| + NotificationType::SYNC_CONFIGURE_START,
|
| + NotificationService::AllSources());
|
| + registrar_.Add(this,
|
| + NotificationType::SYNC_CONFIGURE_DONE,
|
| + NotificationService::AllSources());
|
| }
|
|
|
| ProfileSyncService::~ProfileSyncService() {
|
| @@ -82,7 +93,7 @@ void ProfileSyncService::Initialize() {
|
|
|
| void ProfileSyncService::RegisterDataTypeController(
|
| DataTypeController* data_type_controller) {
|
| - DCHECK(data_type_controllers_.count(data_type_controller->type()) == 0);
|
| + DCHECK_EQ(data_type_controllers_.count(data_type_controller->type()), 0U);
|
| data_type_controllers_[data_type_controller->type()] =
|
| data_type_controller;
|
| }
|
| @@ -403,7 +414,6 @@ void ProfileSyncService::OnUserCancelledDialog() {
|
|
|
| void ProfileSyncService::StartProcessingChangesIfReady() {
|
| DCHECK(backend_initialized_);
|
| - startup_had_first_time_ = false;
|
|
|
| // If we're running inside Chromium OS, always allow merges and
|
| // consider the sync setup complete.
|
| @@ -411,21 +421,16 @@ void ProfileSyncService::StartProcessingChangesIfReady() {
|
| SetSyncSetupCompleted();
|
| }
|
|
|
| - data_type_manager_.reset(
|
| - factory_->CreateDataTypeManager(backend_.get(), data_type_controllers_));
|
| - data_type_manager_->Start(
|
| - NewCallback(this, &ProfileSyncService::DataTypeManagerStartCallback));
|
| -}
|
| -
|
| -void ProfileSyncService::DataTypeManagerStartCallback(
|
| - DataTypeManager::StartResult result) {
|
| - if (result != DataTypeManager::OK) {
|
| - OnUnrecoverableError();
|
| - return;
|
| + std::set<syncable::ModelType> types;
|
| + for (DataTypeController::TypeMap::const_iterator it =
|
| + data_type_controllers_.begin();
|
| + it != data_type_controllers_.end(); ++it) {
|
| + types.insert((*it).first);
|
| }
|
|
|
| - wizard_.Step(SyncSetupWizard::DONE);
|
| - FOR_EACH_OBSERVER(Observer, observers_, OnStateChanged());
|
| + data_type_manager_.reset(
|
| + factory_->CreateDataTypeManager(backend_.get(), data_type_controllers_));
|
| + data_type_manager_->Configure(types);
|
| }
|
|
|
| void ProfileSyncService::ActivateDataType(
|
| @@ -442,6 +447,33 @@ void ProfileSyncService::DeactivateDataType(
|
| backend_->DeactivateDataType(data_type_controller, change_processor);
|
| }
|
|
|
| +void ProfileSyncService::Observe(NotificationType type,
|
| + const NotificationSource& source,
|
| + const NotificationDetails& details) {
|
| + switch (type.value) {
|
| + case NotificationType::SYNC_CONFIGURE_START: {
|
| + // TODO(sync): Maybe toast?
|
| + break;
|
| + }
|
| + case NotificationType::SYNC_CONFIGURE_DONE: {
|
| + DataTypeManager::ConfigureResult result =
|
| + *(Details<DataTypeManager::ConfigureResult>(details).ptr());
|
| + if (result != DataTypeManager::OK) {
|
| + OnUnrecoverableError();
|
| + return;
|
| + }
|
| +
|
| + // TODO(sync): Less wizard, more toast.
|
| + wizard_.Step(SyncSetupWizard::DONE);
|
| + FOR_EACH_OBSERVER(Observer, observers_, OnStateChanged());
|
| + break;
|
| + }
|
| + default: {
|
| + NOTREACHED();
|
| + }
|
| + }
|
| +}
|
| +
|
| void ProfileSyncService::AddObserver(Observer* observer) {
|
| observers_.AddObserver(observer);
|
| }
|
| @@ -470,5 +502,5 @@ bool ProfileSyncService::ShouldPushChanges() {
|
| if (!data_type_manager_.get())
|
| return false;
|
|
|
| - return data_type_manager_->state() == DataTypeManager::STARTED;
|
| + return data_type_manager_->state() == DataTypeManager::CONFIGURED;
|
| }
|
|
|