CachedCSSStyleSheet* CachedResourceLoader::requestUserCSSStyleSheet(ResourceRequest& request, const String& charset) { KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(request.url()); if (CachedResource* existing = memoryCache()->resourceForURL(url)) { if (existing->type() == CachedResource::CSSStyleSheet) return static_cast<CachedCSSStyleSheet*>(existing); memoryCache()->remove(existing); } if (url.string() != request.url()) request.setURL(url); CachedCSSStyleSheet* userSheet = new CachedCSSStyleSheet(request, charset); bool inCache = memoryCache()->add(userSheet); if (!inCache) userSheet->setInCache(true); userSheet->load(this, ResourceLoaderOptions(DoNotSendCallbacks, SniffContent, BufferData, AllowStoredCredentials, AskClientForCrossOriginCredentials, SkipSecurityCheck)); if (!inCache) userSheet->setInCache(false); return userSheet; }
CachedCSSStyleSheet* CachedResourceLoader::requestUserCSSStyleSheet(ResourceRequest& request, const String& charset) { KURL url = MemoryCache::removeFragmentIdentifierIfNeeded(request.url()); if (CachedResource* existing = memoryCache()->resourceForURL(url)) { if (existing->type() == CachedResource::CSSStyleSheet) return static_cast<CachedCSSStyleSheet*>(existing); memoryCache()->remove(existing); } if (url.string() != request.url()) request.setURL(url); CachedCSSStyleSheet* userSheet = new CachedCSSStyleSheet(request, charset); bool inCache = memoryCache()->add(userSheet); if (!inCache) userSheet->setInCache(true); userSheet->load(this, /*incremental*/ false, SkipSecurityCheck, /*sendResourceLoadCallbacks*/ false); if (!inCache) userSheet->setInCache(false); return userSheet; }
void HTMLLinkElement::initializeStyleSheet(Ref<StyleSheetContents>&& styleSheet, const CachedCSSStyleSheet& cachedStyleSheet) { // FIXME: originClean should be turned to false except if fetch mode is CORS. std::optional<bool> originClean; if (cachedStyleSheet.options().mode == FetchOptions::Mode::Cors) originClean = cachedStyleSheet.isCORSSameOrigin(); m_sheet = CSSStyleSheet::create(WTFMove(styleSheet), *this, originClean); m_sheet->setMediaQueries(MediaQuerySet::create(m_media)); m_sheet->setTitle(title()); }
CachedCSSStyleSheet* DocLoader::requestCSSStyleSheet(const String& url, const String& charset, bool isUserStyleSheet) { // FIXME: Passing true for "skipCanLoadCheck" here in the isUserStyleSheet case won't have any effect // if this resource is already in the cache. It's theoretically possible that what's in the cache already // is a load that failed because of the canLoad check. Probably not an issue in practice. CachedCSSStyleSheet *sheet = static_cast<CachedCSSStyleSheet*>(requestResource(CachedResource::CSSStyleSheet, url, &charset, isUserStyleSheet, !isUserStyleSheet)); // A user style sheet can outlive its DocLoader so don't store any pointers to it if (sheet && isUserStyleSheet) { sheet->setDocLoader(0); m_docResources.remove(sheet->url()); } return sheet; }