Beispiel #1
0
std::pair<CachedImage*, float> CSSImageSetValue::loadBestFitImage(CachedResourceLoader& loader, const ResourceLoaderOptions& options)
{
    Document* document = loader.document();
    updateDeviceScaleFactor(*document);

    if (!m_accessedBestFitImage) {
        m_accessedBestFitImage = true;

        // FIXME: In the future, we want to take much more than deviceScaleFactor into acount here.
        // All forms of scale should be included: Page::pageScaleFactor(), Frame::pageZoomFactor(),
        // and any CSS transforms. https://bugs.webkit.org/show_bug.cgi?id=81698
        ImageWithScale image = bestImageForScaleFactor();
        CachedResourceRequest request(ResourceRequest(document->completeURL(image.imageURL)), options);
        request.setInitiator(cachedResourceRequestInitiators().css);
        if (options.mode == FetchOptions::Mode::Cors) {
            ASSERT(document->securityOrigin());
            updateRequestForAccessControl(request.mutableResourceRequest(), *document->securityOrigin(), options.allowCredentials);
        }
        m_cachedImage = loader.requestImage(request);
        m_bestFitImageScaleFactor = image.scaleFactor;
    }
    return { m_cachedImage.get(), m_bestFitImageScaleFactor };
}