1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "sync/notifier/push_client_channel.h" 6 7 #include "base/stl_util.h" 8 #include "google/cacheinvalidation/client_gateway.pb.h" 9 #include "jingle/notifier/listener/push_client.h" 10 11 namespace syncer { 12 13 namespace { 14 15 const char kBotJid[] = "tango (at) bot.talk.google.com"; 16 const char kChannelName[] = "tango_raw"; 17 18 } // namespace 19 20 PushClientChannel::PushClientChannel( 21 scoped_ptr<notifier::PushClient> push_client) 22 : push_client_(push_client.Pass()) { 23 push_client_->AddObserver(this); 24 notifier::Subscription subscription; 25 subscription.channel = kChannelName; 26 subscription.from = ""; 27 notifier::SubscriptionList subscriptions; 28 subscriptions.push_back(subscription); 29 push_client_->UpdateSubscriptions(subscriptions); 30 } 31 32 PushClientChannel::~PushClientChannel() { 33 push_client_->RemoveObserver(this); 34 } 35 36 void PushClientChannel::UpdateCredentials( 37 const std::string& email, const std::string& token) { 38 push_client_->UpdateCredentials(email, token); 39 } 40 41 void PushClientChannel::SendEncodedMessage(const std::string& encoded_message) { 42 notifier::Recipient recipient; 43 recipient.to = kBotJid; 44 notifier::Notification notification; 45 notification.channel = kChannelName; 46 notification.recipients.push_back(recipient); 47 notification.data = encoded_message; 48 push_client_->SendNotification(notification); 49 } 50 51 void PushClientChannel::OnNotificationsEnabled() { 52 NotifyStateChange(INVALIDATIONS_ENABLED); 53 } 54 55 void PushClientChannel::OnNotificationsDisabled( 56 notifier::NotificationsDisabledReason reason) { 57 NotifyStateChange(FromNotifierReason(reason)); 58 } 59 60 void PushClientChannel::OnIncomingNotification( 61 const notifier::Notification& notification) { 62 DeliverIncomingMessage(notification.data); 63 } 64 65 } // namespace syncer 66