OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/sync/profile_sync_service.h" | 5 #include "chrome/browser/sync/profile_sync_service.h" |
6 | 6 |
7 #include <cstddef> | 7 #include <cstddef> |
8 #include <map> | 8 #include <map> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 #if defined(OS_ANDROID) | 104 #if defined(OS_ANDROID) |
105 #include "sync/internal_api/public/read_transaction.h" | 105 #include "sync/internal_api/public/read_transaction.h" |
106 #endif | 106 #endif |
107 | 107 |
108 using browser_sync::NotificationServiceSessionsRouter; | 108 using browser_sync::NotificationServiceSessionsRouter; |
109 using browser_sync::ProfileSyncServiceStartBehavior; | 109 using browser_sync::ProfileSyncServiceStartBehavior; |
110 using browser_sync::SyncBackendHost; | 110 using browser_sync::SyncBackendHost; |
111 using sync_driver::ChangeProcessor; | 111 using sync_driver::ChangeProcessor; |
112 using sync_driver::DataTypeController; | 112 using sync_driver::DataTypeController; |
113 using sync_driver::DataTypeManager; | 113 using sync_driver::DataTypeManager; |
114 using sync_driver::FailedDataTypesHandler; | 114 using sync_driver::DataTypeStatusTable; |
115 using syncer::ModelType; | 115 using syncer::ModelType; |
116 using syncer::ModelTypeSet; | 116 using syncer::ModelTypeSet; |
117 using syncer::JsBackend; | 117 using syncer::JsBackend; |
118 using syncer::JsController; | 118 using syncer::JsController; |
119 using syncer::JsEventDetails; | 119 using syncer::JsEventDetails; |
120 using syncer::JsEventHandler; | 120 using syncer::JsEventHandler; |
121 using syncer::ModelSafeRoutingInfo; | 121 using syncer::ModelSafeRoutingInfo; |
122 using syncer::SyncCredentials; | 122 using syncer::SyncCredentials; |
123 using syncer::SyncProtocolError; | 123 using syncer::SyncProtocolError; |
124 using syncer::WeakHandle; | 124 using syncer::WeakHandle; |
(...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
955 | 955 |
956 void ProfileSyncService::NotifySyncCycleCompleted() { | 956 void ProfileSyncService::NotifySyncCycleCompleted() { |
957 FOR_EACH_OBSERVER(ProfileSyncServiceBase::Observer, observers_, | 957 FOR_EACH_OBSERVER(ProfileSyncServiceBase::Observer, observers_, |
958 OnSyncCycleCompleted()); | 958 OnSyncCycleCompleted()); |
959 } | 959 } |
960 | 960 |
961 void ProfileSyncService::ClearStaleErrors() { | 961 void ProfileSyncService::ClearStaleErrors() { |
962 ClearUnrecoverableError(); | 962 ClearUnrecoverableError(); |
963 last_actionable_error_ = SyncProtocolError(); | 963 last_actionable_error_ = SyncProtocolError(); |
964 // Clear the data type errors as well. | 964 // Clear the data type errors as well. |
965 failed_data_types_handler_.Reset(); | 965 data_type_status_table_.Reset(); |
966 } | 966 } |
967 | 967 |
968 void ProfileSyncService::ClearUnrecoverableError() { | 968 void ProfileSyncService::ClearUnrecoverableError() { |
969 unrecoverable_error_reason_ = ERROR_REASON_UNSET; | 969 unrecoverable_error_reason_ = ERROR_REASON_UNSET; |
970 unrecoverable_error_message_.clear(); | 970 unrecoverable_error_message_.clear(); |
971 unrecoverable_error_location_ = tracked_objects::Location(); | 971 unrecoverable_error_location_ = tracked_objects::Location(); |
972 } | 972 } |
973 | 973 |
974 void ProfileSyncService::RegisterNewDataType(syncer::ModelType data_type) { | 974 void ProfileSyncService::RegisterNewDataType(syncer::ModelType data_type) { |
975 if (directory_data_type_controllers_.count(data_type) > 0) | 975 if (directory_data_type_controllers_.count(data_type) > 0) |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1412 | 1412 |
1413 // If sessions are encrypted, full history sync is not possible, and | 1413 // If sessions are encrypted, full history sync is not possible, and |
1414 // delete directives are unnecessary. | 1414 // delete directives are unnecessary. |
1415 if (GetActiveDataTypes().Has(syncer::HISTORY_DELETE_DIRECTIVES) && | 1415 if (GetActiveDataTypes().Has(syncer::HISTORY_DELETE_DIRECTIVES) && |
1416 encrypted_types_.Has(syncer::SESSIONS)) { | 1416 encrypted_types_.Has(syncer::SESSIONS)) { |
1417 syncer::SyncError error( | 1417 syncer::SyncError error( |
1418 FROM_HERE, | 1418 FROM_HERE, |
1419 syncer::SyncError::DATATYPE_POLICY_ERROR, | 1419 syncer::SyncError::DATATYPE_POLICY_ERROR, |
1420 "Delete directives not supported with encryption.", | 1420 "Delete directives not supported with encryption.", |
1421 syncer::HISTORY_DELETE_DIRECTIVES); | 1421 syncer::HISTORY_DELETE_DIRECTIVES); |
1422 FailedDataTypesHandler::TypeErrorMap error_map; | 1422 DataTypeStatusTable::TypeErrorMap error_map; |
1423 error_map[error.model_type()] = error; | 1423 error_map[error.model_type()] = error; |
1424 failed_data_types_handler_.UpdateFailedDataTypes(error_map); | 1424 data_type_status_table_.UpdateFailedDataTypes(error_map); |
1425 ReconfigureDatatypeManager(); | 1425 ReconfigureDatatypeManager(); |
1426 } | 1426 } |
1427 } | 1427 } |
1428 | 1428 |
1429 void ProfileSyncService::OnEncryptionComplete() { | 1429 void ProfileSyncService::OnEncryptionComplete() { |
1430 DVLOG(1) << "Encryption complete"; | 1430 DVLOG(1) << "Encryption complete"; |
1431 if (encryption_pending_ && encrypt_everything_) { | 1431 if (encryption_pending_ && encrypt_everything_) { |
1432 encryption_pending_ = false; | 1432 encryption_pending_ = false; |
1433 // This is to nudge the integration tests when encryption is | 1433 // This is to nudge the integration tests when encryption is |
1434 // finished. | 1434 // finished. |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1570 DVLOG(0) << "ProfileSyncService::Observe Sync Configure aborted"; | 1570 DVLOG(0) << "ProfileSyncService::Observe Sync Configure aborted"; |
1571 expect_sync_configuration_aborted_ = false; | 1571 expect_sync_configuration_aborted_ = false; |
1572 return; | 1572 return; |
1573 } | 1573 } |
1574 | 1574 |
1575 // Handle unrecoverable error. | 1575 // Handle unrecoverable error. |
1576 if (configure_status_ != DataTypeManager::OK) { | 1576 if (configure_status_ != DataTypeManager::OK) { |
1577 // Something catastrophic had happened. We should only have one | 1577 // Something catastrophic had happened. We should only have one |
1578 // error representing it. | 1578 // error representing it. |
1579 syncer::SyncError error = | 1579 syncer::SyncError error = |
1580 failed_data_types_handler_.GetUnrecoverableError(); | 1580 data_type_status_table_.GetUnrecoverableError(); |
1581 DCHECK(error.IsSet()); | 1581 DCHECK(error.IsSet()); |
1582 std::string message = | 1582 std::string message = |
1583 "Sync configuration failed with status " + | 1583 "Sync configuration failed with status " + |
1584 DataTypeManager::ConfigureStatusToString(configure_status_) + | 1584 DataTypeManager::ConfigureStatusToString(configure_status_) + |
1585 " caused by " + | 1585 " caused by " + |
1586 syncer::ModelTypeSetToString( | 1586 syncer::ModelTypeSetToString( |
1587 failed_data_types_handler_.GetUnrecoverableErrorTypes()) + | 1587 data_type_status_table_.GetUnrecoverableErrorTypes()) + |
1588 ": " + error.message(); | 1588 ": " + error.message(); |
1589 LOG(ERROR) << "ProfileSyncService error: " << message; | 1589 LOG(ERROR) << "ProfileSyncService error: " << message; |
1590 OnInternalUnrecoverableError(error.location(), | 1590 OnInternalUnrecoverableError(error.location(), |
1591 message, | 1591 message, |
1592 true, | 1592 true, |
1593 ERROR_REASON_CONFIGURATION_FAILURE); | 1593 ERROR_REASON_CONFIGURATION_FAILURE); |
1594 return; | 1594 return; |
1595 } | 1595 } |
1596 | 1596 |
1597 // We should never get in a state where we have no encrypted datatypes | 1597 // We should never get in a state where we have no encrypted datatypes |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1833 bool sync_everything, | 1833 bool sync_everything, |
1834 syncer::ModelTypeSet chosen_types) { | 1834 syncer::ModelTypeSet chosen_types) { |
1835 if (!backend_.get() && !HasUnrecoverableError()) { | 1835 if (!backend_.get() && !HasUnrecoverableError()) { |
1836 NOTREACHED(); | 1836 NOTREACHED(); |
1837 return; | 1837 return; |
1838 } | 1838 } |
1839 | 1839 |
1840 UpdateSelectedTypesHistogram(sync_everything, chosen_types); | 1840 UpdateSelectedTypesHistogram(sync_everything, chosen_types); |
1841 sync_prefs_.SetKeepEverythingSynced(sync_everything); | 1841 sync_prefs_.SetKeepEverythingSynced(sync_everything); |
1842 | 1842 |
1843 failed_data_types_handler_.Reset(); | 1843 data_type_status_table_.Reset(); |
1844 if (GetActiveDataTypes().Has(syncer::HISTORY_DELETE_DIRECTIVES) && | 1844 if (GetActiveDataTypes().Has(syncer::HISTORY_DELETE_DIRECTIVES) && |
1845 encrypted_types_.Has(syncer::SESSIONS)) { | 1845 encrypted_types_.Has(syncer::SESSIONS)) { |
1846 syncer::SyncError error( | 1846 syncer::SyncError error( |
1847 FROM_HERE, | 1847 FROM_HERE, |
1848 syncer::SyncError::DATATYPE_POLICY_ERROR, | 1848 syncer::SyncError::DATATYPE_POLICY_ERROR, |
1849 "Delete directives not supported with encryption.", | 1849 "Delete directives not supported with encryption.", |
1850 syncer::HISTORY_DELETE_DIRECTIVES); | 1850 syncer::HISTORY_DELETE_DIRECTIVES); |
1851 FailedDataTypesHandler::TypeErrorMap error_map; | 1851 DataTypeStatusTable::TypeErrorMap error_map; |
1852 error_map[error.model_type()] = error; | 1852 error_map[error.model_type()] = error; |
1853 failed_data_types_handler_.UpdateFailedDataTypes(error_map); | 1853 data_type_status_table_.UpdateFailedDataTypes(error_map); |
1854 } | 1854 } |
1855 ChangePreferredDataTypes(chosen_types); | 1855 ChangePreferredDataTypes(chosen_types); |
1856 AcknowledgeSyncedTypes(); | 1856 AcknowledgeSyncedTypes(); |
1857 NotifyObservers(); | 1857 NotifyObservers(); |
1858 } | 1858 } |
1859 | 1859 |
1860 void ProfileSyncService::ChangePreferredDataTypes( | 1860 void ProfileSyncService::ChangePreferredDataTypes( |
1861 syncer::ModelTypeSet preferred_types) { | 1861 syncer::ModelTypeSet preferred_types) { |
1862 | 1862 |
1863 DVLOG(1) << "ChangePreferredDataTypes invoked"; | 1863 DVLOG(1) << "ChangePreferredDataTypes invoked"; |
1864 const syncer::ModelTypeSet registered_types = GetRegisteredDataTypes(); | 1864 const syncer::ModelTypeSet registered_types = GetRegisteredDataTypes(); |
1865 const syncer::ModelTypeSet registered_preferred_types = | 1865 const syncer::ModelTypeSet registered_preferred_types = |
1866 Intersection(registered_types, preferred_types); | 1866 Intersection(registered_types, preferred_types); |
1867 sync_prefs_.SetPreferredDataTypes(registered_types, | 1867 sync_prefs_.SetPreferredDataTypes(registered_types, |
1868 registered_preferred_types); | 1868 registered_preferred_types); |
1869 | 1869 |
1870 // Now reconfigure the DTM. | 1870 // Now reconfigure the DTM. |
1871 ReconfigureDatatypeManager(); | 1871 ReconfigureDatatypeManager(); |
1872 | 1872 |
1873 // TODO(rlarocque): Reconfigure the NonBlockingDataTypeManager, too. Blocked | 1873 // TODO(rlarocque): Reconfigure the NonBlockingDataTypeManager, too. Blocked |
1874 // on crbug.com/368834. Until that bug is fixed, it's difficult to tell | 1874 // on crbug.com/368834. Until that bug is fixed, it's difficult to tell |
1875 // which types should be enabled and when. | 1875 // which types should be enabled and when. |
1876 } | 1876 } |
1877 | 1877 |
1878 syncer::ModelTypeSet ProfileSyncService::GetActiveDataTypes() const { | 1878 syncer::ModelTypeSet ProfileSyncService::GetActiveDataTypes() const { |
1879 const syncer::ModelTypeSet preferred_types = GetPreferredDataTypes(); | 1879 const syncer::ModelTypeSet preferred_types = GetPreferredDataTypes(); |
1880 const syncer::ModelTypeSet failed_types = | 1880 const syncer::ModelTypeSet failed_types = |
1881 failed_data_types_handler_.GetFailedTypes(); | 1881 data_type_status_table_.GetFailedTypes(); |
1882 return Difference(preferred_types, failed_types); | 1882 return Difference(preferred_types, failed_types); |
1883 } | 1883 } |
1884 | 1884 |
1885 syncer::ModelTypeSet ProfileSyncService::GetPreferredDataTypes() const { | 1885 syncer::ModelTypeSet ProfileSyncService::GetPreferredDataTypes() const { |
1886 const syncer::ModelTypeSet registered_types = GetRegisteredDataTypes(); | 1886 const syncer::ModelTypeSet registered_types = GetRegisteredDataTypes(); |
1887 const syncer::ModelTypeSet preferred_types = | 1887 const syncer::ModelTypeSet preferred_types = |
1888 sync_prefs_.GetPreferredDataTypes(registered_types); | 1888 sync_prefs_.GetPreferredDataTypes(registered_types); |
1889 return preferred_types; | 1889 return preferred_types; |
1890 } | 1890 } |
1891 | 1891 |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1969 | 1969 |
1970 bool restart = false; | 1970 bool restart = false; |
1971 if (!directory_data_type_manager_) { | 1971 if (!directory_data_type_manager_) { |
1972 restart = true; | 1972 restart = true; |
1973 directory_data_type_manager_.reset( | 1973 directory_data_type_manager_.reset( |
1974 factory_->CreateDataTypeManager(debug_info_listener_, | 1974 factory_->CreateDataTypeManager(debug_info_listener_, |
1975 &directory_data_type_controllers_, | 1975 &directory_data_type_controllers_, |
1976 this, | 1976 this, |
1977 backend_.get(), | 1977 backend_.get(), |
1978 this, | 1978 this, |
1979 &failed_data_types_handler_)); | 1979 &data_type_status_table_)); |
1980 | 1980 |
1981 // We create the migrator at the same time. | 1981 // We create the migrator at the same time. |
1982 migrator_.reset( | 1982 migrator_.reset( |
1983 new browser_sync::BackendMigrator( | 1983 new browser_sync::BackendMigrator( |
1984 profile_->GetDebugName(), GetUserShare(), | 1984 profile_->GetDebugName(), GetUserShare(), |
1985 this, directory_data_type_manager_.get(), | 1985 this, directory_data_type_manager_.get(), |
1986 base::Bind(&ProfileSyncService::StartSyncingWithServer, | 1986 base::Bind(&ProfileSyncService::StartSyncingWithServer, |
1987 base::Unretained(this)))); | 1987 base::Unretained(this)))); |
1988 } | 1988 } |
1989 | 1989 |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2050 } | 2050 } |
2051 } | 2051 } |
2052 | 2052 |
2053 base::Value* ProfileSyncService::GetTypeStatusMap() const { | 2053 base::Value* ProfileSyncService::GetTypeStatusMap() const { |
2054 scoped_ptr<base::ListValue> result(new base::ListValue()); | 2054 scoped_ptr<base::ListValue> result(new base::ListValue()); |
2055 | 2055 |
2056 if (!backend_.get() || !backend_initialized_) { | 2056 if (!backend_.get() || !backend_initialized_) { |
2057 return result.release(); | 2057 return result.release(); |
2058 } | 2058 } |
2059 | 2059 |
2060 FailedDataTypesHandler::TypeErrorMap error_map = | 2060 DataTypeStatusTable::TypeErrorMap error_map = |
2061 failed_data_types_handler_.GetAllErrors(); | 2061 data_type_status_table_.GetAllErrors(); |
2062 | |
2063 ModelTypeSet active_types; | 2062 ModelTypeSet active_types; |
2064 ModelTypeSet passive_types; | 2063 ModelTypeSet passive_types; |
2065 ModelSafeRoutingInfo routing_info; | 2064 ModelSafeRoutingInfo routing_info; |
2066 backend_->GetModelSafeRoutingInfo(&routing_info); | 2065 backend_->GetModelSafeRoutingInfo(&routing_info); |
2067 for (ModelSafeRoutingInfo::const_iterator it = routing_info.begin(); | 2066 for (ModelSafeRoutingInfo::const_iterator it = routing_info.begin(); |
2068 it != routing_info.end(); ++it) { | 2067 it != routing_info.end(); ++it) { |
2069 if (it->second == syncer::GROUP_PASSIVE) { | 2068 if (it->second == syncer::GROUP_PASSIVE) { |
2070 passive_types.Put(it->first); | 2069 passive_types.Put(it->first); |
2071 } else { | 2070 } else { |
2072 active_types.Put(it->first); | 2071 active_types.Put(it->first); |
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2567 syncer::ModelTypeSet types; | 2566 syncer::ModelTypeSet types; |
2568 for (std::set<SyncTypePreferenceProvider*>::const_iterator it = | 2567 for (std::set<SyncTypePreferenceProvider*>::const_iterator it = |
2569 preference_providers_.begin(); | 2568 preference_providers_.begin(); |
2570 it != preference_providers_.end(); | 2569 it != preference_providers_.end(); |
2571 ++it) { | 2570 ++it) { |
2572 types.PutAll((*it)->GetPreferredDataTypes()); | 2571 types.PutAll((*it)->GetPreferredDataTypes()); |
2573 } | 2572 } |
2574 return types; | 2573 return types; |
2575 } | 2574 } |
2576 | 2575 |
2577 const FailedDataTypesHandler& ProfileSyncService::failed_data_types_handler() | 2576 const DataTypeStatusTable& ProfileSyncService::data_type_status_table() |
2578 const { | 2577 const { |
2579 return failed_data_types_handler_; | 2578 return data_type_status_table_; |
2580 } | 2579 } |
2581 | 2580 |
2582 void ProfileSyncService::OnInternalUnrecoverableError( | 2581 void ProfileSyncService::OnInternalUnrecoverableError( |
2583 const tracked_objects::Location& from_here, | 2582 const tracked_objects::Location& from_here, |
2584 const std::string& message, | 2583 const std::string& message, |
2585 bool delete_sync_database, | 2584 bool delete_sync_database, |
2586 UnrecoverableErrorReason reason) { | 2585 UnrecoverableErrorReason reason) { |
2587 DCHECK(!HasUnrecoverableError()); | 2586 DCHECK(!HasUnrecoverableError()); |
2588 unrecoverable_error_reason_ = reason; | 2587 unrecoverable_error_reason_ = reason; |
2589 OnUnrecoverableErrorImpl(from_here, message, delete_sync_database); | 2588 OnUnrecoverableErrorImpl(from_here, message, delete_sync_database); |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2772 true)); | 2771 true)); |
2773 } | 2772 } |
2774 | 2773 |
2775 bool ProfileSyncService::NeedBackup() const { | 2774 bool ProfileSyncService::NeedBackup() const { |
2776 return need_backup_; | 2775 return need_backup_; |
2777 } | 2776 } |
2778 | 2777 |
2779 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const { | 2778 base::Time ProfileSyncService::GetDeviceBackupTimeForTesting() const { |
2780 return backend_->GetSyncedDeviceTracker()->GetLocalDeviceBackupTime(); | 2779 return backend_->GetSyncedDeviceTracker()->GetLocalDeviceBackupTime(); |
2781 } | 2780 } |
OLD | NEW |