| Index: chrome/common/net/notifier/listener/talk_mediator_impl.cc
|
| diff --git a/chrome/common/net/notifier/listener/talk_mediator_impl.cc b/chrome/common/net/notifier/listener/talk_mediator_impl.cc
|
| index fbf9da7d8e5da1b18b70d376149f38898df60062..2e977fcc10ff7caa6614834ad259d64197aba5ad 100644
|
| --- a/chrome/common/net/notifier/listener/talk_mediator_impl.cc
|
| +++ b/chrome/common/net/notifier/listener/talk_mediator_impl.cc
|
| @@ -46,6 +46,7 @@ TalkMediatorImpl::TalkMediatorImpl(
|
| mediator_thread_(
|
| new MediatorThreadImpl(network_change_notifier_thread)),
|
| invalidate_xmpp_auth_token_(invalidate_xmpp_auth_token) {
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| // Ensure the SSL library is initialized.
|
| SslInitializationSingleton::GetInstance()->RegisterClient();
|
|
|
| @@ -57,11 +58,13 @@ TalkMediatorImpl::TalkMediatorImpl(MediatorThread *thread)
|
| : delegate_(NULL),
|
| mediator_thread_(thread),
|
| invalidate_xmpp_auth_token_(false) {
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| // When testing we do not initialize the SSL library.
|
| TalkMediatorInitialization(true);
|
| }
|
|
|
| void TalkMediatorImpl::TalkMediatorInitialization(bool should_connect) {
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| if (should_connect) {
|
| mediator_thread_->SetDelegate(this);
|
| state_.connected = 1;
|
| @@ -71,76 +74,64 @@ void TalkMediatorImpl::TalkMediatorInitialization(bool should_connect) {
|
| }
|
|
|
| TalkMediatorImpl::~TalkMediatorImpl() {
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| if (state_.started) {
|
| Logout();
|
| }
|
| }
|
|
|
| bool TalkMediatorImpl::Login() {
|
| - bool should_log_in = false;
|
| - buzz::XmppClientSettings xmpp_settings;
|
| - {
|
| - AutoLock lock(mutex_);
|
| - // Connect to the mediator thread and start processing messages.
|
| - if (!state_.connected) {
|
| - mediator_thread_->SetDelegate(this);
|
| - state_.connected = 1;
|
| - }
|
| - should_log_in =
|
| - state_.initialized && !state_.logging_in && !state_.logged_in;
|
| - state_.logging_in = should_log_in;
|
| - xmpp_settings = xmpp_settings_;
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| + // Connect to the mediator thread and start processing messages.
|
| + if (!state_.connected) {
|
| + mediator_thread_->SetDelegate(this);
|
| + state_.connected = 1;
|
| }
|
| - if (should_log_in) {
|
| - mediator_thread_->Login(xmpp_settings);
|
| + if (state_.initialized && !state_.logging_in && !state_.logged_in) {
|
| + state_.logging_in = true;
|
| + mediator_thread_->Login(xmpp_settings_);
|
| + return true;
|
| }
|
| - return should_log_in;
|
| + return false;
|
| }
|
|
|
| bool TalkMediatorImpl::Logout() {
|
| - bool logging_out = false;
|
| - {
|
| - AutoLock lock(mutex_);
|
| - if (state_.connected) {
|
| - state_.connected = 0;
|
| - }
|
| - logging_out = state_.started;
|
| - if (logging_out) {
|
| - state_.started = 0;
|
| - state_.logging_in = 0;
|
| - state_.logged_in = 0;
|
| - state_.subscribed = 0;
|
| - }
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| + if (state_.connected) {
|
| + state_.connected = 0;
|
| }
|
| - if (logging_out) {
|
| + if (state_.started) {
|
| + state_.started = 0;
|
| + state_.logging_in = 0;
|
| + state_.logged_in = 0;
|
| + state_.subscribed = 0;
|
| // We do not want to be called back during logout since we may be
|
| // closing.
|
| mediator_thread_->SetDelegate(NULL);
|
| mediator_thread_->Logout();
|
| + return true;
|
| }
|
| - return logging_out;
|
| + return false;
|
| }
|
|
|
| bool TalkMediatorImpl::SendNotification(const OutgoingNotificationData& data) {
|
| - bool can_send_notification = false;
|
| - {
|
| - AutoLock lock(mutex_);
|
| - can_send_notification = state_.logged_in && state_.subscribed;
|
| - }
|
| - if (can_send_notification) {
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| + if (state_.logged_in && state_.subscribed) {
|
| mediator_thread_->SendNotification(data);
|
| + return true;
|
| }
|
| - return can_send_notification;
|
| + return false;
|
| }
|
|
|
| void TalkMediatorImpl::SetDelegate(TalkMediator::Delegate* delegate) {
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| delegate_ = delegate;
|
| }
|
|
|
| bool TalkMediatorImpl::SetAuthToken(const std::string& email,
|
| const std::string& token,
|
| const std::string& token_service) {
|
| - AutoLock lock(mutex_);
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
|
|
| // Verify that we can create a JID from the email provided.
|
| buzz::Jid jid = buzz::Jid(email);
|
| @@ -163,13 +154,9 @@ bool TalkMediatorImpl::SetAuthToken(const std::string& email,
|
|
|
| void TalkMediatorImpl::AddSubscribedServiceUrl(
|
| const std::string& service_url) {
|
| - bool logged_in = false;
|
| - {
|
| - AutoLock lock(mutex_);
|
| - subscribed_services_list_.push_back(service_url);
|
| - logged_in = state_.logged_in;
|
| - }
|
| - if (logged_in) {
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| + subscribed_services_list_.push_back(service_url);
|
| + if (state_.logged_in) {
|
| LOG(INFO) << "Resubscribing for updates, a new service got added";
|
| mediator_thread_->SubscribeForUpdates(subscribed_services_list_);
|
| }
|
| @@ -177,11 +164,9 @@ void TalkMediatorImpl::AddSubscribedServiceUrl(
|
|
|
|
|
| void TalkMediatorImpl::OnConnectionStateChange(bool logged_in) {
|
| - {
|
| - AutoLock lock(mutex_);
|
| - state_.logging_in = 0;
|
| - state_.logged_in = logged_in;
|
| - }
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| + state_.logging_in = 0;
|
| + state_.logged_in = logged_in;
|
| if (logged_in) {
|
| LOG(INFO) << "P2P: Logged in.";
|
| // ListenForUpdates enables the ListenTask. This is done before
|
| @@ -196,10 +181,8 @@ void TalkMediatorImpl::OnConnectionStateChange(bool logged_in) {
|
| }
|
|
|
| void TalkMediatorImpl::OnSubscriptionStateChange(bool subscribed) {
|
| - {
|
| - AutoLock lock(mutex_);
|
| - state_.subscribed = subscribed;
|
| - }
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| + state_.subscribed = subscribed;
|
| LOG(INFO) << "P2P: " << (subscribed ? "subscribed" : "unsubscribed");
|
| if (delegate_) {
|
| delegate_->OnNotificationStateChange(subscribed);
|
| @@ -208,6 +191,7 @@ void TalkMediatorImpl::OnSubscriptionStateChange(bool subscribed) {
|
|
|
| void TalkMediatorImpl::OnIncomingNotification(
|
| const IncomingNotificationData& notification_data) {
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| LOG(INFO) << "P2P: Updates are available on the server.";
|
| if (delegate_) {
|
| delegate_->OnIncomingNotification(notification_data);
|
| @@ -215,6 +199,7 @@ void TalkMediatorImpl::OnIncomingNotification(
|
| }
|
|
|
| void TalkMediatorImpl::OnOutgoingNotification() {
|
| + DCHECK(non_thread_safe_.CalledOnValidThread());
|
| LOG(INFO) <<
|
| "P2P: Peers were notified that updates are available on the server.";
|
| if (delegate_) {
|
|
|