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

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

Issue 7530023: sync: Disable network change notifications for unauthenticated users. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: review Created 9 years, 4 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 | « no previous file | no next file » | 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 1183 matching lines...) Expand 10 before | Expand all | Expand 10 after
1194 public syncable::DirectoryChangeDelegate { 1194 public syncable::DirectoryChangeDelegate {
1195 static const int kDefaultNudgeDelayMilliseconds; 1195 static const int kDefaultNudgeDelayMilliseconds;
1196 static const int kPreferencesNudgeDelayMilliseconds; 1196 static const int kPreferencesNudgeDelayMilliseconds;
1197 public: 1197 public:
1198 explicit SyncInternal(const std::string& name) 1198 explicit SyncInternal(const std::string& name)
1199 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 1199 : weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
1200 parent_router_(NULL), 1200 parent_router_(NULL),
1201 registrar_(NULL), 1201 registrar_(NULL),
1202 initialized_(false), 1202 initialized_(false),
1203 setup_for_test_mode_(false), 1203 setup_for_test_mode_(false),
1204 observing_ip_address_changes_(false),
1204 js_transaction_observer_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { 1205 js_transaction_observer_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
1205 // Pre-fill |notification_info_map_|. 1206 // Pre-fill |notification_info_map_|.
1206 for (int i = syncable::FIRST_REAL_MODEL_TYPE; 1207 for (int i = syncable::FIRST_REAL_MODEL_TYPE;
1207 i < syncable::MODEL_TYPE_COUNT; ++i) { 1208 i < syncable::MODEL_TYPE_COUNT; ++i) {
1208 notification_info_map_.insert( 1209 notification_info_map_.insert(
1209 std::make_pair(syncable::ModelTypeFromInt(i), NotificationInfo())); 1210 std::make_pair(syncable::ModelTypeFromInt(i), NotificationInfo()));
1210 } 1211 }
1211 1212
1212 // Bind message handlers. 1213 // Bind message handlers.
1213 BindJsMessageHandler( 1214 BindJsMessageHandler(
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
1620 // The instance is shared between the SyncManager and the Syncer. 1621 // The instance is shared between the SyncManager and the Syncer.
1621 ModelSafeWorkerRegistrar* registrar_; 1622 ModelSafeWorkerRegistrar* registrar_;
1622 1623
1623 // Set to true once Init has been called. 1624 // Set to true once Init has been called.
1624 bool initialized_; 1625 bool initialized_;
1625 1626
1626 // True if the SyncManager should be running in test mode (no sync 1627 // True if the SyncManager should be running in test mode (no sync
1627 // scheduler actually communicating with the server). 1628 // scheduler actually communicating with the server).
1628 bool setup_for_test_mode_; 1629 bool setup_for_test_mode_;
1629 1630
1631 // Whether we should respond to an IP address change notification.
1632 bool observing_ip_address_changes_;
akalin 2011/07/29 03:08:57 I think having 'bool has_valid_credentials_;' is c
1633
1630 // Map used to store the notification info to be displayed in 1634 // Map used to store the notification info to be displayed in
1631 // about:sync page. 1635 // about:sync page.
1632 NotificationInfoMap notification_info_map_; 1636 NotificationInfoMap notification_info_map_;
1633 1637
1634 browser_sync::JsTransactionObserver js_transaction_observer_; 1638 browser_sync::JsTransactionObserver js_transaction_observer_;
1635 1639
1636 JsMessageHandlerMap js_message_handlers_; 1640 JsMessageHandlerMap js_message_handlers_;
1637 }; 1641 };
1638 const int SyncManager::SyncInternal::kDefaultNudgeDelayMilliseconds = 200; 1642 const int SyncManager::SyncInternal::kDefaultNudgeDelayMilliseconds = 200;
1639 const int SyncManager::SyncInternal::kPreferencesNudgeDelayMilliseconds = 2000; 1643 const int SyncManager::SyncInternal::kPreferencesNudgeDelayMilliseconds = 2000;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1763 setup_for_test_mode_ = setup_for_test_mode; 1767 setup_for_test_mode_ = setup_for_test_mode;
1764 1768
1765 sync_notifier_.reset(sync_notifier); 1769 sync_notifier_.reset(sync_notifier);
1766 1770
1767 share_.dir_manager.reset(new DirectoryManager(database_location)); 1771 share_.dir_manager.reset(new DirectoryManager(database_location));
1768 1772
1769 connection_manager_.reset(new SyncAPIServerConnectionManager( 1773 connection_manager_.reset(new SyncAPIServerConnectionManager(
1770 sync_server_and_path, port, use_ssl, user_agent, post_factory)); 1774 sync_server_and_path, port, use_ssl, user_agent, post_factory));
1771 1775
1772 net::NetworkChangeNotifier::AddIPAddressObserver(this); 1776 net::NetworkChangeNotifier::AddIPAddressObserver(this);
1777 observing_ip_address_changes_ = true;
akalin 2011/07/29 03:08:57 shouldn't this remain false? We're initing, but w
1773 1778
1774 connection_manager()->AddListener(this); 1779 connection_manager()->AddListener(this);
1775 1780
1776 // TODO(akalin): CheckServerReachable() can block, which may cause jank if we 1781 // TODO(akalin): CheckServerReachable() can block, which may cause jank if we
1777 // try to shut down sync. Fix this. 1782 // try to shut down sync. Fix this.
1778 MessageLoop::current()->PostTask( 1783 MessageLoop::current()->PostTask(
1779 FROM_HERE, base::Bind(&SyncInternal::CheckServerReachable, 1784 FROM_HERE, base::Bind(&SyncInternal::CheckServerReachable,
1780 weak_ptr_factory_.GetWeakPtr())); 1785 weak_ptr_factory_.GetWeakPtr()));
1781 1786
1782 // Test mode does not use a syncer context or syncer thread. 1787 // Test mode does not use a syncer context or syncer thread.
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1934 UpdateEnabledTypes(); 1939 UpdateEnabledTypes();
1935 return true; 1940 return true;
1936 } 1941 }
1937 1942
1938 void SyncManager::SyncInternal::UpdateCredentials( 1943 void SyncManager::SyncInternal::UpdateCredentials(
1939 const SyncCredentials& credentials) { 1944 const SyncCredentials& credentials) {
1940 DCHECK(thread_checker_.CalledOnValidThread()); 1945 DCHECK(thread_checker_.CalledOnValidThread());
1941 DCHECK_EQ(credentials.email, share_.name); 1946 DCHECK_EQ(credentials.email, share_.name);
1942 DCHECK(!credentials.email.empty()); 1947 DCHECK(!credentials.email.empty());
1943 DCHECK(!credentials.sync_token.empty()); 1948 DCHECK(!credentials.sync_token.empty());
1949
1950 observing_ip_address_changes_ = true;
1944 connection_manager()->set_auth_token(credentials.sync_token); 1951 connection_manager()->set_auth_token(credentials.sync_token);
1945 sync_notifier_->UpdateCredentials( 1952 sync_notifier_->UpdateCredentials(
1946 credentials.email, credentials.sync_token); 1953 credentials.email, credentials.sync_token);
1947 if (!setup_for_test_mode_) { 1954 if (!setup_for_test_mode_) {
1948 CheckServerReachable(); 1955 CheckServerReachable();
1949 } 1956 }
1950 } 1957 }
1951 1958
1952 void SyncManager::SyncInternal::UpdateEnabledTypes() { 1959 void SyncManager::SyncInternal::UpdateEnabledTypes() {
1953 DCHECK(thread_checker_.CalledOnValidThread()); 1960 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
2230 sync_notifier_->RemoveObserver(this); 2237 sync_notifier_->RemoveObserver(this);
2231 } 2238 }
2232 sync_notifier_.reset(); 2239 sync_notifier_.reset();
2233 2240
2234 if (connection_manager_.get()) { 2241 if (connection_manager_.get()) {
2235 connection_manager_->RemoveListener(this); 2242 connection_manager_->RemoveListener(this);
2236 } 2243 }
2237 connection_manager_.reset(); 2244 connection_manager_.reset();
2238 2245
2239 net::NetworkChangeNotifier::RemoveIPAddressObserver(this); 2246 net::NetworkChangeNotifier::RemoveIPAddressObserver(this);
2247 observing_ip_address_changes_ = false;
2240 2248
2241 if (dir_manager()) { 2249 if (dir_manager()) {
2242 dir_manager()->FinalSaveChangesForAll(); 2250 dir_manager()->FinalSaveChangesForAll();
2243 dir_manager()->Close(username_for_share()); 2251 dir_manager()->Close(username_for_share());
2244 } 2252 }
2245 2253
2246 // Reset the DirectoryManager and UserSettings so they relinquish sqlite 2254 // Reset the DirectoryManager and UserSettings so they relinquish sqlite
2247 // handles to backing files. 2255 // handles to backing files.
2248 share_.dir_manager.reset(); 2256 share_.dir_manager.reset();
2249 2257
2250 setup_for_test_mode_ = false; 2258 setup_for_test_mode_ = false;
2251 parent_router_ = NULL; 2259 parent_router_ = NULL;
2252 registrar_ = NULL; 2260 registrar_ = NULL;
2253 2261
2254 initialized_ = false; 2262 initialized_ = false;
2255 2263
2256 // We reset this here, since only now we know it will not be 2264 // We reset this here, since only now we know it will not be
2257 // accessed from other threads (since we shut down everything). 2265 // accessed from other threads (since we shut down everything).
2258 weak_handle_this_.Reset(); 2266 weak_handle_this_.Reset();
2259 } 2267 }
2260 2268
2261 void SyncManager::SyncInternal::OnIPAddressChanged() { 2269 void SyncManager::SyncInternal::OnIPAddressChanged() {
2262 VLOG(1) << "IP address change detected"; 2270 VLOG(1) << "IP address change detected";
2271 if (!observing_ip_address_changes_) {
2272 VLOG(1) << "IP address change dropped.";
akalin 2011/07/29 03:08:57 VLOG can also say something like "IP address chang
2273 return;
2274 }
2275
2263 #if defined (OS_CHROMEOS) 2276 #if defined (OS_CHROMEOS)
2264 // TODO(tim): This is a hack to intentionally lose a race with flimflam at 2277 // TODO(tim): This is a hack to intentionally lose a race with flimflam at
2265 // shutdown, so we don't cause shutdown to wait for our http request. 2278 // shutdown, so we don't cause shutdown to wait for our http request.
2266 // http://crosbug.com/8429 2279 // http://crosbug.com/8429
2267 MessageLoop::current()->PostDelayedTask( 2280 MessageLoop::current()->PostDelayedTask(
2268 FROM_HERE, 2281 FROM_HERE,
2269 base::Bind(&SyncInternal::OnIPAddressChangedImpl, 2282 base::Bind(&SyncInternal::OnIPAddressChangedImpl,
2270 weak_ptr_factory_.GetWeakPtr()), 2283 weak_ptr_factory_.GetWeakPtr()),
2271 kChromeOSNetworkChangeReactionDelayHackMsec); 2284 kChromeOSNetworkChangeReactionDelayHackMsec);
2272 #else 2285 #else
(...skipping 12 matching lines...) Expand all
2285 allstatus_.HandleServerConnectionEvent(event); 2298 allstatus_.HandleServerConnectionEvent(event);
2286 if (event.connection_code == 2299 if (event.connection_code ==
2287 browser_sync::HttpResponse::SERVER_CONNECTION_OK) { 2300 browser_sync::HttpResponse::SERVER_CONNECTION_OK) {
2288 ObserverList<SyncManager::Observer> temp_obs_list; 2301 ObserverList<SyncManager::Observer> temp_obs_list;
2289 CopyObservers(&temp_obs_list); 2302 CopyObservers(&temp_obs_list);
2290 FOR_EACH_OBSERVER(SyncManager::Observer, temp_obs_list, 2303 FOR_EACH_OBSERVER(SyncManager::Observer, temp_obs_list,
2291 OnAuthError(AuthError::None())); 2304 OnAuthError(AuthError::None()));
2292 } 2305 }
2293 2306
2294 if (event.connection_code == browser_sync::HttpResponse::SYNC_AUTH_ERROR) { 2307 if (event.connection_code == browser_sync::HttpResponse::SYNC_AUTH_ERROR) {
2308 observing_ip_address_changes_ = false;
2295 ObserverList<SyncManager::Observer> temp_obs_list; 2309 ObserverList<SyncManager::Observer> temp_obs_list;
2296 CopyObservers(&temp_obs_list); 2310 CopyObservers(&temp_obs_list);
2297 FOR_EACH_OBSERVER(SyncManager::Observer, temp_obs_list, 2311 FOR_EACH_OBSERVER(SyncManager::Observer, temp_obs_list,
2298 OnAuthError(AuthError(AuthError::INVALID_GAIA_CREDENTIALS))); 2312 OnAuthError(AuthError(AuthError::INVALID_GAIA_CREDENTIALS)));
2299 } 2313 }
2300 2314
2301 if (event.connection_code == 2315 if (event.connection_code ==
2302 browser_sync::HttpResponse::SYNC_SERVER_ERROR) { 2316 browser_sync::HttpResponse::SYNC_SERVER_ERROR) {
2303 ObserverList<SyncManager::Observer> temp_obs_list; 2317 ObserverList<SyncManager::Observer> temp_obs_list;
2304 CopyObservers(&temp_obs_list); 2318 CopyObservers(&temp_obs_list);
(...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after
3045 void SyncManager::TriggerOnIncomingNotificationForTest( 3059 void SyncManager::TriggerOnIncomingNotificationForTest(
3046 const syncable::ModelTypeBitSet& model_types) { 3060 const syncable::ModelTypeBitSet& model_types) {
3047 syncable::ModelTypePayloadMap model_types_with_payloads = 3061 syncable::ModelTypePayloadMap model_types_with_payloads =
3048 syncable::ModelTypePayloadMapFromBitSet(model_types, 3062 syncable::ModelTypePayloadMapFromBitSet(model_types,
3049 std::string()); 3063 std::string());
3050 3064
3051 data_->OnIncomingNotification(model_types_with_payloads); 3065 data_->OnIncomingNotification(model_types_with_payloads);
3052 } 3066 }
3053 3067
3054 } // namespace sync_api 3068 } // namespace sync_api
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698