Index: components/wifi_sync/wifi_credential_syncable_service_impl.cc |
diff --git a/components/wifi_sync/wifi_credential_syncable_service_impl.cc b/components/wifi_sync/wifi_credential_syncable_service_impl.cc |
index 311181e30159e831d0690a2cf17e65744d2a47fa..7e610f1b4f5cbec6fc165d732cfc0a8f63c849a3 100644 |
--- a/components/wifi_sync/wifi_credential_syncable_service_impl.cc |
+++ b/components/wifi_sync/wifi_credential_syncable_service_impl.cc |
@@ -8,6 +8,8 @@ |
#include <vector> |
#include "base/logging.h" |
+#include "base/strings/string_number_conversions.h" |
+#include "base/strings/stringprintf.h" |
#include "components/wifi_sync/wifi_credential.h" |
#include "components/wifi_sync/wifi_security_class.h" |
#include "sync/api/sync_change.h" |
@@ -100,15 +102,26 @@ bool ParseSyncData(const syncer::SyncData& sync_data, |
return ParseSpecifics(sync_data.GetSpecifics(), raw_credential); |
} |
+std::string ComputeItemId(const WifiCredential credential) { |
+ return base::StringPrintf( |
+ "%s:%d", |
+ base::HexEncode(credential.ssid().data(), |
+ credential.ssid().size()).c_str(), |
+ credential.security_class()); |
+} |
+ |
} // namespace |
const syncer::ModelType WifiCredentialSyncableServiceImpl::kModelType = |
syncer::WIFI_CREDENTIALS; |
WifiCredentialSyncableServiceImpl::WifiCredentialSyncableServiceImpl( |
- scoped_ptr<WifiConfigDelegate> network_config_delegate) |
- : network_config_delegate_(network_config_delegate.Pass()) { |
+ scoped_ptr<WifiConfigDelegate> network_config_delegate, |
+ scoped_ptr<WifiConfigObserver> network_config_observer) |
+ : network_config_delegate_(network_config_delegate.Pass()), |
+ network_config_observer_(network_config_observer.Pass()) { |
DCHECK(network_config_delegate_); |
+ DCHECK(network_config_observer_); |
} |
WifiCredentialSyncableServiceImpl::~WifiCredentialSyncableServiceImpl() { |
@@ -126,14 +139,15 @@ syncer::SyncMergeResult WifiCredentialSyncableServiceImpl::MergeDataAndStartSync |
sync_processor_ = sync_processor.Pass(); |
// TODO(quiche): Update local WiFi configuration from |initial_sync_data|. |
- // TODO(quiche): Notify upper layers that sync is ready. |
NOTIMPLEMENTED(); |
+ network_config_observer_->StartSyncing(base::AsWeakPtr(this)); |
return syncer::SyncMergeResult(type); |
} |
void WifiCredentialSyncableServiceImpl::StopSyncing(syncer::ModelType type) { |
DCHECK_EQ(kModelType, type); |
+ network_config_observer_->StopSyncing(); |
sync_processor_.reset(); |
} |
@@ -194,7 +208,6 @@ syncer::SyncError WifiCredentialSyncableServiceImpl::ProcessSyncChanges( |
} |
bool WifiCredentialSyncableServiceImpl::AddToSyncedNetworks( |
- const std::string& item_id, |
const WifiCredential& credential) { |
if (!sync_processor_.get()) { |
// Callers must queue updates until MergeDataAndStartSyncing has |
@@ -215,6 +228,7 @@ bool WifiCredentialSyncableServiceImpl::AddToSyncedNetworks( |
syncer::SyncChangeList change_list; |
syncer::SyncError sync_error; |
sync_pb::EntitySpecifics wifi_credential_specifics; |
+ std::string item_id(ComputeItemId(credential)); |
BuildSpecifics(credential, &wifi_credential_specifics); |
change_list.push_back( |
syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, |