diff options
Diffstat (limited to 'jingle')
-rw-r--r-- | jingle/notifier/base/fake_base_task.cc | 33 | ||||
-rw-r--r-- | jingle/notifier/listener/notification_defines.cc | 5 | ||||
-rw-r--r-- | jingle/notifier/listener/notification_defines.h | 17 | ||||
-rw-r--r-- | jingle/notifier/listener/push_notifications_send_update_task.cc | 22 |
4 files changed, 71 insertions, 6 deletions
diff --git a/jingle/notifier/base/fake_base_task.cc b/jingle/notifier/base/fake_base_task.cc index 9dceec0..f3d64ca 100644 --- a/jingle/notifier/base/fake_base_task.cc +++ b/jingle/notifier/base/fake_base_task.cc @@ -1,7 +1,8 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "base/compiler_specific.h" #include "jingle/notifier/base/fake_base_task.h" #include "jingle/notifier/base/weak_xmpp_client.h" #include "talk/xmpp/asyncsocket.h" @@ -26,10 +27,36 @@ class MockAsyncSocket : public buzz::AsyncSocket { MOCK_METHOD1(StartTls, bool(const std::string&)); }; +} // namespace notifier + +namespace { + +// Extends WeakXmppClient to make jid() return a full jid, as required by +// PushNotificationsSubscribeTask. +class FakeWeakXmppClient : public notifier::WeakXmppClient { + public: + explicit FakeWeakXmppClient(talk_base::TaskParent* parent) + : notifier::WeakXmppClient(parent), + jid_("test@example.com/testresource") {} + + virtual ~FakeWeakXmppClient() {} + + virtual const buzz::Jid& jid() const OVERRIDE { + return jid_; + } + + private: + buzz::Jid jid_; +}; + +} // namespace + +namespace notifier { + FakeBaseTask::FakeBaseTask() { // Owned by |task_pump_|. - notifier::WeakXmppClient* weak_xmpp_client = - new notifier::WeakXmppClient(&task_pump_); + FakeWeakXmppClient* weak_xmpp_client = + new FakeWeakXmppClient(&task_pump_); weak_xmpp_client->Start(); buzz::XmppClientSettings settings; diff --git a/jingle/notifier/listener/notification_defines.cc b/jingle/notifier/listener/notification_defines.cc index 61b099a..6d2041e 100644 --- a/jingle/notifier/listener/notification_defines.cc +++ b/jingle/notifier/listener/notification_defines.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -6,6 +6,9 @@ namespace notifier { +Notification::Notification() {} +Notification::~Notification() {} + std::string Notification::ToString() const { return "{ channel: \"" + channel + "\", data: \"" + data + "\" }"; } diff --git a/jingle/notifier/listener/notification_defines.h b/jingle/notifier/listener/notification_defines.h index b17407f..f85288f 100644 --- a/jingle/notifier/listener/notification_defines.h +++ b/jingle/notifier/listener/notification_defines.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -21,9 +21,24 @@ struct Subscription { typedef std::vector<Subscription> SubscriptionList; +// A structure representing a <recipient/> block within a push message. +struct Recipient { + // The bare jid of the recipient. + std::string to; + // User-specific data for the recipient. + std::string user_specific_data; +}; + +typedef std::vector<Recipient> RecipientList; + struct Notification { + Notification(); + ~Notification(); + // The channel the notification is coming in on. std::string channel; + // Recipients for this notification (may be empty). + RecipientList recipients; // The notification data payload. std::string data; diff --git a/jingle/notifier/listener/push_notifications_send_update_task.cc b/jingle/notifier/listener/push_notifications_send_update_task.cc index 6412319..d669a37 100644 --- a/jingle/notifier/listener/push_notifications_send_update_task.cc +++ b/jingle/notifier/listener/push_notifications_send_update_task.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -44,10 +44,12 @@ buzz::XmlElement* PushNotificationsSendUpdateTask::MakeUpdateMessage( const buzz::QName kQnPush(kPushNotificationsNamespace, "push"); const buzz::QName kQnChannel(buzz::STR_EMPTY, "channel"); const buzz::QName kQnData(kPushNotificationsNamespace, "data"); + const buzz::QName kQnRecipient(kPushNotificationsNamespace, "recipient"); // Create our update stanza. The message is constructed as: // <message from='{full jid}' to='{bare jid}' type='headline'> // <push xmlns='google:push' channel='{channel}'> + // [<recipient to='{bare jid}'>{base-64 encoded data}</data>]* // <data>{base-64 encoded data}</data> // </push> // </message> @@ -60,6 +62,24 @@ buzz::XmlElement* PushNotificationsSendUpdateTask::MakeUpdateMessage( push->AddAttr(kQnChannel, notification.channel); message->AddElement(push); + const RecipientList& recipients = notification.recipients; + for (size_t i = 0; i < recipients.size(); ++i) { + const Recipient& recipient = recipients[i]; + buzz::XmlElement* recipient_element = + new buzz::XmlElement(kQnRecipient, true); + push->AddElement(recipient_element); + recipient_element->AddAttr(buzz::QN_TO, recipient.to); + if (!recipient.user_specific_data.empty()) { + std::string base64_data; + if (!base::Base64Encode(recipient.user_specific_data, &base64_data)) { + LOG(WARNING) << "Could not encode data " + << recipient.user_specific_data; + } else { + recipient_element->SetBodyText(base64_data); + } + } + } + buzz::XmlElement* data = new buzz::XmlElement(kQnData, true); std::string base64_data; if (!base::Base64Encode(notification.data, &base64_data)) { |