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

Side by Side Diff: chrome/browser/sync/engine/syncapi.cc

Issue 6690020: sync: hook up ServerConnectionManager <> SyncerThread2 and tie up more loose ends (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome/debug
Patch Set: fix Created 9 years, 9 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/sync/engine/syncapi.h ('k') | chrome/browser/sync/engine/syncer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/engine/syncapi.h" 5 #include "chrome/browser/sync/engine/syncapi.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <bitset> 8 #include <bitset>
9 #include <iomanip> 9 #include <iomanip>
10 #include <list> 10 #include <list>
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 #include "content/browser/browser_thread.h" 65 #include "content/browser/browser_thread.h"
66 #include "net/base/network_change_notifier.h" 66 #include "net/base/network_change_notifier.h"
67 67
68 using browser_sync::AllStatus; 68 using browser_sync::AllStatus;
69 using browser_sync::Cryptographer; 69 using browser_sync::Cryptographer;
70 using browser_sync::KeyParams; 70 using browser_sync::KeyParams;
71 using browser_sync::ModelSafeRoutingInfo; 71 using browser_sync::ModelSafeRoutingInfo;
72 using browser_sync::ModelSafeWorker; 72 using browser_sync::ModelSafeWorker;
73 using browser_sync::ModelSafeWorkerRegistrar; 73 using browser_sync::ModelSafeWorkerRegistrar;
74 using browser_sync::ServerConnectionEvent; 74 using browser_sync::ServerConnectionEvent;
75 using browser_sync::ServerConnectionEvent2;
76 using browser_sync::ServerConnectionEventListener;
75 using browser_sync::SyncEngineEvent; 77 using browser_sync::SyncEngineEvent;
76 using browser_sync::SyncEngineEventListener; 78 using browser_sync::SyncEngineEventListener;
77 using browser_sync::Syncer; 79 using browser_sync::Syncer;
78 using browser_sync::SyncerThread; 80 using browser_sync::SyncerThread;
79 using browser_sync::SyncerThreadAdapter; 81 using browser_sync::SyncerThreadAdapter;
80 using browser_sync::kNigoriTag; 82 using browser_sync::kNigoriTag;
81 using browser_sync::sessions::SyncSessionContext; 83 using browser_sync::sessions::SyncSessionContext;
82 using std::list; 84 using std::list;
83 using std::hex; 85 using std::hex;
84 using std::string; 86 using std::string;
(...skipping 1007 matching lines...) Expand 10 before | Expand all | Expand 10 after
1092 return unencrypted_; 1094 return unencrypted_;
1093 } 1095 }
1094 1096
1095 ////////////////////////////////////////////////////////////////////////// 1097 //////////////////////////////////////////////////////////////////////////
1096 // SyncManager's implementation: SyncManager::SyncInternal 1098 // SyncManager's implementation: SyncManager::SyncInternal
1097 class SyncManager::SyncInternal 1099 class SyncManager::SyncInternal
1098 : public net::NetworkChangeNotifier::IPAddressObserver, 1100 : public net::NetworkChangeNotifier::IPAddressObserver,
1099 public sync_notifier::SyncNotifierObserver, 1101 public sync_notifier::SyncNotifierObserver,
1100 public browser_sync::ChannelEventHandler<syncable::DirectoryChangeEvent>, 1102 public browser_sync::ChannelEventHandler<syncable::DirectoryChangeEvent>,
1101 public browser_sync::JsBackend, 1103 public browser_sync::JsBackend,
1102 public SyncEngineEventListener { 1104 public SyncEngineEventListener,
1105 public ServerConnectionEventListener {
1103 static const int kDefaultNudgeDelayMilliseconds; 1106 static const int kDefaultNudgeDelayMilliseconds;
1104 static const int kPreferencesNudgeDelayMilliseconds; 1107 static const int kPreferencesNudgeDelayMilliseconds;
1105 public: 1108 public:
1106 explicit SyncInternal(SyncManager* sync_manager) 1109 explicit SyncInternal(SyncManager* sync_manager)
1107 : core_message_loop_(NULL), 1110 : core_message_loop_(NULL),
1108 parent_router_(NULL), 1111 parent_router_(NULL),
1109 sync_manager_(sync_manager), 1112 sync_manager_(sync_manager),
1110 registrar_(NULL), 1113 registrar_(NULL),
1111 initialized_(false), 1114 initialized_(false),
1112 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) { 1115 ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)) {
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1289 DCHECK(false) << "ScopedDirLookup failed when checking initial sync"; 1292 DCHECK(false) << "ScopedDirLookup failed when checking initial sync";
1290 syncable::AutofillMigrationDebugInfo null_value = {0}; 1293 syncable::AutofillMigrationDebugInfo null_value = {0};
1291 return null_value; 1294 return null_value;
1292 } 1295 }
1293 return lookup->get_autofill_migration_debug_info(); 1296 return lookup->get_autofill_migration_debug_info();
1294 } 1297 }
1295 1298
1296 // SyncEngineEventListener implementation. 1299 // SyncEngineEventListener implementation.
1297 virtual void OnSyncEngineEvent(const SyncEngineEvent& event); 1300 virtual void OnSyncEngineEvent(const SyncEngineEvent& event);
1298 1301
1302 // ServerConnectionEventListener implementation.
1303 virtual void OnServerConnectionEvent(const ServerConnectionEvent2& event);
1304
1299 // browser_sync::JsBackend implementation. 1305 // browser_sync::JsBackend implementation.
1300 virtual void SetParentJsEventRouter(browser_sync::JsEventRouter* router); 1306 virtual void SetParentJsEventRouter(browser_sync::JsEventRouter* router);
1301 virtual void RemoveParentJsEventRouter(); 1307 virtual void RemoveParentJsEventRouter();
1302 virtual const browser_sync::JsEventRouter* GetParentJsEventRouter() const; 1308 virtual const browser_sync::JsEventRouter* GetParentJsEventRouter() const;
1303 virtual void ProcessMessage(const std::string& name, 1309 virtual void ProcessMessage(const std::string& name,
1304 const browser_sync::JsArgList& args, 1310 const browser_sync::JsArgList& args,
1305 const browser_sync::JsEventHandler* sender); 1311 const browser_sync::JsEventHandler* sender);
1306 1312
1307 private: 1313 private:
1308 // Helper to call OnAuthError when no authentication credentials are 1314 // Helper to call OnAuthError when no authentication credentials are
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1590 1596
1591 void SyncManager::RequestClearServerData() { 1597 void SyncManager::RequestClearServerData() {
1592 if (data_->syncer_thread()) 1598 if (data_->syncer_thread())
1593 data_->syncer_thread()->NudgeSyncer(0, SyncerThread::kClearPrivateData); 1599 data_->syncer_thread()->NudgeSyncer(0, SyncerThread::kClearPrivateData);
1594 } 1600 }
1595 1601
1596 void SyncManager::RequestConfig(const syncable::ModelTypeBitSet& types) { 1602 void SyncManager::RequestConfig(const syncable::ModelTypeBitSet& types) {
1597 if (!data_->syncer_thread()) 1603 if (!data_->syncer_thread())
1598 return; 1604 return;
1599 // It is an error for this to be called if new_impl is null. 1605 // It is an error for this to be called if new_impl is null.
1606 StartConfigurationMode(NULL);
1607 data_->syncer_thread()->new_impl()->ScheduleConfig(types);
1608 }
1609
1610 void SyncManager::StartConfigurationMode(ModeChangeCallback* callback) {
1611 if (!data_->syncer_thread())
1612 return;
1613 // It is an error for this to be called if new_impl is null.
1600 data_->syncer_thread()->new_impl()->Start( 1614 data_->syncer_thread()->new_impl()->Start(
1601 browser_sync::s3::SyncerThread::CONFIGURATION_MODE); 1615 browser_sync::s3::SyncerThread::CONFIGURATION_MODE, callback);
1602 data_->syncer_thread()->new_impl()->ScheduleConfig(types);
1603 } 1616 }
1604 1617
1605 const std::string& SyncManager::GetAuthenticatedUsername() { 1618 const std::string& SyncManager::GetAuthenticatedUsername() {
1606 DCHECK(data_); 1619 DCHECK(data_);
1607 return data_->username_for_share(); 1620 return data_->username_for_share();
1608 } 1621 }
1609 1622
1610 bool SyncManager::SyncInternal::Init( 1623 bool SyncManager::SyncInternal::Init(
1611 const FilePath& database_location, 1624 const FilePath& database_location,
1612 const std::string& sync_server_and_path, 1625 const std::string& sync_server_and_path,
(...skipping 15 matching lines...) Expand all
1628 setup_for_test_mode_ = setup_for_test_mode; 1641 setup_for_test_mode_ = setup_for_test_mode;
1629 1642
1630 sync_notifier_.reset(sync_notifier); 1643 sync_notifier_.reset(sync_notifier);
1631 sync_notifier_->AddObserver(this); 1644 sync_notifier_->AddObserver(this);
1632 1645
1633 share_.dir_manager.reset(new DirectoryManager(database_location)); 1646 share_.dir_manager.reset(new DirectoryManager(database_location));
1634 1647
1635 connection_manager_.reset(new SyncAPIServerConnectionManager( 1648 connection_manager_.reset(new SyncAPIServerConnectionManager(
1636 sync_server_and_path, port, use_ssl, user_agent, post_factory)); 1649 sync_server_and_path, port, use_ssl, user_agent, post_factory));
1637 1650
1638 connection_manager_hookup_.reset( 1651 net::NetworkChangeNotifier::AddIPAddressObserver(this);
1639 NewEventListenerHookup(connection_manager()->channel(), this,
1640 &SyncManager::SyncInternal::HandleServerConnectionEvent));
1641 1652
1642 net::NetworkChangeNotifier::AddIPAddressObserver(this); 1653 bool new_syncer_thread = CommandLine::ForCurrentProcess()->HasSwitch(
1654 switches::kNewSyncerThread);
1655
1656 if (new_syncer_thread) {
1657 connection_manager()->AddListener(this);
1658 } else {
1659 connection_manager_hookup_.reset(
1660 NewEventListenerHookup(connection_manager()->channel(), this,
1661 &SyncManager::SyncInternal::HandleServerConnectionEvent));
1662 }
1663
1643 // TODO(akalin): CheckServerReachable() can block, which may cause jank if we 1664 // TODO(akalin): CheckServerReachable() can block, which may cause jank if we
1644 // try to shut down sync. Fix this. 1665 // try to shut down sync. Fix this.
1645 core_message_loop_->PostTask(FROM_HERE, 1666 core_message_loop_->PostTask(FROM_HERE,
1646 method_factory_.NewRunnableMethod(&SyncInternal::CheckServerReachable)); 1667 method_factory_.NewRunnableMethod(&SyncInternal::CheckServerReachable));
1647 1668
1648 // Test mode does not use a syncer context or syncer thread. 1669 // Test mode does not use a syncer context or syncer thread.
1649 if (!setup_for_test_mode_) { 1670 if (!setup_for_test_mode_) {
1650 // Build a SyncSessionContext and store the worker in it. 1671 // Build a SyncSessionContext and store the worker in it.
1651 VLOG(1) << "Sync is bringing up SyncSessionContext."; 1672 VLOG(1) << "Sync is bringing up SyncSessionContext.";
1652 std::vector<SyncEngineEventListener*> listeners; 1673 std::vector<SyncEngineEventListener*> listeners;
1653 listeners.push_back(&allstatus_); 1674 listeners.push_back(&allstatus_);
1654 listeners.push_back(this); 1675 listeners.push_back(this);
1655 SyncSessionContext* context = new SyncSessionContext( 1676 SyncSessionContext* context = new SyncSessionContext(
1656 connection_manager_.get(), 1677 connection_manager_.get(),
1657 dir_manager(), 1678 dir_manager(),
1658 model_safe_worker_registrar, 1679 model_safe_worker_registrar,
1659 listeners); 1680 listeners);
1660 context->set_account_name(credentials.email); 1681 context->set_account_name(credentials.email);
1661 // The SyncerThread takes ownership of |context|. 1682 // The SyncerThread takes ownership of |context|.
1662 syncer_thread_.reset(new SyncerThreadAdapter(context, 1683 syncer_thread_.reset(new SyncerThreadAdapter(context,
1663 CommandLine::ForCurrentProcess()->HasSwitch( 1684 new_syncer_thread));
1664 switches::kNewSyncerThread)));
1665 } 1685 }
1666 1686
1667 bool signed_in = SignIn(credentials); 1687 bool signed_in = SignIn(credentials);
1668 1688
1669 // Do this once the directory is opened. 1689 // Do this once the directory is opened.
1670 BootstrapEncryption(restored_key_for_bootstrapping); 1690 BootstrapEncryption(restored_key_for_bootstrapping);
1671 return signed_in; 1691 return signed_in;
1672 } 1692 }
1673 1693
1674 void SyncManager::SyncInternal::BootstrapEncryption( 1694 void SyncManager::SyncInternal::BootstrapEncryption(
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
2154 // Call commit 2174 // Call commit
2155 for (int i = 0; i < syncable::MODEL_TYPE_COUNT; ++i) { 2175 for (int i = 0; i < syncable::MODEL_TYPE_COUNT; ++i) {
2156 if (model_has_change_.test(i)) { 2176 if (model_has_change_.test(i)) {
2157 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, 2177 FOR_EACH_OBSERVER(SyncManager::Observer, observers_,
2158 OnChangesComplete(syncable::ModelTypeFromInt(i))); 2178 OnChangesComplete(syncable::ModelTypeFromInt(i)));
2159 model_has_change_.reset(i); 2179 model_has_change_.reset(i);
2160 } 2180 }
2161 } 2181 }
2162 } 2182 }
2163 2183
2184 void SyncManager::SyncInternal::OnServerConnectionEvent(
2185 const ServerConnectionEvent2& event) {
2186 ServerConnectionEvent legacy;
2187 legacy.what_happened = ServerConnectionEvent::STATUS_CHANGED;
2188 legacy.connection_code = event.connection_code;
2189 legacy.server_reachable = event.server_reachable;
2190 HandleServerConnectionEvent(legacy);
2191 }
2192
2164 void SyncManager::SyncInternal::HandleServerConnectionEvent( 2193 void SyncManager::SyncInternal::HandleServerConnectionEvent(
2165 const ServerConnectionEvent& event) { 2194 const ServerConnectionEvent& event) {
2166 allstatus_.HandleServerConnectionEvent(event); 2195 allstatus_.HandleServerConnectionEvent(event);
2167 if (event.what_happened == ServerConnectionEvent::STATUS_CHANGED) { 2196 if (event.what_happened == ServerConnectionEvent::STATUS_CHANGED) {
2168 if (event.connection_code == 2197 if (event.connection_code ==
2169 browser_sync::HttpResponse::SERVER_CONNECTION_OK) { 2198 browser_sync::HttpResponse::SERVER_CONNECTION_OK) {
2170 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, 2199 FOR_EACH_OBSERVER(SyncManager::Observer, observers_,
2171 OnAuthError(AuthError::None())); 2200 OnAuthError(AuthError::None()));
2172 } 2201 }
2173 2202
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
2667 void SyncManager::TriggerOnIncomingNotificationForTest( 2696 void SyncManager::TriggerOnIncomingNotificationForTest(
2668 const syncable::ModelTypeBitSet& model_types) { 2697 const syncable::ModelTypeBitSet& model_types) {
2669 syncable::ModelTypePayloadMap model_types_with_payloads = 2698 syncable::ModelTypePayloadMap model_types_with_payloads =
2670 syncable::ModelTypePayloadMapFromBitSet(model_types, 2699 syncable::ModelTypePayloadMapFromBitSet(model_types,
2671 std::string()); 2700 std::string());
2672 2701
2673 data_->OnIncomingNotification(model_types_with_payloads); 2702 data_->OnIncomingNotification(model_types_with_payloads);
2674 } 2703 }
2675 2704
2676 } // namespace sync_api 2705 } // namespace sync_api
OLDNEW
« no previous file with comments | « chrome/browser/sync/engine/syncapi.h ('k') | chrome/browser/sync/engine/syncer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698