From b57eeaf0c280ffe412f75972d1aa2cf89fd030ce Mon Sep 17 00:00:00 2001 From: mharanczyk Date: Wed, 22 Jul 2015 02:28:05 -0700 Subject: Avoid creating PasswordsPrivateDelegate when shutting down. BUG=485227 Review URL: https://codereview.chromium.org/1228813006 Cr-Commit-Position: refs/heads/master@{#339855} --- .../extensions/api/passwords_private/passwords_private_api.cc | 9 ++++++--- .../api/passwords_private/passwords_private_delegate_factory.cc | 5 +++-- .../api/passwords_private/passwords_private_delegate_factory.h | 3 ++- .../api/passwords_private/passwords_private_event_router.cc | 9 ++++++--- 4 files changed, 17 insertions(+), 9 deletions(-) (limited to 'chrome/browser/extensions/api/passwords_private') diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc index 64f67f2..4ed7fca 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_api.cc @@ -40,7 +40,8 @@ ExtensionFunction::ResponseAction EXTENSION_FUNCTION_VALIDATE(parameters.get()); PasswordsPrivateDelegate* delegate = - PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context()); + PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(), + true /* create */); delegate->RemoveSavedPassword( parameters->login_pair.origin_url, parameters->login_pair.username); @@ -62,7 +63,8 @@ ExtensionFunction::ResponseAction EXTENSION_FUNCTION_VALIDATE(parameters.get()); PasswordsPrivateDelegate* delegate = - PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context()); + PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(), + true /* create */); delegate->RemovePasswordException(parameters->exception_url); return RespondNow(NoArguments()); @@ -82,7 +84,8 @@ ExtensionFunction::ResponseAction EXTENSION_FUNCTION_VALIDATE(parameters.get()); PasswordsPrivateDelegate* delegate = - PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context()); + PasswordsPrivateDelegateFactory::GetForBrowserContext(browser_context(), + true /* create */); delegate->RequestShowPassword(parameters->login_pair.origin_url, parameters->login_pair.username, diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.cc index c535df1..c73bf7f 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.cc @@ -16,9 +16,10 @@ using content::BrowserContext; // static PasswordsPrivateDelegate* PasswordsPrivateDelegateFactory::GetForBrowserContext( - BrowserContext* browser_context) { + BrowserContext* browser_context, + bool create) { return static_cast( - GetInstance()->GetServiceForBrowserContext(browser_context, true)); + GetInstance()->GetServiceForBrowserContext(browser_context, create)); } // static diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h index e7139a3..a5cc994 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_factory.h @@ -20,7 +20,8 @@ class PasswordsPrivateDelegateFactory : public BrowserContextKeyedServiceFactory { public: static PasswordsPrivateDelegate* GetForBrowserContext( - content::BrowserContext* browser_context); + content::BrowserContext* browser_context, + bool create); static PasswordsPrivateDelegateFactory* GetInstance(); diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.cc index 550fc02..c5565a1 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_event_router.cc @@ -48,8 +48,10 @@ void PasswordsPrivateEventRouter::Shutdown() { event_router_->UnregisterObserver(this); PasswordsPrivateDelegate* delegate = - PasswordsPrivateDelegateFactory::GetForBrowserContext(context_); - delegate->RemoveObserver(this); + PasswordsPrivateDelegateFactory::GetForBrowserContext(context_, + false /* create */); + if (delegate) + delegate->RemoveObserver(this); } void PasswordsPrivateEventRouter::OnListenerAdded( @@ -141,7 +143,8 @@ void PasswordsPrivateEventRouter::StartOrStopListeningForChanges() { should_listen_for_plaintext_password_retrieval; PasswordsPrivateDelegate* delegate = - PasswordsPrivateDelegateFactory::GetForBrowserContext(context_); + PasswordsPrivateDelegateFactory::GetForBrowserContext(context_, + true /* create */); if (should_listen && !listening_) delegate->AddObserver(this); else if (!should_listen && listening_) -- cgit v1.1