
The methodology used to generate this CL is documented in https://crbug.com/1098010#c34, except for the sweep for "All Rights Reserved" as that generates a lot of exceptions and will be a follow- up. No-Try: true No-Presubmit: true Bug: 1098010 Change-Id: I5caf6b21db9c12bea71258223f59c1ac4313a738 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3888258 Auto-Submit: Avi Drissman <avi@chromium.org> Commit-Queue: Mark Mentovai <mark@chromium.org> Reviewed-by: Mark Mentovai <mark@chromium.org> Owners-Override: Avi Drissman <avi@chromium.org> Cr-Commit-Position: refs/heads/main@{#1045289}
115 lines
4.0 KiB
C++
115 lines
4.0 KiB
C++
// Copyright 2014 The Chromium Authors
|
|
// 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 <memory>
|
|
#include <string>
|
|
|
|
#include "base/memory/raw_ptr.h"
|
|
#include "base/memory/weak_ptr.h"
|
|
#include "base/scoped_observation.h"
|
|
#include "components/gcm_driver/common/gcm_message.h"
|
|
#include "components/gcm_driver/gcm_app_handler.h"
|
|
#include "components/gcm_driver/gcm_client.h"
|
|
#include "components/gcm_driver/instance_id/instance_id.h"
|
|
#include "extensions/browser/browser_context_keyed_api_factory.h"
|
|
#include "extensions/browser/extension_registry.h"
|
|
#include "extensions/browser/extension_registry_observer.h"
|
|
|
|
class Profile;
|
|
|
|
namespace content {
|
|
class BrowserContext;
|
|
}
|
|
|
|
namespace gcm {
|
|
class GCMDriver;
|
|
}
|
|
namespace instance_id {
|
|
class InstanceIDDriver;
|
|
}
|
|
|
|
namespace extensions {
|
|
|
|
class GcmJsEventRouter;
|
|
|
|
// Defines the interface to provide handling logic for a given app.
|
|
class ExtensionGCMAppHandler : public gcm::GCMAppHandler,
|
|
public BrowserContextKeyedAPI,
|
|
public ExtensionRegistryObserver {
|
|
public:
|
|
explicit ExtensionGCMAppHandler(content::BrowserContext* context);
|
|
|
|
ExtensionGCMAppHandler(const ExtensionGCMAppHandler&) = delete;
|
|
ExtensionGCMAppHandler& operator=(const ExtensionGCMAppHandler&) = delete;
|
|
|
|
~ExtensionGCMAppHandler() override;
|
|
|
|
// BrowserContextKeyedAPI implementation.
|
|
static BrowserContextKeyedAPIFactory<ExtensionGCMAppHandler>*
|
|
GetFactoryInstance();
|
|
void Shutdown() override;
|
|
|
|
// gcm::GCMAppHandler implementation.
|
|
void ShutdownHandler() override;
|
|
void OnStoreReset() override;
|
|
void OnMessage(const std::string& app_id,
|
|
const gcm::IncomingMessage& message) override;
|
|
void OnMessagesDeleted(const std::string& app_id) override;
|
|
void OnSendError(
|
|
const std::string& app_id,
|
|
const gcm::GCMClient::SendErrorDetails& send_error_details) override;
|
|
void OnSendAcknowledged(const std::string& app_id,
|
|
const std::string& message_id) override;
|
|
|
|
protected:
|
|
// Could be overridden by testing purpose.
|
|
virtual void OnUnregisterCompleted(const std::string& app_id,
|
|
gcm::GCMClient::Result result);
|
|
virtual void OnDeleteIDCompleted(const std::string& app_id,
|
|
instance_id::InstanceID::Result result);
|
|
virtual void AddAppHandler(const std::string& app_id);
|
|
virtual void RemoveAppHandler(const std::string& app_id);
|
|
|
|
gcm::GCMDriver* GetGCMDriver() const;
|
|
instance_id::InstanceIDDriver* GetInstanceIDDriver() const;
|
|
|
|
private:
|
|
friend class BrowserContextKeyedAPIFactory<ExtensionGCMAppHandler>;
|
|
|
|
// ExtensionRegistryObserver implementation.
|
|
void OnExtensionLoaded(content::BrowserContext* browser_context,
|
|
const Extension* extension) override;
|
|
void OnExtensionUnloaded(content::BrowserContext* browser_context,
|
|
const Extension* extension,
|
|
UnloadedExtensionReason reason) override;
|
|
void OnExtensionUninstalled(content::BrowserContext* browser_context,
|
|
const Extension* extension,
|
|
extensions::UninstallReason reason) override;
|
|
|
|
void RemoveInstanceID(const std::string& app_id);
|
|
void AddDummyAppHandler();
|
|
void RemoveDummyAppHandler();
|
|
|
|
// BrowserContextKeyedAPI implementation.
|
|
static const char* service_name() { return "ExtensionGCMAppHandler"; }
|
|
static const bool kServiceIsNULLWhileTesting = true;
|
|
|
|
raw_ptr<Profile> profile_;
|
|
|
|
// Listen to extension load, unloaded notifications.
|
|
base::ScopedObservation<ExtensionRegistry, ExtensionRegistryObserver>
|
|
extension_registry_observation_{this};
|
|
|
|
std::unique_ptr<extensions::GcmJsEventRouter> js_event_router_;
|
|
|
|
base::WeakPtrFactory<ExtensionGCMAppHandler> weak_factory_{this};
|
|
};
|
|
|
|
} // namespace extensions
|
|
|
|
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_GCM_APP_HANDLER_H_
|