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

Side by Side Diff: chrome/browser/sync/notifier/server_notifier_thread.cc

Issue 2809056: Rewrote handing of auto-reconnection and network changes for sync notifier. (Closed)
Patch Set: Fixed bug Created 10 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
« no previous file with comments | « no previous file | jingle/jingle.gyp » ('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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/notifier/server_notifier_thread.h" 5 #include "chrome/browser/sync/notifier/server_notifier_thread.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "chrome/browser/sync/notifier/chrome_invalidation_client.h" 11 #include "chrome/browser/sync/notifier/chrome_invalidation_client.h"
12 #include "jingle/notifier/listener/notification_defines.h" 12 #include "jingle/notifier/listener/notification_defines.h"
13 13
14 namespace sync_notifier { 14 namespace sync_notifier {
15 15
16 ServerNotifierThread::ServerNotifierThread(bool use_chrome_async_socket) 16 ServerNotifierThread::ServerNotifierThread(bool use_chrome_async_socket)
17 : notifier::MediatorThreadImpl(use_chrome_async_socket), 17 : notifier::MediatorThreadImpl(use_chrome_async_socket),
18 state_(notifier::STATE_CLOSED) {} 18 state_(notifier::STATE_DISCONNECTED) {}
19 19
20 ServerNotifierThread::~ServerNotifierThread() {} 20 ServerNotifierThread::~ServerNotifierThread() {}
21 21
22 void ServerNotifierThread::ListenForUpdates() { 22 void ServerNotifierThread::ListenForUpdates() {
23 DCHECK_EQ(MessageLoop::current(), parent_message_loop_); 23 DCHECK_EQ(MessageLoop::current(), parent_message_loop_);
24 worker_message_loop()->PostTask( 24 worker_message_loop()->PostTask(
25 FROM_HERE, 25 FROM_HERE,
26 NewRunnableMethod(this, 26 NewRunnableMethod(this,
27 &ServerNotifierThread::StartInvalidationListener)); 27 &ServerNotifierThread::StartInvalidationListener));
28 } 28 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 FROM_HERE, 70 FROM_HERE,
71 NewRunnableMethod( 71 NewRunnableMethod(
72 this, 72 this,
73 &ServerNotifierThread::SignalIncomingNotification)); 73 &ServerNotifierThread::SignalIncomingNotification));
74 } 74 }
75 75
76 void ServerNotifierThread::OnClientStateChangeMessage( 76 void ServerNotifierThread::OnClientStateChangeMessage(
77 notifier::LoginConnectionState state) { 77 notifier::LoginConnectionState state) {
78 DCHECK_EQ(MessageLoop::current(), worker_message_loop()); 78 DCHECK_EQ(MessageLoop::current(), worker_message_loop());
79 state_ = state; 79 state_ = state;
80 if (state_ != notifier::STATE_OPENED) { 80 if (state_ != notifier::STATE_CONNECTED) {
81 // Assume anything but an opened state invalidates xmpp_client().
82 StopInvalidationListener(); 81 StopInvalidationListener();
83 } 82 }
84 MediatorThreadImpl::OnClientStateChangeMessage(state); 83 MediatorThreadImpl::OnClientStateChangeMessage(state);
85 } 84 }
86 85
87 void ServerNotifierThread::StartInvalidationListener() { 86 void ServerNotifierThread::StartInvalidationListener() {
88 DCHECK_EQ(MessageLoop::current(), worker_message_loop()); 87 DCHECK_EQ(MessageLoop::current(), worker_message_loop());
89 if (state_ != notifier::STATE_OPENED) { 88 if (state_ != notifier::STATE_CONNECTED) {
90 return; 89 return;
91 } 90 }
92 buzz::XmppClient* client = xmpp_client(); 91 buzz::XmppClient* client = xmpp_client();
93 if (client == NULL) { 92 if (client == NULL) {
94 LOG(DFATAL) << "xmpp_client() unexpectedly NULL"; 93 LOG(DFATAL) << "xmpp_client() unexpectedly NULL";
95 return; 94 return;
96 } 95 }
97 96
98 StopInvalidationListener(); 97 StopInvalidationListener();
99 chrome_invalidation_client_.reset(new ChromeInvalidationClient()); 98 chrome_invalidation_client_.reset(new ChromeInvalidationClient());
100 99
101 // TODO(akalin): Make cache_guid() part of the client ID. If we do 100 // TODO(akalin): Make cache_guid() part of the client ID. If we do
102 // so and we somehow propagate it up to the server somehow, we can 101 // so and we somehow propagate it up to the server somehow, we can
103 // make it so that we won't receive any notifications that were 102 // make it so that we won't receive any notifications that were
104 // generated from our own changes. 103 // generated from our own changes.
105 const std::string kClientId = "server_notifier_thread"; 104 const std::string kClientId = "server_notifier_thread";
106 chrome_invalidation_client_->Start(kClientId, this, client); 105 chrome_invalidation_client_->Start(kClientId, this, client);
107 } 106 }
108 107
109 void ServerNotifierThread::RegisterTypesAndSignalSubscribed() { 108 void ServerNotifierThread::RegisterTypesAndSignalSubscribed() {
110 DCHECK_EQ(MessageLoop::current(), worker_message_loop()); 109 DCHECK_EQ(MessageLoop::current(), worker_message_loop());
111 if (state_ != notifier::STATE_OPENED) { 110 if (state_ != notifier::STATE_CONNECTED) {
112 return; 111 return;
113 } 112 }
114 113
115 chrome_invalidation_client_->RegisterTypes(); 114 chrome_invalidation_client_->RegisterTypes();
116 parent_message_loop_->PostTask( 115 parent_message_loop_->PostTask(
117 FROM_HERE, 116 FROM_HERE,
118 NewRunnableMethod( 117 NewRunnableMethod(
119 this, 118 this,
120 &ServerNotifierThread::SignalSubscribed)); 119 &ServerNotifierThread::SignalSubscribed));
121 } 120 }
(...skipping 13 matching lines...) Expand all
135 delegate_->OnIncomingNotification(notification_data); 134 delegate_->OnIncomingNotification(notification_data);
136 } 135 }
137 } 136 }
138 137
139 void ServerNotifierThread::StopInvalidationListener() { 138 void ServerNotifierThread::StopInvalidationListener() {
140 DCHECK_EQ(MessageLoop::current(), worker_message_loop()); 139 DCHECK_EQ(MessageLoop::current(), worker_message_loop());
141 chrome_invalidation_client_.reset(); 140 chrome_invalidation_client_.reset();
142 } 141 }
143 142
144 } // namespace sync_notifier 143 } // namespace sync_notifier
OLDNEW
« no previous file with comments | « no previous file | jingle/jingle.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698