Ignore:
Timestamp:
Aug 30, 2016, 8:06:19 AM (9 years ago)
Author:
Antti Koivisto
Message:

Remove StylePendingImage
https://bugs.webkit.org/show_bug.cgi?id=161245

Reviewed by Andreas Kling.

Instances of this confusing type are used as placeholders during style resolution.
We can get rid of it and make "pending" a state of StyleImage. This simplies the code and
will allow further improvements.

  • WebCore.xcodeproj/project.pbxproj:
  • css/CSSCrossfadeValue.cpp:

(WebCore::CSSCrossfadeValue::isPending):
(WebCore::CSSCrossfadeValue::blend):

  • css/CSSCrossfadeValue.h:
  • css/CSSCursorImageValue.cpp:

(WebCore::CSSCursorImageValue::CSSCursorImageValue):
(WebCore::CSSCursorImageValue::~CSSCursorImageValue):

Save the original URL since the underlying CSSImageValue may change.

(WebCore::CSSCursorImageValue::updateCursorElement):
(WebCore::CSSCursorImageValue::cursorElementRemoved):
(WebCore::CSSCursorImageValue::cursorElementChanged):
(WebCore::CSSCursorImageValue::loadImage):
(WebCore::CSSCursorImageValue::styleImage):
(WebCore::CSSCursorImageValue::isSVGCursor):
(WebCore::CSSCursorImageValue::cachedImageURL):
(WebCore::CSSCursorImageValue::updateCachedImage):
(WebCore::CSSCursorImageValue::detachPendingImage): Deleted.
(WebCore::CSSCursorImageValue::cachedImage): Deleted.
(WebCore::CSSCursorImageValue::cachedOrPendingImage): Deleted.
(WebCore::CSSCursorImageValue::clearCachedImage): Deleted.

  • css/CSSCursorImageValue.h:
  • css/CSSFilterImageValue.cpp:

(WebCore::CSSFilterImageValue::isPending):

  • css/CSSFilterImageValue.h:
  • css/CSSImageGeneratorValue.cpp:

(WebCore::CSSImageGeneratorValue::isPending):
(WebCore::CSSImageGeneratorValue::subimageIsPending):
(WebCore::CSSImageGeneratorValue::cachedImageForCSSValue):

  • css/CSSImageGeneratorValue.h:
  • css/CSSImageSetValue.cpp:

(WebCore::CSSImageSetValue::~CSSImageSetValue):
(WebCore::CSSImageSetValue::loadBestFitImage):
(WebCore::CSSImageSetValue::styleImage):
(WebCore::CSSImageSetValue::traverseSubresources):
(WebCore::CSSImageSetValue::detachPendingImage): Deleted.
(WebCore::CSSImageSetValue::bestFitImage): Deleted.
(WebCore::CSSImageSetValue::cachedOrPendingImageSet): Deleted.

  • css/CSSImageSetValue.h:
  • css/CSSImageValue.cpp:

(WebCore::CSSImageValue::CSSImageValue):
(WebCore::CSSImageValue::~CSSImageValue):
(WebCore::CSSImageValue::isPending):
(WebCore::CSSImageValue::styleImage):
(WebCore::CSSImageValue::loadImage):
(WebCore::CSSImageValue::traverseSubresources):
(WebCore::CSSImageValue::detachPendingImage): Deleted.
(WebCore::CSSImageValue::cachedOrPendingImage): Deleted.
(WebCore::CSSImageValue::cachedImage): Deleted.

  • css/CSSImageValue.h:

(WebCore::CSSImageValue::create):

  • css/StyleResolver.cpp:

(WebCore::StyleResolver::cachedOrPendingFromValue):
(WebCore::StyleResolver::generatedOrPendingFromValue):
(WebCore::StyleResolver::setOrPendingFromValue):
(WebCore::StyleResolver::cursorOrPendingFromValue):

  • page/PageSerializer.cpp:

(WebCore::PageSerializer::retrieveResourcesForProperties):

  • page/animation/CSSPropertyAnimation.cpp:

(WebCore::blendFilter):
(WebCore::crossfadeBlend):

  • rendering/RenderImageResourceStyleImage.cpp:

(WebCore::RenderImageResourceStyleImage::image):

  • rendering/shapes/ShapeOutsideInfo.cpp:

(WebCore::ShapeOutsideInfo::createShapeForImage):

  • rendering/style/StyleCachedImage.cpp:

(WebCore::StyleCachedImage::StyleCachedImage):
(WebCore::StyleCachedImage::~StyleCachedImage):
(WebCore::StyleCachedImage::setCachedImage):
(WebCore::StyleCachedImage::cssValue):
(WebCore::StyleCachedImage::canRender):
(WebCore::StyleCachedImage::isPending):
(WebCore::StyleCachedImage::isLoaded):
(WebCore::StyleCachedImage::errorOccurred):
(WebCore::StyleCachedImage::imageSize):
(WebCore::StyleCachedImage::imageHasRelativeWidth):
(WebCore::StyleCachedImage::imageHasRelativeHeight):
(WebCore::StyleCachedImage::computeIntrinsicDimensions):
(WebCore::StyleCachedImage::usesImageContainerSize):
(WebCore::StyleCachedImage::setContainerSizeForRenderer):
(WebCore::StyleCachedImage::addClient):
(WebCore::StyleCachedImage::removeClient):
(WebCore::StyleCachedImage::image):
(WebCore::StyleCachedImage::knownToBeOpaque):

  • rendering/style/StyleCachedImage.h:
  • rendering/style/StyleGeneratedImage.cpp:

(WebCore::StyleGeneratedImage::isPending):

  • rendering/style/StyleGeneratedImage.h:
  • rendering/style/StyleImage.h:

(WebCore::StyleImage::isCachedImage):
(WebCore::StyleImage::StyleImage):
(WebCore::StyleImage::canRender): Deleted.
(WebCore::StyleImage::isPendingImage): Deleted.

  • rendering/style/StylePendingImage.h: Removed.
  • style/StylePendingResources.cpp:

(WebCore::Style::loadPendingImage):
(WebCore::Style::loadPendingImages):

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/css/CSSImageSetValue.cpp

    r204566 r205181  
    3737#include "Page.h"
    3838#include "StyleCachedImage.h"
    39 #include "StylePendingImage.h"
    4039#include <wtf/text/StringBuilder.h>
    4140
     
    4948}
    5049
    51 inline void CSSImageSetValue::detachPendingImage()
    52 {
    53     if (is<StylePendingImage>(m_image.get()))
    54         downcast<StylePendingImage>(*m_image).detachFromCSSValue();
    55 }
    56 
    5750CSSImageSetValue::~CSSImageSetValue()
    5851{
    59     detachPendingImage();
    60 
    61     if (is<StyleCachedImage>(m_image.get()))
    62         downcast<StyleCachedImage>(*m_image).detachFromCSSValue();
     52    if (m_image)
     53        m_image->detachFromCSSValue();
    6354}
    6455
     
    9990}
    10091
    101 StyleCachedImage* CSSImageSetValue::bestFitImage(CachedResourceLoader& loader, const ResourceLoaderOptions& options)
     92void CSSImageSetValue::loadBestFitImage(CachedResourceLoader& loader, const ResourceLoaderOptions& options)
    10293{
    10394    Document* document = loader.document();
     
    110101        fillImageSet();
    111102
    112     if (!m_accessedBestFitImage) {
    113         // FIXME: In the future, we want to take much more than deviceScaleFactor into acount here.
    114         // All forms of scale should be included: Page::pageScaleFactor(), Frame::pageZoomFactor(),
    115         // and any CSS transforms. https://bugs.webkit.org/show_bug.cgi?id=81698
    116         ImageWithScale image = bestImageForScaleFactor();
    117         CachedResourceRequest request(ResourceRequest(document->completeURL(image.imageURL)), options);
    118         request.setInitiator(cachedResourceRequestInitiators().css);
    119         if (options.mode == FetchOptions::Mode::Cors) {
    120             ASSERT(document->securityOrigin());
    121             updateRequestForAccessControl(request.mutableResourceRequest(), *document->securityOrigin(), options.allowCredentials);
    122         }
    123         if (CachedResourceHandle<CachedImage> cachedImage = loader.requestImage(request)) {
    124             detachPendingImage();
    125             m_image = StyleCachedImage::createForImageSet(cachedImage.get(), image.scaleFactor, *this);
    126             m_accessedBestFitImage = true;
    127         }
     103    if (m_accessedBestFitImage)
     104        return;
     105    // FIXME: In the future, we want to take much more than deviceScaleFactor into acount here.
     106    // All forms of scale should be included: Page::pageScaleFactor(), Frame::pageZoomFactor(),
     107    // and any CSS transforms. https://bugs.webkit.org/show_bug.cgi?id=81698
     108    ImageWithScale image = bestImageForScaleFactor();
     109    CachedResourceRequest request(ResourceRequest(document->completeURL(image.imageURL)), options);
     110    request.setInitiator(cachedResourceRequestInitiators().css);
     111    if (options.mode == FetchOptions::Mode::Cors) {
     112        ASSERT(document->securityOrigin());
     113        updateRequestForAccessControl(request.mutableResourceRequest(), *document->securityOrigin(), options.allowCredentials);
    128114    }
    129 
    130     return is<StyleCachedImage>(m_image.get()) ? downcast<StyleCachedImage>(m_image.get()) : nullptr;
     115    if (CachedResourceHandle<CachedImage> cachedImage = loader.requestImage(request)) {
     116        styleImage(*document).setCachedImage(*cachedImage, image.scaleFactor);
     117        m_accessedBestFitImage = true;
     118    }
    131119}
    132120
    133 StyleImage* CSSImageSetValue::cachedOrPendingImageSet(const Document& document)
     121StyleCachedImage& CSSImageSetValue::styleImage(const Document& document)
    134122{
    135123    if (!m_image)
    136         m_image = StylePendingImage::create(this);
    137     else if (!m_image->isPendingImage()) {
     124        m_image = StyleCachedImage::create(*this);
     125    else if (!m_image->isPending()) {
    138126        float deviceScaleFactor = 1;
    139127        if (Page* page = document.page())
     
    143131        if (deviceScaleFactor != m_scaleFactor) {
    144132            m_accessedBestFitImage = false;
    145             m_image = StylePendingImage::create(this);
     133            m_image->detachFromCSSValue();
     134            m_image = StyleCachedImage::create(*this);
    146135        }
    147136    }
    148137
    149     return m_image.get();
     138    return *m_image;
    150139}
    151140
     
    182171bool CSSImageSetValue::traverseSubresources(const std::function<bool (const CachedResource&)>& handler) const
    183172{
    184     if (!is<StyleCachedImage>(m_image.get()))
     173    if (!m_image)
    185174        return false;
    186     CachedImage* cachedResource = downcast<StyleCachedImage>(*m_image).cachedImage();
    187     ASSERT(cachedResource);
     175    CachedImage* cachedResource = m_image->cachedImage();
     176    if (!cachedResource)
     177        return false;
    188178    return handler(*cachedResource);
    189179}
Note: See TracChangeset for help on using the changeset viewer.