Enable Enterprise enrollment on desktop builds.
[chromium-blink-merge.git] / chrome / browser / extensions / api / gcm / gcm_api.h
blob07009a16dc2a46e600cab41f3bfa24bdefe44c84
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"
13 namespace gcm {
14 class GCMProfileService;
15 } // namespace gcm
17 class Profile;
19 namespace extensions {
21 class GcmApiFunction : public AsyncExtensionFunction {
22 public:
23 GcmApiFunction() {}
25 protected:
26 virtual ~GcmApiFunction() {}
28 // ExtensionFunction:
29 virtual bool RunImpl() 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 {
41 public:
42 DECLARE_EXTENSION_FUNCTION("gcm.register", GCM_REGISTER);
44 GcmRegisterFunction();
46 protected:
47 virtual ~GcmRegisterFunction();
49 // Register function implementation.
50 virtual bool DoWork() OVERRIDE FINAL;
52 private:
53 void CompleteFunctionWithResult(const std::string& registration_id,
54 gcm::GCMClient::Result result);
57 class GcmUnregisterFunction : public GcmApiFunction {
58 public:
59 DECLARE_EXTENSION_FUNCTION("gcm.unregister", GCM_UNREGISTER);
61 GcmUnregisterFunction();
63 protected:
64 virtual ~GcmUnregisterFunction();
66 // Register function implementation.
67 virtual bool DoWork() OVERRIDE FINAL;
69 private:
70 void CompleteFunctionWithResult(gcm::GCMClient::Result result);
73 class GcmSendFunction : public GcmApiFunction {
74 public:
75 DECLARE_EXTENSION_FUNCTION("gcm.send", GCM_SEND);
77 GcmSendFunction();
79 protected:
80 virtual ~GcmSendFunction();
82 // Send function implementation.
83 virtual bool DoWork() OVERRIDE FINAL;
85 private:
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 {
95 public:
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;
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_;
115 } // namespace extensions
117 #endif // CHROME_BROWSER_EXTENSIONS_API_GCM_GCM_API_H_