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

Unified Diff: chrome/browser/sync/notifier/listener/listen_task.cc

Issue 1956001: Moved XMPP notifier library from chrome/browser/sync to chrome/common.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sync/notifier/listener/listen_task.cc
===================================================================
--- chrome/browser/sync/notifier/listener/listen_task.cc (revision 46353)
+++ chrome/browser/sync/notifier/listener/listen_task.cc (working copy)
@@ -1,144 +0,0 @@
-// Copyright (c) 2009 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 "chrome/browser/sync/notifier/listener/listen_task.h"
-
-#include "base/logging.h"
-#include "chrome/browser/sync/notifier/listener/notification_constants.h"
-#include "chrome/browser/sync/notifier/listener/xml_element_util.h"
-#include "talk/base/task.h"
-#include "talk/xmllite/qname.h"
-#include "talk/xmllite/xmlelement.h"
-#include "talk/xmpp/xmppclient.h"
-#include "talk/xmpp/xmppconstants.h"
-#include "talk/xmpp/xmppengine.h"
-
-namespace notifier {
-
-ListenTask::ListenTask(Task* parent)
- : buzz::XmppTask(parent, buzz::XmppEngine::HL_TYPE) {
-}
-
-ListenTask::~ListenTask() {
-}
-
-int ListenTask::ProcessStart() {
- LOG(INFO) << "P2P: Listener task started.";
- return STATE_RESPONSE;
-}
-
-int ListenTask::ProcessResponse() {
- LOG(INFO) << "P2P: Listener response received.";
- const buzz::XmlElement* stanza = NextStanza();
- if (stanza == NULL) {
- return STATE_BLOCKED;
- }
- // Acknowledge receipt of the notification to the buzz server.
- scoped_ptr<buzz::XmlElement> response_stanza(MakeIqResult(stanza));
- SendStanza(response_stanza.get());
-
- // TODO(akalin): Write unittests to cover this.
- // Extract the service URL and service-specific data from the stanza.
- // The response stanza has the following format.
- // <iq from="{bare_jid}" to="{full_jid}" id="#" type="set">
- // <not:getAll xmlns:not="google:notifier">
- // <Timestamp long="#" xmlns=""/>
- // <Result xmlns="">
- // <Id>
- // <ServiceUrl data="{service_url}"/>
- // <ServiceId data="{service_id}"/>
- // </Id>
- // <Timestamp long="#"/>
- // <Content>
- // <Priority int="#"/>
- // <ServiceSpecificData data="{service_specific_data}"/>
- // <RequireSubscription bool="true"/>
- // </Content>
- // <State>
- // <Type int="#"/>
- // <Read bool="{true/false}"/>
- // </State>
- // <ClientActive bool="{true/false}"/>
- // </Result>
- // </not:getAll>
- // </iq> "
- // Note that there can be multiple "Result" elements, so we need to loop
- // through all of them.
- bool update_signaled = false;
- const buzz::XmlElement* get_all_element =
- stanza->FirstNamed(buzz::QName(true, "google:notifier", "getAll"));
- if (get_all_element) {
- const buzz::XmlElement* result_element =
- get_all_element->FirstNamed(
- buzz::QName(true, buzz::STR_EMPTY, "Result"));
- while (result_element) {
- IncomingNotificationData notification_data;
- const buzz::XmlElement* id_element =
- result_element->FirstNamed(buzz::QName(true, buzz::STR_EMPTY, "Id"));
- if (id_element) {
- const buzz::XmlElement* service_url_element =
- id_element->FirstNamed(
- buzz::QName(true, buzz::STR_EMPTY, "ServiceUrl"));
- if (service_url_element) {
- notification_data.service_url = service_url_element->Attr(
- buzz::QName(true, buzz::STR_EMPTY, "data"));
- }
- }
- const buzz::XmlElement* content_element =
- result_element->FirstNamed(
- buzz::QName(true, buzz::STR_EMPTY, "Content"));
- if (content_element) {
- const buzz::XmlElement* service_data_element =
- content_element->FirstNamed(
- buzz::QName(true, buzz::STR_EMPTY, "ServiceSpecificData"));
- if (service_data_element) {
- notification_data.service_specific_data = service_data_element->Attr(
- buzz::QName(true, buzz::STR_EMPTY, "data"));
- }
- }
- // Inform listeners that a notification has been received.
- SignalUpdateAvailable(notification_data);
- update_signaled = true;
- // Now go to the next Result element
- result_element = result_element->NextNamed(
- buzz::QName(true, buzz::STR_EMPTY, "Result"));
- }
- }
- if (!update_signaled) {
- LOG(WARNING) <<
- "No getAll element or Result element found in response stanza";
- // Signal an empty update to preserve old behavior
- SignalUpdateAvailable(IncomingNotificationData());
- }
- return STATE_RESPONSE;
-}
-
-bool ListenTask::HandleStanza(const buzz::XmlElement* stanza) {
- LOG(INFO) << "P2P: Stanza received: " << XmlElementToString(*stanza);
- // TODO(akalin): Do more verification on stanza depending on
- // the sync notification method
- if (IsValidNotification(stanza)) {
- QueueStanza(stanza);
- return true;
- }
- return false;
-}
-
-bool ListenTask::IsValidNotification(const buzz::XmlElement* stanza) {
- static const buzz::QName kQnNotifierGetAll(
- true, kNotifierNamespace, "getAll");
- // An update notificaiton has the following form.
- // <cli:iq from="{bare_jid}" to="{full_jid}"
- // id="#" type="set" xmlns:cli="jabber:client">
- // <not:getAll xmlns:not="google:notifier">
- // <Timestamp long="#" xmlns=""/>
- // </not:getAll>
- // </cli:iq>
- return
- (MatchRequestIq(stanza, buzz::STR_SET, kQnNotifierGetAll) &&
- (stanza->Attr(buzz::QN_TO) == GetClient()->jid().Str()) &&
- (stanza->Attr(buzz::QN_FROM) == GetClient()->jid().BareJid().Str()));
-}
-
-} // namespace notifier
« no previous file with comments | « chrome/browser/sync/notifier/listener/listen_task.h ('k') | chrome/browser/sync/notifier/listener/mediator_thread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698