| Index: third_party/WebKit/Source/core/css/CSSImageValue.cpp
|
| diff --git a/third_party/WebKit/Source/core/css/CSSImageValue.cpp b/third_party/WebKit/Source/core/css/CSSImageValue.cpp
|
| index aafac4093f5a961ce9cee7482bfb74416ce65e49..dfcdb3f6b11dd54bdf5374f25d2fceb053d00793 100644
|
| --- a/third_party/WebKit/Source/core/css/CSSImageValue.cpp
|
| +++ b/third_party/WebKit/Source/core/css/CSSImageValue.cpp
|
| @@ -28,6 +28,7 @@
|
| #include "core/fetch/ImageResource.h"
|
| #include "core/loader/MixedContentChecker.h"
|
| #include "core/style/StyleFetchedImage.h"
|
| +#include "core/style/StylePendingImage.h"
|
| #include "platform/weborigin/KURL.h"
|
| #include "platform/weborigin/SecurityPolicy.h"
|
|
|
| @@ -37,8 +38,8 @@
|
| : CSSValue(ImageClass)
|
| , m_relativeURL(rawValue)
|
| , m_absoluteURL(url.string())
|
| - , m_isCachePending(!image)
|
| - , m_cachedImage(image)
|
| + , m_image(image)
|
| + , m_accessedImage(image)
|
| {
|
| }
|
|
|
| @@ -46,12 +47,20 @@
|
| {
|
| }
|
|
|
| -StyleFetchedImage* CSSImageValue::cacheImage(Document* document, const ResourceLoaderOptions& options)
|
| +StyleImage* CSSImageValue::cachedOrPendingImage()
|
| +{
|
| + if (!m_image)
|
| + m_image = StylePendingImage::create(this);
|
| +
|
| + return m_image.get();
|
| +}
|
| +
|
| +StyleFetchedImage* CSSImageValue::cachedImage(Document* document, const ResourceLoaderOptions& options)
|
| {
|
| ASSERT(document);
|
|
|
| - if (m_isCachePending) {
|
| - m_isCachePending = false;
|
| + 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));
|
| @@ -60,20 +69,20 @@
|
| request.setCrossOriginAccessControl(document->securityOrigin(), options.allowCredentials, options.credentialsRequested);
|
|
|
| if (ResourcePtr<ImageResource> cachedImage = ImageResource::fetch(request, document->fetcher()))
|
| - m_cachedImage = StyleFetchedImage::create(cachedImage.get(), document);
|
| + m_image = StyleFetchedImage::create(cachedImage.get(), document);
|
| }
|
|
|
| - return (m_cachedImage && m_cachedImage->isImageResource()) ? toStyleFetchedImage(m_cachedImage) : nullptr;
|
| + return (m_image && m_image->isImageResource()) ? toStyleFetchedImage(m_image) : nullptr;
|
| }
|
|
|
| void CSSImageValue::restoreCachedResourceIfNeeded(Document& document)
|
| {
|
| - if (m_isCachePending || !m_cachedImage->isImageResource() || !document.fetcher())
|
| + if (!m_accessedImage || !m_image->isImageResource() || !document.fetcher())
|
| return;
|
| if (document.fetcher()->cachedResource(KURL(ParsedURLString, m_absoluteURL)))
|
| return;
|
|
|
| - ImageResource* resource = m_cachedImage->cachedImage();
|
| + ImageResource* resource = m_image->cachedImage();
|
| if (!resource)
|
| return;
|
|
|
| @@ -85,9 +94,9 @@
|
|
|
| bool CSSImageValue::hasFailedOrCanceledSubresources() const
|
| {
|
| - if (!m_cachedImage || !m_cachedImage->isImageResource())
|
| + if (!m_image || !m_image->isImageResource())
|
| return false;
|
| - if (Resource* cachedResource = toStyleFetchedImage(m_cachedImage)->cachedImage())
|
| + if (Resource* cachedResource = toStyleFetchedImage(m_image)->cachedImage())
|
| return cachedResource->loadFailedOrCanceled();
|
| return true;
|
| }
|
| @@ -105,12 +114,12 @@
|
|
|
| bool CSSImageValue::knownToBeOpaque(const LayoutObject* layoutObject) const
|
| {
|
| - return m_cachedImage ? m_cachedImage->knownToBeOpaque(layoutObject) : false;
|
| + return m_image ? m_image->knownToBeOpaque(layoutObject) : false;
|
| }
|
|
|
| DEFINE_TRACE_AFTER_DISPATCH(CSSImageValue)
|
| {
|
| - visitor->trace(m_cachedImage);
|
| + visitor->trace(m_image);
|
| CSSValue::traceAfterDispatch(visitor);
|
| }
|
|
|
| @@ -121,8 +130,8 @@
|
| if (urlString == m_absoluteURL)
|
| return;
|
| m_absoluteURL = urlString;
|
| - m_isCachePending = true;
|
| - m_cachedImage.clear();
|
| + m_accessedImage = false;
|
| + m_image.clear();
|
| }
|
|
|
| } // namespace blink
|
|
|