Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Unified Diff: chrome/browser/sync/glue/sync_backend_host.cc

Issue 7190001: [Sync] Split DirectoryChangeListener for thread-safety (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix copyright Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/sync/glue/sync_backend_host.h ('k') | chrome/browser/sync/js_directory_change_listener.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/glue/sync_backend_host.cc
diff --git a/chrome/browser/sync/glue/sync_backend_host.cc b/chrome/browser/sync/glue/sync_backend_host.cc
index 0f8b3ed409b4405e15bea8cb184dbe4f0b50954b..05767111d82d7f0f9bb1809ce36b6e0c80497f4e 100644
--- a/chrome/browser/sync/glue/sync_backend_host.cc
+++ b/chrome/browser/sync/glue/sync_backend_host.cc
@@ -68,7 +68,7 @@ SyncBackendHost::SyncBackendHost(Profile* profile)
sync_data_folder_path_(
profile_->GetPath().Append(kSyncDataFolderName)),
last_auth_error_(AuthError::None()),
- syncapi_initialized_(false) {
+ sync_manager_initialized_(false) {
}
SyncBackendHost::SyncBackendHost()
@@ -77,7 +77,7 @@ SyncBackendHost::SyncBackendHost()
profile_(NULL),
frontend_(NULL),
last_auth_error_(AuthError::None()),
- syncapi_initialized_(false) {
+ sync_manager_initialized_(false) {
}
SyncBackendHost::~SyncBackendHost() {
@@ -166,18 +166,18 @@ bool SyncBackendHost::IsNigoriEnabled() const {
}
bool SyncBackendHost::IsUsingExplicitPassphrase() {
- return IsNigoriEnabled() && syncapi_initialized_ &&
- core_->syncapi()->InitialSyncEndedForAllEnabledTypes() &&
- core_->syncapi()->IsUsingExplicitPassphrase();
+ return IsNigoriEnabled() && sync_manager_initialized_ &&
+ core_->sync_manager()->InitialSyncEndedForAllEnabledTypes() &&
+ core_->sync_manager()->IsUsingExplicitPassphrase();
}
bool SyncBackendHost::IsCryptographerReady(
const sync_api::BaseTransaction* trans) const {
- return syncapi_initialized_ && trans->GetCryptographer()->is_ready();
+ return sync_manager_initialized_ && trans->GetCryptographer()->is_ready();
}
JsBackend* SyncBackendHost::GetJsBackend() {
- if (syncapi_initialized_) {
+ if (sync_manager_initialized_) {
return core_.get();
} else {
NOTREACHED();
@@ -237,7 +237,9 @@ void SyncBackendHost::Shutdown(bool sync_disabled) {
// - UI Thread (stops some time after we return from this call).
if (sync_thread_.IsRunning()) { // Not running in tests.
// TODO(akalin): Remove the need for this.
- core_->syncapi()->RequestEarlyExit();
+ if (sync_manager_initialized_) {
+ core_->sync_manager()->RequestEarlyExit();
+ }
sync_thread_.message_loop()->PostTask(FROM_HERE,
NewRunnableMethod(core_.get(),
&SyncBackendHost::Core::DoShutdown,
@@ -284,23 +286,28 @@ void SyncBackendHost::Shutdown(bool sync_disabled) {
syncable::AutofillMigrationState
SyncBackendHost::GetAutofillMigrationState() {
- return core_->syncapi()->GetAutofillMigrationState();
+ DCHECK(sync_manager_initialized_);
+ return core_->sync_manager()->GetAutofillMigrationState();
}
void SyncBackendHost::SetAutofillMigrationState(
syncable::AutofillMigrationState state) {
- return core_->syncapi()->SetAutofillMigrationState(state);
+ DCHECK(sync_manager_initialized_);
+ return core_->sync_manager()->SetAutofillMigrationState(state);
}
syncable::AutofillMigrationDebugInfo
SyncBackendHost::GetAutofillMigrationDebugInfo() {
- return core_->syncapi()->GetAutofillMigrationDebugInfo();
+ DCHECK(sync_manager_initialized_);
+ return core_->sync_manager()->GetAutofillMigrationDebugInfo();
}
void SyncBackendHost::SetAutofillMigrationDebugInfo(
syncable::AutofillMigrationDebugInfo::PropertyToSet property_to_set,
const syncable::AutofillMigrationDebugInfo& info) {
- return core_->syncapi()->SetAutofillMigrationDebugInfo(property_to_set, info);
+ DCHECK(sync_manager_initialized_);
+ return core_->sync_manager()->SetAutofillMigrationDebugInfo(
+ property_to_set, info);
}
void SyncBackendHost::ConfigureAutofillMigration() {
@@ -401,7 +408,7 @@ void SyncBackendHost::ConfigureDataTypes(
// Only one configure is allowed at a time.
DCHECK(!pending_config_mode_state_.get());
DCHECK(!pending_download_state_.get());
- DCHECK(syncapi_initialized_);
+ DCHECK(sync_manager_initialized_);
if (types.count(syncable::AUTOFILL_PROFILE) != 0) {
ConfigureAutofillMigration();
@@ -454,7 +461,7 @@ void SyncBackendHost::FinishConfigureDataTypesOnFrontendLoop() {
}
if (pending_config_mode_state_->added_types.none() &&
- !core_->syncapi()->InitialSyncEndedForAllEnabledTypes()) {
+ !core_->sync_manager()->InitialSyncEndedForAllEnabledTypes()) {
LOG(WARNING) << "No new types, but initial sync not finished."
<< "Possible sync db corruption / removal.";
// TODO(tim): Log / UMA / count this somehow?
@@ -505,8 +512,8 @@ void SyncBackendHost::EncryptDataTypes(
}
syncable::ModelTypeSet SyncBackendHost::GetEncryptedDataTypes() const {
- DCHECK(syncapi_initialized_);
- return core_->syncapi()->GetEncryptedDataTypes();
+ DCHECK(sync_manager_initialized_);
+ return core_->sync_manager()->GetEncryptedDataTypes();
}
void SyncBackendHost::RequestNudge(const tracked_objects::Location& location) {
@@ -559,6 +566,7 @@ bool SyncBackendHost::RequestClearServerData() {
}
SyncBackendHost::Core::~Core() {
+ DCHECK(!sync_manager_.get());
}
void SyncBackendHost::Core::NotifyPassphraseRequired(
@@ -649,23 +657,23 @@ SyncBackendHost::Core::DoInitializeOptions::DoInitializeOptions(
SyncBackendHost::Core::DoInitializeOptions::~DoInitializeOptions() {}
sync_api::UserShare* SyncBackendHost::GetUserShare() const {
- DCHECK(syncapi_initialized_);
- return core_->syncapi()->GetUserShare();
+ DCHECK(sync_manager_initialized_);
+ return core_->sync_manager()->GetUserShare();
}
SyncBackendHost::Status SyncBackendHost::GetDetailedStatus() {
- DCHECK(syncapi_initialized_);
- return core_->syncapi()->GetDetailedStatus();
+ DCHECK(sync_manager_initialized_);
+ return core_->sync_manager()->GetDetailedStatus();
}
SyncBackendHost::StatusSummary SyncBackendHost::GetStatusSummary() {
- DCHECK(syncapi_initialized_);
- return core_->syncapi()->GetStatusSummary();
+ DCHECK(sync_manager_initialized_);
+ return core_->sync_manager()->GetStatusSummary();
}
string16 SyncBackendHost::GetAuthenticatedUsername() const {
- DCHECK(syncapi_initialized_);
- return UTF8ToUTF16(core_->syncapi()->GetAuthenticatedUsername());
+ DCHECK(sync_manager_initialized_);
+ return UTF8ToUTF16(core_->sync_manager()->GetAuthenticatedUsername());
}
const GoogleServiceAuthError& SyncBackendHost::GetAuthError() const {
@@ -692,18 +700,18 @@ void SyncBackendHost::GetModelSafeRoutingInfo(ModelSafeRoutingInfo* out) {
}
bool SyncBackendHost::HasUnsyncedItems() const {
- DCHECK(syncapi_initialized_);
- return core_->syncapi()->HasUnsyncedItems();
+ DCHECK(sync_manager_initialized_);
+ return core_->sync_manager()->HasUnsyncedItems();
}
void SyncBackendHost::LogUnsyncedItems(int level) const {
- DCHECK(syncapi_initialized_);
- return core_->syncapi()->LogUnsyncedItems(level);
+ DCHECK(sync_manager_initialized_);
+ return core_->sync_manager()->LogUnsyncedItems(level);
}
SyncBackendHost::Core::Core(const std::string& name, SyncBackendHost* backend)
- : host_(backend),
- syncapi_(new sync_api::SyncManager(name)),
+ : name_(name),
+ host_(backend),
sync_manager_observer_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
parent_router_(NULL),
processing_passphrase_(false),
@@ -713,7 +721,7 @@ SyncBackendHost::Core::Core(const std::string& name, SyncBackendHost* backend)
// Helper to construct a user agent string (ASCII) suitable for use by
// the syncapi for any HTTP communication. This string is used by the sync
// backend for classifying client types when calculating statistics.
-std::string MakeUserAgentForSyncapi() {
+std::string MakeUserAgentForSyncApi() {
std::string user_agent;
user_agent = "Chrome ";
#if defined(OS_WIN)
@@ -755,16 +763,17 @@ void SyncBackendHost::Core::DoInitialize(const DoInitializeOptions& options) {
bool success = file_util::CreateDirectory(host_->sync_data_folder_path());
DCHECK(success);
- syncapi_->AddObserver(this);
+ sync_manager_.reset(new sync_api::SyncManager(name_)),
+ sync_manager_->AddObserver(this);
const FilePath& path_str = host_->sync_data_folder_path();
- success = syncapi_->Init(
+ success = sync_manager_->Init(
path_str,
(options.service_url.host() + options.service_url.path()).c_str(),
options.service_url.EffectiveIntPort(),
options.service_url.SchemeIsSecure(),
options.http_bridge_factory,
host_, // ModelSafeWorkerRegistrar.
- MakeUserAgentForSyncapi().c_str(),
+ MakeUserAgentForSyncApi().c_str(),
options.credentials,
sync_notifier_.get(),
options.restored_key_for_bootstrapping,
@@ -775,26 +784,26 @@ void SyncBackendHost::Core::DoInitialize(const DoInitializeOptions& options) {
void SyncBackendHost::Core::DoUpdateCredentials(
const SyncCredentials& credentials) {
DCHECK(MessageLoop::current() == host_->sync_thread_.message_loop());
- syncapi_->UpdateCredentials(credentials);
+ sync_manager_->UpdateCredentials(credentials);
}
void SyncBackendHost::Core::DoUpdateEnabledTypes() {
DCHECK(MessageLoop::current() == host_->sync_thread_.message_loop());
- syncapi_->UpdateEnabledTypes();
+ sync_manager_->UpdateEnabledTypes();
}
void SyncBackendHost::Core::DoStartSyncing() {
DCHECK(MessageLoop::current() == host_->sync_thread_.message_loop());
- syncapi_->StartSyncingNormally();
+ sync_manager_->StartSyncingNormally();
if (deferred_nudge_for_cleanup_requested_)
- syncapi_->RequestNudge(FROM_HERE);
+ sync_manager_->RequestNudge(FROM_HERE);
deferred_nudge_for_cleanup_requested_ = false;
}
void SyncBackendHost::Core::DoSetPassphrase(const std::string& passphrase,
bool is_explicit) {
DCHECK(MessageLoop::current() == host_->sync_thread_.message_loop());
- syncapi_->SetPassphrase(passphrase, is_explicit);
+ sync_manager_->SetPassphrase(passphrase, is_explicit);
}
bool SyncBackendHost::Core::processing_passphrase() const {
@@ -810,17 +819,17 @@ void SyncBackendHost::Core::set_processing_passphrase() {
void SyncBackendHost::Core::DoEncryptDataTypes(
const syncable::ModelTypeSet& encrypted_types) {
DCHECK(MessageLoop::current() == host_->sync_thread_.message_loop());
- syncapi_->EncryptDataTypes(encrypted_types);
+ sync_manager_->EncryptDataTypes(encrypted_types);
}
void SyncBackendHost::Core::DoRequestConfig(
const syncable::ModelTypeBitSet& added_types,
sync_api::ConfigureReason reason) {
- syncapi_->RequestConfig(added_types, reason);
+ sync_manager_->RequestConfig(added_types, reason);
}
void SyncBackendHost::Core::DoStartConfiguration(Callback0::Type* callback) {
- syncapi_->StartConfigurationMode(callback);
+ sync_manager_->StartConfigurationMode(callback);
}
UIModelWorker* SyncBackendHost::ui_worker() {
@@ -836,9 +845,10 @@ void SyncBackendHost::Core::DoShutdown(bool sync_disabled) {
DCHECK(MessageLoop::current() == host_->sync_thread_.message_loop());
save_changes_timer_.Stop();
- syncapi_->Shutdown(); // Stops the SyncerThread.
- syncapi_->RemoveObserver(this);
+ sync_manager_->Shutdown(); // Stops the SyncerThread.
+ sync_manager_->RemoveObserver(this);
DisconnectChildJsEventRouter();
+ sync_manager_.reset();
host_->ui_worker()->OnSyncerShutdownComplete();
if (sync_disabled)
@@ -962,14 +972,14 @@ void SyncBackendHost::Core::OnInitializationComplete() {
// can definitely be null in here.
host_->frontend_loop_->PostTask(FROM_HERE,
NewRunnableMethod(this,
- &Core::HandleInitalizationCompletedOnFrontendLoop));
+ &Core::HandleInitializationCompletedOnFrontendLoop));
// Initialization is complete, so we can schedule recurring SaveChanges.
host_->sync_thread_.message_loop()->PostTask(FROM_HERE,
NewRunnableMethod(this, &Core::StartSavingChanges));
}
-void SyncBackendHost::Core::HandleInitalizationCompletedOnFrontendLoop() {
+void SyncBackendHost::Core::HandleInitializationCompletedOnFrontendLoop() {
if (!host_)
return;
host_->HandleInitializationCompletedOnFrontendLoop();
@@ -978,10 +988,10 @@ void SyncBackendHost::Core::HandleInitalizationCompletedOnFrontendLoop() {
void SyncBackendHost::HandleInitializationCompletedOnFrontendLoop() {
if (!frontend_)
return;
- syncapi_initialized_ = true;
+ sync_manager_initialized_ = true;
// Now that the syncapi is initialized, we can update the cryptographer (and
// can handle any ON_PASSPHRASE_REQUIRED notifications that may arise).
- core_->syncapi()->RefreshEncryption();
+ core_->sync_manager()->RefreshEncryption();
frontend_->OnBackendInitialized();
}
@@ -1123,15 +1133,15 @@ void SyncBackendHost::Core::StartSavingChanges() {
void SyncBackendHost::Core::DoRequestNudge(
const tracked_objects::Location& nudge_location) {
- syncapi_->RequestNudge(nudge_location);
+ sync_manager_->RequestNudge(nudge_location);
}
void SyncBackendHost::Core::DoRequestClearServerData() {
- syncapi_->RequestClearServerData();
+ sync_manager_->RequestClearServerData();
}
void SyncBackendHost::Core::SaveChanges() {
- syncapi_->SaveChanges();
+ sync_manager_->SaveChanges();
}
void SyncBackendHost::Core::DeleteSyncDataFolder() {
@@ -1186,23 +1196,23 @@ void SyncBackendHost::Core::ConnectChildJsEventRouter() {
DCHECK_EQ(MessageLoop::current(), host_->sync_thread_.message_loop());
// We need this check since AddObserver() can be called at most once
// for a given observer.
- if (!syncapi_->GetJsBackend()->GetParentJsEventRouter()) {
- syncapi_->GetJsBackend()->SetParentJsEventRouter(this);
- syncapi_->AddObserver(&sync_manager_observer_);
+ if (!sync_manager_->GetJsBackend()->GetParentJsEventRouter()) {
+ sync_manager_->GetJsBackend()->SetParentJsEventRouter(this);
+ sync_manager_->AddObserver(&sync_manager_observer_);
}
}
void SyncBackendHost::Core::DisconnectChildJsEventRouter() {
DCHECK_EQ(MessageLoop::current(), host_->sync_thread_.message_loop());
- syncapi_->GetJsBackend()->RemoveParentJsEventRouter();
- syncapi_->RemoveObserver(&sync_manager_observer_);
+ sync_manager_->GetJsBackend()->RemoveParentJsEventRouter();
+ sync_manager_->RemoveObserver(&sync_manager_observer_);
}
void SyncBackendHost::Core::DoProcessMessage(
const std::string& name, const JsArgList& args,
const JsEventHandler* sender) {
DCHECK_EQ(MessageLoop::current(), host_->sync_thread_.message_loop());
- syncapi_->GetJsBackend()->ProcessMessage(name, args, sender);
+ sync_manager_->GetJsBackend()->ProcessMessage(name, args, sender);
}
void SyncBackendHost::Core::DeferNudgeForCleanup() {
« no previous file with comments | « chrome/browser/sync/glue/sync_backend_host.h ('k') | chrome/browser/sync/js_directory_change_listener.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698