summaryrefslogtreecommitdiffstats
path: root/jingle
diff options
context:
space:
mode:
authorghc@google.com <ghc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-27 00:40:21 +0000
committerghc@google.com <ghc@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-27 00:40:21 +0000
commit6f765db725292f9eb8349afc004c933f5cffa352 (patch)
treeeb70892adbd652b07593b1d19f119904ef3504e3 /jingle
parent449a7fcf7a00939468e8de7f1889db9b9d7be49f (diff)
downloadchromium_src-6f765db725292f9eb8349afc004c933f5cffa352.zip
chromium_src-6f765db725292f9eb8349afc004c933f5cffa352.tar.gz
chromium_src-6f765db725292f9eb8349afc004c933f5cffa352.tar.bz2
- replace custom <iq>-stanza protocol with push notifications (using PushNotifications* classes) in CacheInvalidationPacketHandler, and update unit test accordingly
- extend notifier::Notification and PushNotificationsSendUpdateTask to allow specification of recipients (and recipient-specific data) Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=119171 Review URL: http://codereview.chromium.org/9190029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@119316 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'jingle')
-rw-r--r--jingle/notifier/base/fake_base_task.cc33
-rw-r--r--jingle/notifier/listener/notification_defines.cc5
-rw-r--r--jingle/notifier/listener/notification_defines.h17
-rw-r--r--jingle/notifier/listener/push_notifications_send_update_task.cc22
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)) {