summaryrefslogtreecommitdiff
path: root/Source/WebCore/css/CSSImageValue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/css/CSSImageValue.cpp')
-rw-r--r--Source/WebCore/css/CSSImageValue.cpp75
1 files changed, 26 insertions, 49 deletions
diff --git a/Source/WebCore/css/CSSImageValue.cpp b/Source/WebCore/css/CSSImageValue.cpp
index 544025719..1430c89b0 100644
--- a/Source/WebCore/css/CSSImageValue.cpp
+++ b/Source/WebCore/css/CSSImageValue.cpp
@@ -22,93 +22,70 @@
#include "CSSImageValue.h"
#include "CSSCursorImageValue.h"
-#include "CSSParser.h"
+#include "CSSMarkup.h"
+#include "CSSPrimitiveValue.h"
#include "CSSValueKeywords.h"
#include "CachedImage.h"
#include "CachedResourceLoader.h"
#include "CachedResourceRequest.h"
#include "CachedResourceRequestInitiators.h"
#include "CrossOriginAccessControl.h"
+#include "DeprecatedCSSOMPrimitiveValue.h"
#include "Document.h"
#include "Element.h"
-#include "MemoryCache.h"
-#include "StyleCachedImage.h"
-#include "StylePendingImage.h"
namespace WebCore {
-CSSImageValue::CSSImageValue(const String& url)
+CSSImageValue::CSSImageValue(URL&& url)
: CSSValue(ImageClass)
- , m_url(url)
+ , m_url(WTFMove(url))
, m_accessedImage(false)
{
}
-CSSImageValue::CSSImageValue(const String& url, StyleImage* image)
+CSSImageValue::CSSImageValue(CachedImage& image)
: CSSValue(ImageClass)
- , m_url(url)
- , m_image(image)
+ , m_url(image.url())
+ , m_cachedImage(&image)
, m_accessedImage(true)
{
}
-inline void CSSImageValue::detachPendingImage()
-{
- if (m_image && m_image->isPendingImage())
- static_cast<StylePendingImage&>(*m_image).detachFromCSSValue();
-}
CSSImageValue::~CSSImageValue()
{
- detachPendingImage();
}
-StyleImage* CSSImageValue::cachedOrPendingImage()
+bool CSSImageValue::isPending() const
{
- if (!m_image)
- m_image = StylePendingImage::create(this);
-
- return m_image.get();
+ return !m_accessedImage;
}
-StyleCachedImage* CSSImageValue::cachedImage(CachedResourceLoader* loader, const ResourceLoaderOptions& options)
+CachedImage* CSSImageValue::loadImage(CachedResourceLoader& loader, const ResourceLoaderOptions& options)
{
- ASSERT(loader);
-
if (!m_accessedImage) {
m_accessedImage = true;
- CachedResourceRequest request(ResourceRequest(loader->document()->completeURL(m_url)), options);
+ CachedResourceRequest request(ResourceRequest(loader.document()->completeURL(m_url.string())), options);
if (m_initiatorName.isEmpty())
request.setInitiator(cachedResourceRequestInitiators().css);
else
request.setInitiator(m_initiatorName);
- if (options.requestOriginPolicy == PotentiallyCrossOriginEnabled)
- updateRequestForAccessControl(request.mutableResourceRequest(), loader->document()->securityOrigin(), options.allowCredentials);
-
- if (CachedResourceHandle<CachedImage> cachedImage = loader->requestImage(request)) {
- detachPendingImage();
- m_image = StyleCachedImage::create(cachedImage.get());
+ if (options.mode == FetchOptions::Mode::Cors) {
+ ASSERT(loader.document());
+ request.updateForAccessControl(*loader.document());
}
+ m_cachedImage = loader.requestImage(WTFMove(request));
}
-
- return (m_image && m_image->isCachedImage()) ? static_cast<StyleCachedImage*>(m_image.get()) : 0;
+ return m_cachedImage.get();
}
-StyleCachedImage* CSSImageValue::cachedImage(CachedResourceLoader* loader)
+bool CSSImageValue::traverseSubresources(const std::function<bool (const CachedResource&)>& handler) const
{
- return cachedImage(loader, CachedResourceLoader::defaultCachedResourceOptions());
-}
-
-bool CSSImageValue::hasFailedOrCanceledSubresources() const
-{
- if (!m_image || !m_image->isCachedImage())
+ if (!m_cachedImage)
return false;
- CachedResource* cachedResource = static_cast<StyleCachedImage*>(m_image.get())->cachedImage();
- if (!cachedResource)
- return true;
- return cachedResource->loadFailedOrCanceled();
+ return handler(*m_cachedImage);
}
bool CSSImageValue::equals(const CSSImageValue& other) const
@@ -118,20 +95,20 @@ bool CSSImageValue::equals(const CSSImageValue& other) const
String CSSImageValue::customCSSText() const
{
- return "url(" + quoteCSSURLIfNeeded(m_url) + ')';
+ return serializeURL(m_url);
}
-PassRefPtr<CSSValue> CSSImageValue::cloneForCSSOM() const
+Ref<DeprecatedCSSOMValue> CSSImageValue::createDeprecatedCSSOMWrapper() const
{
// NOTE: We expose CSSImageValues as URI primitive values in CSSOM to maintain old behavior.
- RefPtr<CSSPrimitiveValue> uriValue = CSSPrimitiveValue::create(m_url, CSSPrimitiveValue::CSS_URI);
- uriValue->setCSSOMSafe();
- return uriValue.release();
+ return DeprecatedCSSOMPrimitiveValue::create(CSSPrimitiveValue::create(m_url, CSSPrimitiveValue::CSS_URI));
}
bool CSSImageValue::knownToBeOpaque(const RenderElement* renderer) const
{
- return m_image ? m_image->knownToBeOpaque(renderer) : false;
+ if (!m_cachedImage)
+ return false;
+ return m_cachedImage->currentFrameKnownToBeOpaque(renderer);
}
} // namespace WebCore