1// Copyright (c) 2014 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#ifndef COMPONENTS_GCM_DRIVER_GCM_APP_HANDLER_H_
6#define COMPONENTS_GCM_DRIVER_GCM_APP_HANDLER_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "components/gcm_driver/gcm_client.h"
12
13namespace gcm {
14
15// Defines the interface to provide handling and event routing logic for a given
16// app.
17class GCMAppHandler {
18 public:
19  GCMAppHandler();
20  virtual ~GCMAppHandler();
21
22  // Called to do all the cleanup when GCM is shutting down.
23  // In the case that multiple apps share the same app handler, it should be
24  // make safe for ShutdownHandler to be called multiple times.
25  virtual void ShutdownHandler() = 0;
26
27  // Called when a GCM message has been received.
28  virtual void OnMessage(const std::string& app_id,
29                         const GCMClient::IncomingMessage& message) = 0;
30
31  // Called when some GCM messages have been deleted from the server.
32  virtual void OnMessagesDeleted(const std::string& app_id) = 0;
33
34  // Called when a GCM message failed to be delivered.
35  virtual void OnSendError(
36      const std::string& app_id,
37      const GCMClient::SendErrorDetails& send_error_details) = 0;
38
39  // Called when a GCM message was received by GCM server.
40  virtual void OnSendAcknowledged(const std::string& app_id,
41                                  const std::string& message_id) = 0;
42
43  // If no app handler has been added with the exact app_id of an incoming
44  // event, all handlers will be asked (in arbitrary order) whether they can
45  // handle the app_id, and the first to return true will receive the event.
46  virtual bool CanHandle(const std::string& app_id) const;
47};
48
49}  // namespace gcm
50
51#endif  // COMPONENTS_GCM_DRIVER_GCM_APP_HANDLER_H_
52