[GCM] Move extension specific logic out of GCMProfileService
A new interface GCMAppHandler is introduce for app specific logic.
For extensions, ExtensionGCMAppHandler is created for both event
dispatching and extension notification handling.
BUG=343268
[email protected]
Review URL: https://codereview.chromium.org/196143003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@258235 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/extension_gcm_app_handler.h b/chrome/browser/extensions/extension_gcm_app_handler.h
new file mode 100644
index 0000000..5edf0a9f
--- /dev/null
+++ b/chrome/browser/extensions/extension_gcm_app_handler.h
@@ -0,0 +1,67 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_GCM_APP_HANDLER_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSION_GCM_APP_HANDLER_H_
+
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "chrome/browser/services/gcm/gcm_app_handler.h"
+#include "content/public/browser/notification_observer.h"
+#include "content/public/browser/notification_registrar.h"
+#include "extensions/browser/event_router.h"
+#include "google_apis/gcm/gcm_client.h"
+
+class Profile;
+namespace gcm {
+class GCMProfileService;
+}
+
+namespace extensions {
+
+class GcmJsEventRouter;
+
+// Defines the interface to provide handling logic for a given app.
+class ExtensionGCMAppHandler : public gcm::GCMAppHandler,
+ public content::NotificationObserver {
+ public:
+ explicit ExtensionGCMAppHandler(Profile* profile);
+ virtual ~ExtensionGCMAppHandler();
+
+ // Overridden from gcm::GCMAppHandler:
+ virtual void ShutdownHandler() OVERRIDE;
+ virtual void OnMessage(
+ const std::string& app_id,
+ const gcm::GCMClient::IncomingMessage& message) OVERRIDE;
+ virtual void OnMessagesDeleted(const std::string& app_id) OVERRIDE;
+ virtual void OnSendError(
+ const std::string& app_id,
+ const gcm::GCMClient::SendErrorDetails& send_error_details) OVERRIDE;
+
+ private:
+ // Overridden from content::NotificationObserver:
+ virtual void Observe(int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) OVERRIDE;
+
+ gcm::GCMProfileService* GetGCMProfileService() const;
+ void OnExtensionsReady();
+ void OnUnregisterCompleted(const std::string& app_id,
+ gcm::GCMClient::Result result);
+
+ Profile* profile_;
+ content::NotificationRegistrar registrar_;
+
+#if !defined(OS_ANDROID)
+ scoped_ptr<extensions::GcmJsEventRouter> js_event_router_;
+#endif
+
+ base::WeakPtrFactory<ExtensionGCMAppHandler> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(ExtensionGCMAppHandler);
+};
+
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_GCM_APP_HANDLER_H_