StyleImage* CSSCursorImageValue::cachedImage(ResourceFetcher* loader, float deviceScaleFactor) { if (m_imageValue->isImageSetValue()) return toCSSImageSetValue(m_imageValue.get())->cachedImageSet(loader, deviceScaleFactor); if (!m_accessedImage) { m_accessedImage = true; // For SVG images we need to lazily substitute in the correct URL. Rather than attempt // to change the URL of the CSSImageValue (which would then change behavior like cssText), // we create an alternate CSSImageValue to use. if (isSVGCursor() && loader && loader->document()) { RefPtrWillBeRawPtr<CSSImageValue> imageValue = toCSSImageValue(m_imageValue.get()); // FIXME: This will fail if the <cursor> element is in a shadow DOM (bug 59827) if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(imageValue->url(), *loader->document())) { RefPtrWillBeRawPtr<CSSImageValue> svgImageValue = CSSImageValue::create(loader->document()->completeURL(cursorElement->href()->currentValue()->value())); svgImageValue->setReferrer(imageValue->referrer()); StyleFetchedImage* cachedImage = svgImageValue->cachedImage(loader); m_image = cachedImage; return cachedImage; } } if (m_imageValue->isImageValue()) m_image = toCSSImageValue(m_imageValue.get())->cachedImage(loader); } if (m_image && m_image->isImageResource()) return toStyleFetchedImage(m_image); return 0; }
bool CSSImageValue::hasFailedOrCanceledSubresources() const { if (!m_image || !m_image->isImageResource()) return false; if (Resource* cachedResource = toStyleFetchedImage(m_image)->cachedImage()) return cachedResource->loadFailedOrCanceled(); return true; }
void LayoutImageResourceStyleImage::initialize(LayoutObject* layoutObject) { LayoutImageResource::initialize(layoutObject); if (m_styleImage->isImageResource()) m_cachedImage = toStyleFetchedImage(m_styleImage)->cachedImage(); m_styleImage->addClient(m_layoutObject); }
void RenderImageResourceStyleImage::initialize(RenderObject* renderer) { RenderImageResource::initialize(renderer); if (m_styleImage->isImageResource()) m_cachedImage = toStyleFetchedImage(m_styleImage)->cachedImage(); m_styleImage->addClient(m_renderer); }
StyleImage* CSSCursorImageValue::cachedImage(ResourceFetcher* loader, float deviceScaleFactor) { if (m_imageValue->isImageSetValue()) return toCSSImageSetValue(m_imageValue.get())->cachedImageSet(loader, deviceScaleFactor); if (!m_accessedImage) { m_accessedImage = true; if (m_imageValue->isImageValue()) m_image = toCSSImageValue(m_imageValue.get())->cachedImage(loader); } if (m_image && m_image->isImageResource()) return toStyleFetchedImage(m_image); return 0; }
StyleFetchedImage* CSSImageValue::cachedImage(ResourceFetcher* fetcher, const ResourceLoaderOptions& options) { ASSERT(fetcher); if (!m_accessedImage) { m_accessedImage = true; FetchRequest request(ResourceRequest(m_absoluteURL), m_initiatorName.isEmpty() ? FetchInitiatorTypeNames::css : m_initiatorName, options); request.mutableResourceRequest().setHTTPReferrer(m_referrer); if (ResourcePtr<ImageResource> cachedImage = fetcher->fetchImage(request)) m_image = StyleFetchedImage::create(cachedImage.get()); } return (m_image && m_image->isImageResource()) ? toStyleFetchedImage(m_image) : 0; }
StyleFetchedImage* CSSImageValue::cachedImage(ResourceFetcher* fetcher, const ResourceLoaderOptions& options) { ASSERT(fetcher); if (!m_accessedImage) { m_accessedImage = true; FetchRequest request(ResourceRequest(m_absoluteURL), m_initiatorName.isEmpty() ? FetchInitiatorTypeNames::css : m_initiatorName, options); if (options.corsEnabled == IsCORSEnabled) request.setCrossOriginAccessControl(fetcher->document()->securityOrigin(), options.allowCredentials, options.credentialsRequested); if (ResourcePtr<ImageResource> cachedImage = fetcher->fetchImage(request)) m_image = StyleFetchedImage::create(cachedImage.get()); } return (m_image && m_image->isImageResource()) ? toStyleFetchedImage(m_image) : 0; }
StyleFetchedImage* CSSImageValue::cachedImage(Document* document, const ResourceLoaderOptions& options) { ASSERT(document); if (!m_accessedImage) { m_accessedImage = true; FetchRequest request(ResourceRequest(m_absoluteURL), m_initiatorName.isEmpty() ? FetchInitiatorTypeNames::css : m_initiatorName, options); request.mutableResourceRequest().setHTTPReferrer(SecurityPolicy::generateReferrer(m_referrer.referrerPolicy, request.url(), m_referrer.referrer)); if (options.corsEnabled == IsCORSEnabled) request.setCrossOriginAccessControl(document->securityOrigin(), options.allowCredentials, options.credentialsRequested); if (ResourcePtr<ImageResource> cachedImage = document->fetcher()->fetchImage(request)) m_image = StyleFetchedImage::create(cachedImage.get()); } return (m_image && m_image->isImageResource()) ? toStyleFetchedImage(m_image) : 0; }
StyleImage* CSSCursorImageValue::cacheImage(const Document& document, float deviceScaleFactor) { if (m_imageValue->isImageSetValue()) return toCSSImageSetValue(*m_imageValue) .cacheImage(document, deviceScaleFactor); if (m_isCachePending) { m_isCachePending = false; // For SVG images we need to lazily substitute in the correct URL. Rather // than attempt to change the URL of the CSSImageValue (which would then // change behavior like cssText), we create an alternate CSSImageValue to // use. if (hasFragmentInURL()) { CSSImageValue* imageValue = toCSSImageValue(m_imageValue.get()); // FIXME: This will fail if the <cursor> element is in a shadow DOM // (http://crbug/59827) if (SVGCursorElement* cursorElement = resourceReferencedByCursorElement(imageValue->url(), document)) { CSSImageValue* svgImageValue = CSSImageValue::create(document.completeURL( cursorElement->href()->currentValue()->value())); svgImageValue->setReferrer(imageValue->referrer()); m_cachedImage = svgImageValue->cacheImage(document); return m_cachedImage.get(); } } if (m_imageValue->isImageValue()) m_cachedImage = toCSSImageValue(*m_imageValue).cacheImage(document); } if (m_cachedImage && m_cachedImage->isImageResource()) return toStyleFetchedImage(m_cachedImage); return nullptr; }
String CSSCursorImageValue::cachedImageURL() const { if (!m_cachedImage || !m_cachedImage->isImageResource()) return String(); return toStyleFetchedImage(m_cachedImage)->cachedImage()->url().getString(); }