Looks like there are data races possible in the ManagedValueStoreCache::ExtensionTracker implementation.
Some of its methods don't do anything if ExtensionSystem::ready is not signaled, and others are executed asynchronously as callbacks triggered by ExtensionSystem::ready()->Post. This results in a potential race when ExtensionSystem::ready has just been signaled: while the latter ones may be still working asynchronously, the former ones may be called synchronously, and wrongly assume that the asynchronous stuff is already done.
For example, the OnExtensionUninstalled method may call SchemaRegistry::UnregisterComponent with a component that was not previously registered within SchemaRegistry, because the registration that is triggered by the OnExtensionsReady method may still not finish its work by that time (it's working in a background blocking thread). This results in DCHECK in SchemaRegistry.
There are maybe other cases when the race can be triggered, but we are hitting this exact race while working on our CL.
Comment 1 by asargent@chromium.org
, Sep 2 2016Status: Available (was: Untriaged)