Changeset 205181 in webkit for trunk/Source/WebCore/css/CSSImageSetValue.cpp
- Timestamp:
- Aug 30, 2016, 8:06:19 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/css/CSSImageSetValue.cpp
r204566 r205181 37 37 #include "Page.h" 38 38 #include "StyleCachedImage.h" 39 #include "StylePendingImage.h"40 39 #include <wtf/text/StringBuilder.h> 41 40 … … 49 48 } 50 49 51 inline void CSSImageSetValue::detachPendingImage()52 {53 if (is<StylePendingImage>(m_image.get()))54 downcast<StylePendingImage>(*m_image).detachFromCSSValue();55 }56 57 50 CSSImageSetValue::~CSSImageSetValue() 58 51 { 59 detachPendingImage(); 60 61 if (is<StyleCachedImage>(m_image.get())) 62 downcast<StyleCachedImage>(*m_image).detachFromCSSValue(); 52 if (m_image) 53 m_image->detachFromCSSValue(); 63 54 } 64 55 … … 99 90 } 100 91 101 StyleCachedImage* CSSImageSetValue::bestFitImage(CachedResourceLoader& loader, const ResourceLoaderOptions& options)92 void CSSImageSetValue::loadBestFitImage(CachedResourceLoader& loader, const ResourceLoaderOptions& options) 102 93 { 103 94 Document* document = loader.document(); … … 110 101 fillImageSet(); 111 102 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); 128 114 } 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 } 131 119 } 132 120 133 Style Image* CSSImageSetValue::cachedOrPendingImageSet(const Document& document)121 StyleCachedImage& CSSImageSetValue::styleImage(const Document& document) 134 122 { 135 123 if (!m_image) 136 m_image = Style PendingImage::create(this);137 else if (!m_image->isPending Image()) {124 m_image = StyleCachedImage::create(*this); 125 else if (!m_image->isPending()) { 138 126 float deviceScaleFactor = 1; 139 127 if (Page* page = document.page()) … … 143 131 if (deviceScaleFactor != m_scaleFactor) { 144 132 m_accessedBestFitImage = false; 145 m_image = StylePendingImage::create(this); 133 m_image->detachFromCSSValue(); 134 m_image = StyleCachedImage::create(*this); 146 135 } 147 136 } 148 137 149 return m_image.get();138 return *m_image; 150 139 } 151 140 … … 182 171 bool CSSImageSetValue::traverseSubresources(const std::function<bool (const CachedResource&)>& handler) const 183 172 { 184 if (! is<StyleCachedImage>(m_image.get()))173 if (!m_image) 185 174 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; 188 178 return handler(*cachedResource); 189 179 }
Note:
See TracChangeset
for help on using the changeset viewer.