gcm_app_handler.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2014 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef COMPONENTS_GCM_DRIVER_GCM_APP_HANDLER_H_
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define COMPONENTS_GCM_DRIVER_GCM_APP_HANDLER_H_
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/gcm_driver/gcm_client.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace gcm {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Defines the interface to provide handling and event routing logic for a given
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// app.
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class GCMAppHandler {
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GCMAppHandler();
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~GCMAppHandler();
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // Called to do all the cleanup when GCM is shutting down.
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // In the case that multiple apps share the same app handler, it should be
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // make safe for ShutdownHandler to be called multiple times.
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ShutdownHandler() = 0;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called when a GCM message has been received.
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnMessage(const std::string& app_id,
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                         const GCMClient::IncomingMessage& message) = 0;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called when some GCM messages have been deleted from the server.
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnMessagesDeleted(const std::string& app_id) = 0;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called when a GCM message failed to be delivered.
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnSendError(
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const std::string& app_id,
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const GCMClient::SendErrorDetails& send_error_details) = 0;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Called when a GCM message was received by GCM server.
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void OnSendAcknowledged(const std::string& app_id,
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  const std::string& message_id) = 0;
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // If no app handler has been added with the exact app_id of an incoming
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // event, all handlers will be asked (in arbitrary order) whether they can
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // handle the app_id, and the first to return true will receive the event.
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool CanHandle(const std::string& app_id) const;
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace gcm
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif  // COMPONENTS_GCM_DRIVER_GCM_APP_HANDLER_H_
52