| OLD | NEW |
| 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 1466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1477 browser_sync::JsEventRouter* parent_router_; | 1477 browser_sync::JsEventRouter* parent_router_; |
| 1478 | 1478 |
| 1479 // The ServerConnectionManager used to abstract communication between the | 1479 // The ServerConnectionManager used to abstract communication between the |
| 1480 // client (the Syncer) and the sync server. | 1480 // client (the Syncer) and the sync server. |
| 1481 scoped_ptr<SyncAPIServerConnectionManager> connection_manager_; | 1481 scoped_ptr<SyncAPIServerConnectionManager> connection_manager_; |
| 1482 | 1482 |
| 1483 // The thread that runs the Syncer. Needs to be explicitly Start()ed. | 1483 // The thread that runs the Syncer. Needs to be explicitly Start()ed. |
| 1484 scoped_ptr<SyncerThreadAdapter> syncer_thread_; | 1484 scoped_ptr<SyncerThreadAdapter> syncer_thread_; |
| 1485 | 1485 |
| 1486 // The SyncNotifier which notifies us when updates need to be downloaded. | 1486 // The SyncNotifier which notifies us when updates need to be downloaded. |
| 1487 scoped_ptr<sync_notifier::SyncNotifier> sync_notifier_; | 1487 sync_notifier::SyncNotifier* sync_notifier_; |
| 1488 | 1488 |
| 1489 // A multi-purpose status watch object that aggregates stats from various | 1489 // A multi-purpose status watch object that aggregates stats from various |
| 1490 // sync components. | 1490 // sync components. |
| 1491 AllStatus allstatus_; | 1491 AllStatus allstatus_; |
| 1492 | 1492 |
| 1493 // Each element of this array is a store of change records produced by | 1493 // Each element of this array is a store of change records produced by |
| 1494 // HandleChangeEvent during the CALCULATE_CHANGES step. The changes are | 1494 // HandleChangeEvent during the CALCULATE_CHANGES step. The changes are |
| 1495 // segregated by model type, and are stored here to be processed and | 1495 // segregated by model type, and are stored here to be processed and |
| 1496 // forwarded to the observer slightly later, at the TRANSACTION_ENDING | 1496 // forwarded to the observer slightly later, at the TRANSACTION_ENDING |
| 1497 // step by HandleTransactionEndingChangeEvent. The list is cleared in the | 1497 // step by HandleTransactionEndingChangeEvent. The list is cleared in the |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1682 const std::string& restored_key_for_bootstrapping, | 1682 const std::string& restored_key_for_bootstrapping, |
| 1683 bool setup_for_test_mode) { | 1683 bool setup_for_test_mode) { |
| 1684 | 1684 |
| 1685 VLOG(1) << "Starting SyncInternal initialization."; | 1685 VLOG(1) << "Starting SyncInternal initialization."; |
| 1686 | 1686 |
| 1687 core_message_loop_ = MessageLoop::current(); | 1687 core_message_loop_ = MessageLoop::current(); |
| 1688 DCHECK(core_message_loop_); | 1688 DCHECK(core_message_loop_); |
| 1689 registrar_ = model_safe_worker_registrar; | 1689 registrar_ = model_safe_worker_registrar; |
| 1690 setup_for_test_mode_ = setup_for_test_mode; | 1690 setup_for_test_mode_ = setup_for_test_mode; |
| 1691 | 1691 |
| 1692 sync_notifier_.reset(sync_notifier); | 1692 sync_notifier_ = sync_notifier; |
| 1693 sync_notifier_->AddObserver(this); | 1693 sync_notifier_->AddObserver(this); |
| 1694 | 1694 |
| 1695 share_.dir_manager.reset(new DirectoryManager(database_location)); | 1695 share_.dir_manager.reset(new DirectoryManager(database_location)); |
| 1696 | 1696 |
| 1697 connection_manager_.reset(new SyncAPIServerConnectionManager( | 1697 connection_manager_.reset(new SyncAPIServerConnectionManager( |
| 1698 sync_server_and_path, port, use_ssl, user_agent, post_factory)); | 1698 sync_server_and_path, port, use_ssl, user_agent, post_factory)); |
| 1699 | 1699 |
| 1700 net::NetworkChangeNotifier::AddIPAddressObserver(this); | 1700 net::NetworkChangeNotifier::AddIPAddressObserver(this); |
| 1701 | 1701 |
| 1702 bool new_syncer_thread = CommandLine::ForCurrentProcess()->HasSwitch( | 1702 bool new_syncer_thread = CommandLine::ForCurrentProcess()->HasSwitch( |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1805 initialized_ = true; | 1805 initialized_ = true; |
| 1806 } | 1806 } |
| 1807 | 1807 |
| 1808 // Notify that initialization is complete. | 1808 // Notify that initialization is complete. |
| 1809 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, | 1809 FOR_EACH_OBSERVER(SyncManager::Observer, observers_, |
| 1810 OnInitializationComplete()); | 1810 OnInitializationComplete()); |
| 1811 } | 1811 } |
| 1812 | 1812 |
| 1813 void SyncManager::SyncInternal::SendNotification() { | 1813 void SyncManager::SyncInternal::SendNotification() { |
| 1814 DCHECK_EQ(MessageLoop::current(), core_message_loop_); | 1814 DCHECK_EQ(MessageLoop::current(), core_message_loop_); |
| 1815 if (!sync_notifier_.get()) { | 1815 if (!sync_notifier_) { |
| 1816 VLOG(1) << "Not sending notification: sync_notifier_ is NULL"; | 1816 VLOG(1) << "Not sending notification: sync_notifier_ is NULL"; |
| 1817 return; | 1817 return; |
| 1818 } | 1818 } |
| 1819 allstatus_.IncrementNotificationsSent(); | 1819 allstatus_.IncrementNotificationsSent(); |
| 1820 sync_notifier_->SendNotification(); | 1820 sync_notifier_->SendNotification(); |
| 1821 } | 1821 } |
| 1822 | 1822 |
| 1823 bool SyncManager::SyncInternal::OpenDirectory() { | 1823 bool SyncManager::SyncInternal::OpenDirectory() { |
| 1824 DCHECK(!initialized()) << "Should only happen once"; | 1824 DCHECK(!initialized()) << "Should only happen once"; |
| 1825 | 1825 |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2126 if (syncer_thread()) { | 2126 if (syncer_thread()) { |
| 2127 if (!syncer_thread()->Stop(kThreadExitTimeoutMsec)) { | 2127 if (!syncer_thread()->Stop(kThreadExitTimeoutMsec)) { |
| 2128 LOG(FATAL) << "Unable to stop the syncer, it won't be happy..."; | 2128 LOG(FATAL) << "Unable to stop the syncer, it won't be happy..."; |
| 2129 } | 2129 } |
| 2130 syncer_thread_.reset(); | 2130 syncer_thread_.reset(); |
| 2131 } | 2131 } |
| 2132 | 2132 |
| 2133 // We NULL out sync_notifer_ so that any pending tasks do not | 2133 // We NULL out sync_notifer_ so that any pending tasks do not |
| 2134 // trigger further notifications. | 2134 // trigger further notifications. |
| 2135 // TODO(akalin): NULL the other member variables defensively, too. | 2135 // TODO(akalin): NULL the other member variables defensively, too. |
| 2136 if (sync_notifier_.get()) { | 2136 if (sync_notifier_) { |
| 2137 sync_notifier_->RemoveObserver(this); | 2137 sync_notifier_->RemoveObserver(this); |
| 2138 sync_notifier_.reset(); | |
| 2139 } | 2138 } |
| 2140 | 2139 |
| 2141 // Pump any messages the auth watcher, syncer thread, or talk | 2140 // Pump any messages the auth watcher, syncer thread, or talk |
| 2142 // mediator posted before they shut down. (See OnSyncEngineEvent(), | 2141 // mediator posted before they shut down. (See OnSyncEngineEvent(), |
| 2143 // and HandleTalkMediatorEvent() for the | 2142 // and HandleTalkMediatorEvent() for the |
| 2144 // events that may be posted.) | 2143 // events that may be posted.) |
| 2145 { | 2144 { |
| 2146 CHECK(core_message_loop_); | 2145 CHECK(core_message_loop_); |
| 2147 bool old_state = core_message_loop_->NestableTasksAllowed(); | 2146 bool old_state = core_message_loop_->NestableTasksAllowed(); |
| 2148 core_message_loop_->SetNestableTasksAllowed(true); | 2147 core_message_loop_->SetNestableTasksAllowed(true); |
| (...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2768 void SyncManager::TriggerOnIncomingNotificationForTest( | 2767 void SyncManager::TriggerOnIncomingNotificationForTest( |
| 2769 const syncable::ModelTypeBitSet& model_types) { | 2768 const syncable::ModelTypeBitSet& model_types) { |
| 2770 syncable::ModelTypePayloadMap model_types_with_payloads = | 2769 syncable::ModelTypePayloadMap model_types_with_payloads = |
| 2771 syncable::ModelTypePayloadMapFromBitSet(model_types, | 2770 syncable::ModelTypePayloadMapFromBitSet(model_types, |
| 2772 std::string()); | 2771 std::string()); |
| 2773 | 2772 |
| 2774 data_->OnIncomingNotification(model_types_with_payloads); | 2773 data_->OnIncomingNotification(model_types_with_payloads); |
| 2775 } | 2774 } |
| 2776 | 2775 |
| 2777 } // namespace sync_api | 2776 } // namespace sync_api |
| OLD | NEW |