Commit f98182e8 authored by Evan Stade's avatar Evan Stade Committed by Commit Bot

Remove NOTIFICATION_PROFILE_DESTROYED from InputImeAPI

It's already a KeyedService, so it can rely on Shutdown().

Also add some missing dependencies on other KeyedServices.

Bug: 268984
Change-Id: I9c1cdb190bf0858efe2054e883fd520bbeabdb64
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1873275Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Commit-Queue: Evan Stade <estade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#708320}
parent e3e58250
......@@ -8,9 +8,6 @@
#include <utility>
#include "base/lazy_instance.h"
#include "chrome/browser/chrome_notification_types.h"
#include "content/public/browser/notification_registrar.h"
#include "content/public/browser/notification_service.h"
#include "extensions/browser/extension_registry.h"
#include "ui/base/ime/ime_bridge.h"
......@@ -268,7 +265,6 @@ InputImeEventRouterFactory* InputImeEventRouterFactory::GetInstance() {
}
InputImeEventRouterFactory::InputImeEventRouterFactory() = default;
InputImeEventRouterFactory::~InputImeEventRouterFactory() = default;
InputImeEventRouter* InputImeEventRouterFactory::GetRouter(Profile* profile) {
......@@ -426,23 +422,15 @@ InputImeAPI::InputImeAPI(content::BrowserContext* context)
EventRouter* event_router = EventRouter::Get(browser_context_);
event_router->RegisterObserver(this, input_ime::OnFocus::kEventName);
registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED,
content::NotificationService::AllSources());
}
void InputImeAPI::Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
DCHECK_EQ(chrome::NOTIFICATION_PROFILE_DESTROYED, type);
extensions::InputImeEventRouterFactory::GetInstance()->RemoveProfile(
content::Source<Profile>(source).ptr());
}
InputImeAPI::~InputImeAPI() = default;
void InputImeAPI::Shutdown() {
extension_registry_observer_.RemoveAll();
InputImeEventRouterFactory::GetInstance()->RemoveProfile(
Profile::FromBrowserContext(browser_context_));
EventRouter::Get(browser_context_)->UnregisterObserver(this);
registrar_.RemoveAll();
if (observer_ && ui::IMEBridge::Get()) {
ui::IMEBridge::Get()->RemoveObserver(observer_.get());
}
......@@ -459,8 +447,7 @@ BrowserContextKeyedAPIFactory<InputImeAPI>* InputImeAPI::GetFactoryInstance() {
InputImeEventRouter* GetInputImeEventRouter(Profile* profile) {
if (!profile)
return nullptr;
return extensions::InputImeEventRouterFactory::GetInstance()->GetRouter(
profile);
return InputImeEventRouterFactory::GetInstance()->GetRouter(profile);
}
} // namespace extensions
......@@ -18,11 +18,11 @@
#include "chrome/browser/ui/input_method/input_method_engine_base.h"
#include "chrome/common/extensions/api/input_ime.h"
#include "components/keyed_service/core/keyed_service.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "extensions/browser/browser_context_keyed_api_factory.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/event_router_factory.h"
#include "extensions/browser/extension_function.h"
#include "extensions/browser/extension_registry_factory.h"
#include "extensions/browser/extension_registry_observer.h"
#include "extensions/common/extension.h"
#include "ui/base/ime/ime_bridge_observer.h"
......@@ -177,15 +177,14 @@ class InputImeSendKeyEventsFunction : public ExtensionFunction {
class InputImeAPI : public BrowserContextKeyedAPI,
public ExtensionRegistryObserver,
public EventRouter::Observer,
public content::NotificationObserver {
public EventRouter::Observer {
public:
explicit InputImeAPI(content::BrowserContext* context);
~InputImeAPI() override;
// BrowserContextKeyedAPI implementation.
static BrowserContextKeyedAPIFactory<InputImeAPI>* GetFactoryInstance();
// BrowserContextKeyedAPI implementation.
void Shutdown() override;
// ExtensionRegistryObserver implementation.
......@@ -198,11 +197,6 @@ class InputImeAPI : public BrowserContextKeyedAPI,
// EventRouter::Observer implementation.
void OnListenerAdded(const EventListenerInfo& details) override;
// content::NotificationObserver:
void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) override;
private:
friend class BrowserContextKeyedAPIFactory<InputImeAPI>;
InputImeEventRouter* input_ime_event_router();
......@@ -219,11 +213,18 @@ class InputImeAPI : public BrowserContextKeyedAPI,
ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
extension_registry_observer_{this};
content::NotificationRegistrar registrar_;
std::unique_ptr<ui::IMEBridgeObserver> observer_;
};
template <>
struct BrowserContextFactoryDependencies<InputImeAPI> {
static void DeclareFactoryDependencies(
BrowserContextKeyedAPIFactory<InputImeAPI>* factory) {
factory->DependsOn(EventRouterFactory::GetInstance());
factory->DependsOn(ExtensionRegistryFactory::GetInstance());
}
};
InputImeEventRouter* GetInputImeEventRouter(Profile* profile);
} // namespace extensions
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment