Index: components/keyed_service/core/keyed_service_factory.cc |
diff --git a/components/keyed_service/core/keyed_service_factory.cc b/components/keyed_service/core/keyed_service_factory.cc |
index 1417bab80a39e88278147bd333e60854f13f5890..17d694f1fafb100c9100881f23debbd50fde2363 100644 |
--- a/components/keyed_service/core/keyed_service_factory.cc |
+++ b/components/keyed_service/core/keyed_service_factory.cc |
@@ -22,6 +22,7 @@ KeyedServiceFactory::~KeyedServiceFactory() { |
void KeyedServiceFactory::SetTestingFactory( |
base::SupportsUserData* context, |
TestingFactoryFunction testing_factory) { |
+ context = GetUnderlyingContext(context); |
Elliot Glaysher
2015/04/21 17:54:32
This seems like it could be very error prone. Is t
sdefresne
2015/04/22 08:53:15
Yes, all calls to GetUnderlyingContext/GetOriginal
Elliot Glaysher
2015/04/22 17:34:07
Thanks, that sounds like a good plan.
|
// Destroying the context may cause us to lose data about whether |context| |
// has our preferences registered on it (since the context object itself |
// isn't dead). See if we need to readd it once we've gone through normal |
@@ -52,6 +53,7 @@ KeyedService* KeyedServiceFactory::SetTestingFactoryAndUse( |
base::SupportsUserData* context, |
TestingFactoryFunction testing_factory) { |
DCHECK(testing_factory); |
+ context = GetUnderlyingContext(context); |
SetTestingFactory(context, testing_factory); |
return GetServiceForContext(context, true); |
} |
@@ -60,6 +62,7 @@ KeyedService* KeyedServiceFactory::GetServiceForContext( |
base::SupportsUserData* context, |
bool create) { |
TRACE_EVENT0("browser,startup", "KeyedServiceFactory::GetServiceForContext"); |
+ context = GetUnderlyingContext(context); |
context = GetContextToUse(context); |
if (!context) |
return nullptr; |
@@ -95,11 +98,13 @@ KeyedService* KeyedServiceFactory::GetServiceForContext( |
void KeyedServiceFactory::Associate(base::SupportsUserData* context, |
KeyedService* service) { |
+ context = GetUnderlyingContext(context); |
DCHECK(!ContainsKey(mapping_, context)); |
mapping_.insert(std::make_pair(context, service)); |
} |
void KeyedServiceFactory::Disassociate(base::SupportsUserData* context) { |
+ context = GetUnderlyingContext(context); |
const auto& it = mapping_.find(context); |
if (it != mapping_.end()) { |
delete it->second; |
@@ -108,12 +113,14 @@ void KeyedServiceFactory::Disassociate(base::SupportsUserData* context) { |
} |
void KeyedServiceFactory::ContextShutdown(base::SupportsUserData* context) { |
+ context = GetUnderlyingContext(context); |
const auto& it = mapping_.find(context); |
if (it != mapping_.end() && it->second) |
it->second->Shutdown(); |
} |
void KeyedServiceFactory::ContextDestroyed(base::SupportsUserData* context) { |
+ context = GetUnderlyingContext(context); |
Disassociate(context); |
// For unit tests, we also remove the factory function both so we don't |
@@ -127,13 +134,16 @@ void KeyedServiceFactory::ContextDestroyed(base::SupportsUserData* context) { |
void KeyedServiceFactory::SetEmptyTestingFactory( |
base::SupportsUserData* context) { |
+ context = GetUnderlyingContext(context); |
SetTestingFactory(context, nullptr); |
} |
bool KeyedServiceFactory::HasTestingFactory(base::SupportsUserData* context) { |
+ context = GetUnderlyingContext(context); |
return testing_factories_.find(context) != testing_factories_.end(); |
} |
void KeyedServiceFactory::CreateServiceNow(base::SupportsUserData* context) { |
+ context = GetUnderlyingContext(context); |
GetServiceForContext(context, true); |
} |