Bug 1290218 Part 7: Bypass XULPrototypeCache (which is a singleton) for non-Gecko Loaders.
MozReview-Commit-ID: 852rcD2bdYL
--- a/layout/style/Loader.cpp
+++ b/layout/style/Loader.cpp
@@ -1111,17 +1111,20 @@ Loader::CreateSheet(nsIURI* aURI,
// XXXheycam Cached sheets currently must be CSSStyleSheets.
if (aURI && GetStyleBackendType() == StyleBackendType::Gecko) {
aSheetState = eSheetComplete;
RefPtr<StyleSheet> sheet;
// First, the XUL cache
#ifdef MOZ_XUL
- if (IsChromeURI(aURI)) {
+ // The XUL cache is a singleton that only holds Gecko-style sheets, so
+ // only use the cache if the loader is also Gecko.
+ if (IsChromeURI(aURI) &&
+ GetStyleBackendType() == StyleBackendType::Gecko) {
nsXULPrototypeCache* cache = nsXULPrototypeCache::GetInstance();
if (cache) {
if (cache->IsEnabled()) {
sheet = cache->GetStyleSheet(aURI);
LOG((" From XUL cache: %p", sheet.get()));
}
}
}
@@ -1955,17 +1958,18 @@ Loader::DoSheetComplete(SheetLoadData* a
while (data) {
if (data->mSheet->GetParentSheet() || data->mSheet->GetOwnerNode()) {
sheet = data->mSheet->AsGecko();
break;
}
data = data->mNext;
}
#ifdef MOZ_XUL
- if (IsChromeURI(aLoadData->mURI)) {
+ if (IsChromeURI(aLoadData->mURI) &&
+ GetStyleBackendType() == StyleBackendType::Gecko) {
nsXULPrototypeCache* cache = nsXULPrototypeCache::GetInstance();
if (cache && cache->IsEnabled()) {
if (!cache->GetStyleSheet(aLoadData->mURI)) {
LOG((" Putting sheet in XUL prototype cache"));
NS_ASSERTION(sheet->IsComplete(),
"Should only be caching complete sheets");
cache->PutStyleSheet(sheet);
}