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.
5 #ifndef CHROME_BROWSER_EXTENSIONS_API_GCM_GCM_API_H_
6 #define CHROME_BROWSER_EXTENSIONS_API_GCM_GCM_API_H_
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"
14 class GCMProfileService;
19 namespace extensions {
21 class GcmApiFunction : public AsyncExtensionFunction {
26 virtual ~GcmApiFunction() {}
29 virtual bool RunAsync() OVERRIDE FINAL;
31 // Actual implementation of specific functions.
32 virtual bool DoWork() = 0;
34 // Checks that the GCM API is enabled.
35 bool IsGcmApiEnabled() const;
37 gcm::GCMProfileService* GCMProfileService() const;
40 class GcmRegisterFunction : public GcmApiFunction {
42 DECLARE_EXTENSION_FUNCTION("gcm.register", GCM_REGISTER);
44 GcmRegisterFunction();
47 virtual ~GcmRegisterFunction();
49 // Register function implementation.
50 virtual bool DoWork() OVERRIDE FINAL;
53 void CompleteFunctionWithResult(const std::string& registration_id,
54 gcm::GCMClient::Result result);
57 class GcmUnregisterFunction : public GcmApiFunction {
59 DECLARE_EXTENSION_FUNCTION("gcm.unregister", GCM_UNREGISTER);
61 GcmUnregisterFunction();
64 virtual ~GcmUnregisterFunction();
66 // Register function implementation.
67 virtual bool DoWork() OVERRIDE FINAL;
70 void CompleteFunctionWithResult(gcm::GCMClient::Result result);
73 class GcmSendFunction : public GcmApiFunction {
75 DECLARE_EXTENSION_FUNCTION("gcm.send", GCM_SEND);
80 virtual ~GcmSendFunction();
82 // Send function implementation.
83 virtual bool DoWork() OVERRIDE FINAL;
86 void CompleteFunctionWithResult(const std::string& message_id,
87 gcm::GCMClient::Result result);
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;
94 class GcmJsEventRouter : public EventRouter::Observer {
96 explicit GcmJsEventRouter(Profile* profile);
98 virtual ~GcmJsEventRouter();
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);
106 // EventRouter::Observer:
107 virtual void OnListenerAdded(const EventListenerInfo& details) OVERRIDE;
110 // The application we route the event to is running in context of the
111 // |profile_| and the latter outlives the event router.
115 } // namespace extensions
117 #endif // CHROME_BROWSER_EXTENSIONS_API_GCM_GCM_API_H_