Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / gcm / gcm_api.h
1 // Copyright 2013 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 CHROME_BROWSER_EXTENSIONS_API_GCM_GCM_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_GCM_GCM_API_H_
7
8 #include "chrome/common/extensions/api/gcm.h"
9 #include "extensions/browser/event_router.h"
10 #include "extensions/browser/extension_function.h"
11 #include "google_apis/gcm/gcm_client.h"
12
13 namespace gcm {
14 class GCMProfileService;
15 }  // namespace gcm
16
17 class Profile;
18
19 namespace extensions {
20
21 class GcmApiFunction : public AsyncExtensionFunction {
22  public:
23   GcmApiFunction() {}
24
25  protected:
26   virtual ~GcmApiFunction() {}
27
28   // ExtensionFunction:
29   virtual bool RunAsync() OVERRIDE FINAL;
30
31   // Actual implementation of specific functions.
32   virtual bool DoWork() = 0;
33
34   // Checks that the GCM API is enabled.
35   bool IsGcmApiEnabled() const;
36
37   gcm::GCMProfileService* GCMProfileService() const;
38 };
39
40 class GcmRegisterFunction : public GcmApiFunction {
41  public:
42   DECLARE_EXTENSION_FUNCTION("gcm.register", GCM_REGISTER);
43
44   GcmRegisterFunction();
45
46  protected:
47   virtual ~GcmRegisterFunction();
48
49   // Register function implementation.
50   virtual bool DoWork() OVERRIDE FINAL;
51
52  private:
53   void CompleteFunctionWithResult(const std::string& registration_id,
54                                   gcm::GCMClient::Result result);
55 };
56
57 class GcmUnregisterFunction : public GcmApiFunction {
58  public:
59   DECLARE_EXTENSION_FUNCTION("gcm.unregister", GCM_UNREGISTER);
60
61   GcmUnregisterFunction();
62
63  protected:
64   virtual ~GcmUnregisterFunction();
65
66   // Register function implementation.
67   virtual bool DoWork() OVERRIDE FINAL;
68
69  private:
70   void CompleteFunctionWithResult(gcm::GCMClient::Result result);
71 };
72
73 class GcmSendFunction : public GcmApiFunction {
74  public:
75   DECLARE_EXTENSION_FUNCTION("gcm.send", GCM_SEND);
76
77   GcmSendFunction();
78
79  protected:
80   virtual ~GcmSendFunction();
81
82   // Send function implementation.
83   virtual bool DoWork() OVERRIDE FINAL;
84
85  private:
86   void CompleteFunctionWithResult(const std::string& message_id,
87                                   gcm::GCMClient::Result result);
88
89   // Validates that message data do not carry invalid keys and fit into
90   // allowable size limits.
91   bool ValidateMessageData(const gcm::GCMClient::MessageData& data) const;
92 };
93
94 class GcmJsEventRouter : public EventRouter::Observer {
95  public:
96   explicit GcmJsEventRouter(Profile* profile);
97
98   virtual ~GcmJsEventRouter();
99
100   void OnMessage(const std::string& app_id,
101                  const gcm::GCMClient::IncomingMessage& message);
102   void OnMessagesDeleted(const std::string& app_id);
103   void OnSendError(const std::string& app_id,
104                    const gcm::GCMClient::SendErrorDetails& send_error_details);
105
106   // EventRouter::Observer:
107   virtual void OnListenerAdded(const EventListenerInfo& details) OVERRIDE;
108
109  private:
110   // The application we route the event to is running in context of the
111   // |profile_| and the latter outlives the event router.
112   Profile* profile_;
113 };
114
115 }  // namespace extensions
116
117 #endif  // CHROME_BROWSER_EXTENSIONS_API_GCM_GCM_API_H_