Commit 12d657da authored by Mikhail Atuchin's avatar Mikhail Atuchin Committed by Commit Bot

[extensions] Fix use-after-free in ExtensionAlarmsTest

1. Fix the destruction order in extensions_tests;
2. Declare the explicit dependency: AlarmManager => ExtensionRegistry.

Change-Id: Ibe734d3b39ba9a0d3dfae7c233c82c77336ec4bd
Reviewed-on: https://chromium-review.googlesource.com/964144Reviewed-by: default avatarKen Rockot <rockot@chromium.org>
Commit-Queue: Mikhail Atuchin <atuchin@yandex-team.ru>
Cr-Commit-Position: refs/heads/master@{#543772}
parent ef89ec39
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "extensions/browser/api/alarms/alarms_api_constants.h" #include "extensions/browser/api/alarms/alarms_api_constants.h"
#include "extensions/browser/event_router.h" #include "extensions/browser/event_router.h"
#include "extensions/browser/extension_registry.h" #include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_registry_factory.h"
#include "extensions/browser/extension_system.h" #include "extensions/browser/extension_system.h"
#include "extensions/browser/state_store.h" #include "extensions/browser/state_store.h"
#include "extensions/common/api/alarms.h" #include "extensions/common/api/alarms.h"
...@@ -231,6 +232,11 @@ static base::LazyInstance< ...@@ -231,6 +232,11 @@ static base::LazyInstance<
BrowserContextKeyedAPIFactory<AlarmManager>>::DestructorAtExit g_factory = BrowserContextKeyedAPIFactory<AlarmManager>>::DestructorAtExit g_factory =
LAZY_INSTANCE_INITIALIZER; LAZY_INSTANCE_INITIALIZER;
template <>
void BrowserContextKeyedAPIFactory<AlarmManager>::DeclareFactoryDependencies() {
DependsOn(ExtensionRegistryFactory::GetInstance());
}
// static // static
BrowserContextKeyedAPIFactory<AlarmManager>* BrowserContextKeyedAPIFactory<AlarmManager>*
AlarmManager::GetFactoryInstance() { AlarmManager::GetFactoryInstance() {
......
...@@ -108,16 +108,16 @@ void ExtensionsTest::TearDown() { ...@@ -108,16 +108,16 @@ void ExtensionsTest::TearDown() {
// Allows individual tests to have BrowserContextKeyedServiceFactory objects // Allows individual tests to have BrowserContextKeyedServiceFactory objects
// as member variables instead of singletons. The individual services will be // as member variables instead of singletons. The individual services will be
// cleaned up before the factories are destroyed. // cleaned up before the factories are destroyed.
BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices(
browser_context_.get());
BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices( BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices(
incognito_context_.get()); incognito_context_.get());
BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices(
browser_context_.get());
extensions_browser_client_.reset(); extensions_browser_client_.reset();
ExtensionsBrowserClient::Set(nullptr); ExtensionsBrowserClient::Set(nullptr);
browser_context_.reset();
incognito_context_.reset(); incognito_context_.reset();
browser_context_.reset();
pref_service_.reset(); pref_service_.reset();
} }
......
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