Esempio n. 1
0
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;
}
Esempio n. 2
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);
}
Esempio n. 5
0
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;
}
Esempio n. 6
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;
}
Esempio n. 7
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;
}
Esempio n. 8
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;
}
Esempio n. 9
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;
}
Esempio n. 10
0
String CSSCursorImageValue::cachedImageURL() const {
  if (!m_cachedImage || !m_cachedImage->isImageResource())
    return String();
  return toStyleFetchedImage(m_cachedImage)->cachedImage()->url().getString();
}