Chromium Code Reviews| 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 ce3c016cf1023ad396eb407c79382abf96ca9d8b..dede48bdcd2c6b37125f58d4c77a16defc534e5d 100644 |
| --- a/chrome/browser/sync/profile_sync_service.cc |
| +++ b/chrome/browser/sync/profile_sync_service.cc |
| @@ -79,6 +79,7 @@ |
| #include "sync/internal_api/public/configure_reason.h" |
| #include "sync/internal_api/public/http_bridge_network_resources.h" |
| #include "sync/internal_api/public/network_resources.h" |
| +#include "sync/internal_api/public/sync_core_proxy.h" |
| #include "sync/internal_api/public/sync_encryption_handler.h" |
| #include "sync/internal_api/public/util/experiments.h" |
| #include "sync/internal_api/public/util/sync_string_conversions.h" |
| @@ -347,10 +348,18 @@ void ProfileSyncService::UnregisterAuthNotifications() { |
| void ProfileSyncService::RegisterDataTypeController( |
| DataTypeController* data_type_controller) { |
| DCHECK_EQ(data_type_controllers_.count(data_type_controller->type()), 0U); |
| + DCHECK(!GetRegisteredNonBlockingDataTypes().Has( |
| + data_type_controller->type())); |
| data_type_controllers_[data_type_controller->type()] = |
| data_type_controller; |
| } |
| +void ProfileSyncService::RegisterNonBlockingType(syncer::ModelType type) { |
| + DCHECK_EQ(data_type_controllers_.count(type), 0U); |
| + DCHECK(!GetRegisteredNonBlockingDataTypes().Has(type)); |
| + off_thread_types_.Put(type); |
|
Nicolas Zea
2014/04/02 23:19:05
Presumably this is where we could kick off the sta
rlarocque
2014/04/03 01:03:46
Nope, not here. Registration is something that sh
|
| +} |
| + |
| browser_sync::SessionModelAssociator* |
| ProfileSyncService::GetSessionModelAssociatorDeprecated() { |
| if (!IsSessionsDataTypeControllerRunning()) |
| @@ -543,7 +552,8 @@ void ProfileSyncService::InitializeBackend(bool delete_stale_data) { |
| bool ProfileSyncService::IsEncryptedDatatypeEnabled() const { |
| if (encryption_pending()) |
| return true; |
| - const syncer::ModelTypeSet preferred_types = GetPreferredDataTypes(); |
| + const syncer::ModelTypeSet preferred_types = |
| + GetPreferredDirectoryDataTypes(); |
|
Nicolas Zea
2014/04/02 23:19:05
Why not GetPreferredDataTypes? Encryption isn't so
rlarocque
2014/04/03 01:03:46
Good point. Fixed.
|
| const syncer::ModelTypeSet encrypted_types = GetEncryptedDataTypes(); |
| DCHECK(encrypted_types.Has(syncer::PASSWORDS)); |
| return !Intersection(preferred_types, encrypted_types).Empty(); |
| @@ -574,7 +584,7 @@ void ProfileSyncService::OnDataTypeRequestsSyncStartup( |
| return; |
| } |
| - if (!GetPreferredDataTypes().Has(type)) { |
| + if (!GetPreferredDirectoryDataTypes().Has(type)) { |
|
Nicolas Zea
2014/04/02 23:19:05
Here too. If a nonblocking type requests sync star
rlarocque
2014/04/03 01:03:46
Maybe. The non-blocking types won't be as badly a
|
| // We can get here as datatype SyncableServices are typically wired up |
| // to the native datatype even if sync isn't enabled. |
| DVLOG(1) << "Dropping sync startup request because type " |
| @@ -936,6 +946,8 @@ void ProfileSyncService::OnBackendInitialized( |
| backend_initialized_ = true; |
| + backend_->SetPreferredNonBlockingTypes(GetPreferredNonBlockingDataTypes()); |
|
Nicolas Zea
2014/04/02 23:19:05
It's not clear to me why the backend needs to know
rlarocque
2014/04/03 01:03:46
I was surprised to learn about this, too.
We want
Nicolas Zea
2014/04/03 17:52:15
But why is this different from directory types? Do
rlarocque
2014/04/03 19:57:03
Directory types register for invalidations once th
|
| + |
| sync_js_controller_.AttachJsBackend(js_backend); |
| debug_info_listener_ = debug_info_listener; |
| @@ -943,6 +955,8 @@ void ProfileSyncService::OnBackendInitialized( |
| backend_->SetForwardProtocolEvents(true); |
| } |
| + syncer::SyncCoreProxy sync_core_proxy_ = backend_->GetSyncCoreProxy(); |
| + |
| // If we have a cached passphrase use it to decrypt/encrypt data now that the |
| // backend is initialized. We want to call this before notifying observers in |
| // case this operation affects the "passphrase required" status. |
| @@ -1217,7 +1231,7 @@ void ProfileSyncService::OnPassphraseRequired( |
| << syncer::PassphraseRequiredReasonToString(reason); |
| passphrase_required_reason_ = reason; |
| - const syncer::ModelTypeSet types = GetPreferredDataTypes(); |
| + const syncer::ModelTypeSet types = GetPreferredDirectoryDataTypes(); |
| if (data_type_manager_) { |
| // Reconfigure without the encrypted types (excluded implicitly via the |
| // failed datatypes handler). |
| @@ -1245,7 +1259,7 @@ void ProfileSyncService::OnPassphraseAccepted() { |
| // Make sure the data types that depend on the passphrase are started at |
| // this time. |
| - const syncer::ModelTypeSet types = GetPreferredDataTypes(); |
| + const syncer::ModelTypeSet types = GetPreferredDirectoryDataTypes(); |
| if (data_type_manager_) { |
| // Re-enable any encrypted types if necessary. |
| data_type_manager_->Configure(types, |
| @@ -1660,12 +1674,15 @@ void ProfileSyncService::ChangePreferredDataTypes( |
| sync_prefs_.SetPreferredDataTypes(registered_types, |
| registered_preferred_types); |
| + if (backend_.get() && backend_initialized_) |
| + backend_->SetPreferredNonBlockingTypes(GetPreferredNonBlockingDataTypes()); |
| + |
| // Now reconfigure the DTM. |
| ReconfigureDatatypeManager(); |
| } |
| syncer::ModelTypeSet ProfileSyncService::GetActiveDataTypes() const { |
| - const syncer::ModelTypeSet preferred_types = GetPreferredDataTypes(); |
| + const syncer::ModelTypeSet preferred_types = GetPreferredDirectoryDataTypes(); |
|
Nicolas Zea
2014/04/02 23:19:05
ActiveTypes only cares about whether they're runni
rlarocque
2014/04/03 01:03:46
I thought this was used only for construction of t
Nicolas Zea
2014/04/03 17:52:15
Anything that cares about what types are actually
|
| const syncer::ModelTypeSet failed_types = |
| failed_data_types_handler_.GetFailedTypes(); |
| return Difference(preferred_types, failed_types); |
| @@ -1678,7 +1695,27 @@ syncer::ModelTypeSet ProfileSyncService::GetPreferredDataTypes() const { |
| return preferred_types; |
| } |
| +syncer::ModelTypeSet |
| +ProfileSyncService::GetPreferredDirectoryDataTypes() const { |
| + const syncer::ModelTypeSet registered_directory_types = |
| + GetRegisteredDirectoryDataTypes(); |
| + const syncer::ModelTypeSet preferred_types = |
| + sync_prefs_.GetPreferredDataTypes(registered_directory_types); |
| + return preferred_types; |
| +} |
| + |
| +syncer::ModelTypeSet |
| +ProfileSyncService::GetPreferredNonBlockingDataTypes() const { |
| + return sync_prefs_.GetPreferredDataTypes(GetRegisteredNonBlockingDataTypes()); |
| +} |
| + |
| syncer::ModelTypeSet ProfileSyncService::GetRegisteredDataTypes() const { |
| + return Union(GetRegisteredDirectoryDataTypes(), |
| + GetRegisteredNonBlockingDataTypes()); |
| +} |
| + |
| +syncer::ModelTypeSet |
| +ProfileSyncService::GetRegisteredDirectoryDataTypes() const { |
| syncer::ModelTypeSet registered_types; |
| // The data_type_controllers_ are determined by command-line flags; that's |
| // effectively what controls the values returned here. |
| @@ -1690,6 +1727,11 @@ syncer::ModelTypeSet ProfileSyncService::GetRegisteredDataTypes() const { |
| return registered_types; |
| } |
| +syncer::ModelTypeSet |
| +ProfileSyncService::GetRegisteredNonBlockingDataTypes() const { |
| + return off_thread_types_; |
| +} |
| + |
| bool ProfileSyncService::IsUsingSecondaryPassphrase() const { |
| syncer::PassphraseType passphrase_type = GetPassphraseType(); |
| return passphrase_type == syncer::FROZEN_IMPLICIT_PASSPHRASE || |
| @@ -1711,7 +1753,8 @@ bool ProfileSyncService::IsCryptographerReady( |
| void ProfileSyncService::ConfigurePriorityDataTypes() { |
| const syncer::ModelTypeSet priority_types = |
| - Intersection(GetPreferredDataTypes(), syncer::PriorityUserTypes()); |
| + Intersection(GetPreferredDirectoryDataTypes(), |
| + syncer::PriorityUserTypes()); |
| if (!priority_types.Empty()) { |
| const syncer::ConfigureReason reason = HasSyncSetupCompleted() ? |
| syncer::CONFIGURE_REASON_RECONFIGURATION : |
| @@ -1749,7 +1792,7 @@ void ProfileSyncService::ConfigureDataTypeManager() { |
| base::Unretained(this)))); |
| } |
| - const syncer::ModelTypeSet types = GetPreferredDataTypes(); |
| + const syncer::ModelTypeSet types = GetPreferredDirectoryDataTypes(); |
| syncer::ConfigureReason reason = syncer::CONFIGURE_REASON_UNKNOWN; |
| if (!HasSyncSetupCompleted()) { |
| reason = syncer::CONFIGURE_REASON_NEW_CLIENT; |
| @@ -1866,6 +1909,9 @@ base::Value* ProfileSyncService::GetTypeStatusMap() const { |
| } else if (throttled_types.Has(type)) { |
| type_status->SetString("status", "warning"); |
| type_status->SetString("value", "Throttled"); |
| + } else if (GetRegisteredNonBlockingDataTypes().Has(type)) { |
| + type_status->SetString("status", "ok"); |
| + type_status->SetString("value", "Non-Blocking"); |
| } else if (active_types.Has(type)) { |
| type_status->SetString("status", "ok"); |
| type_status->SetString("value", "Active: " + |