• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "components/gcm_driver/gcm_client.h"
10 #include "extensions/browser/extension_function.h"
11 
12 namespace gcm {
13 class GCMDriver;
14 class GCMProfileService;
15 }  // namespace gcm
16 
17 class Profile;
18 
19 namespace extensions {
20 
21 class GcmApiFunction : public AsyncExtensionFunction {
22  public:
GcmApiFunction()23   GcmApiFunction() {}
24 
25  protected:
~GcmApiFunction()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::GCMDriver* GetGCMDriver() 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 {
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  private:
107   // The application we route the event to is running in context of the
108   // |profile_| and the latter outlives the event router.
109   Profile* profile_;
110 };
111 
112 }  // namespace extensions
113 
114 #endif  // CHROME_BROWSER_EXTENSIONS_API_GCM_GCM_API_H_
115