blob: fd673373e201ee15c906dd8fd10b9dd3d57ef237 [file] [log] [blame]
// 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 <string>
#include "base/memory/scoped_ptr.h"
#include "jingle/notifier/listener/notification_defines.h"
namespace notifier {
struct NotifierOptions;
class PushClientObserver;
// A PushClient is an interface for classes that implement a push
// mechanism, where a client can push notifications to and receive
// notifications from other clients.
class PushClient {
virtual ~PushClient();
// Creates a default non-blocking PushClient implementation from the
// given options.
static scoped_ptr<PushClient> CreateDefault(
const NotifierOptions& notifier_options);
// Creates a default blocking PushClient implementation from the
// given options. Must be called from the IO thread (according to
// |notifier_options|).
static scoped_ptr<PushClient> CreateDefaultOnIOThread(
const NotifierOptions& notifier_options);
// Manage the list of observers for incoming notifications.
virtual void AddObserver(PushClientObserver* observer) = 0;
virtual void RemoveObserver(PushClientObserver* observer) = 0;
// Implementors are required to have this take effect only on the
// next (re-)connection. Therefore, clients should call this before
// UpdateCredentials().
virtual void UpdateSubscriptions(const SubscriptionList& subscriptions) = 0;
// If not connected, connects with the given credentials. If
// already connected, the next connection attempt will use the given
// credentials.
virtual void UpdateCredentials(
const std::string& email, const std::string& token) = 0;
// Sends a notification (with no reliability guarantees).
virtual void SendNotification(const Notification& notification) = 0;
// Sends a ping (with no reliability guarantees).
virtual void SendPing() = 0;
} // namespace notifier