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: 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::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