blob: 37f43ceea50f5379616b49aca03a629f7553a43b [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CSSStyleImageValue_h
#define CSSStyleImageValue_h
#include "core/CoreExport.h"
#include "core/css/CSSImageValue.h"
#include "core/css/CSSImageValue.h"
#include "core/css/cssom/CSSResourceValue.h"
#include "core/css/cssom/CSSStyleValue.h"
#include "core/fetch/ImageResource.h"
#include "core/html/canvas/CanvasImageSource.h"
#include "core/imagebitmap/ImageBitmapSource.h"
#include "core/style/StyleImage.h"
namespace blink {
class CORE_EXPORT CSSStyleImageValue : public CSSResourceValue, public CanvasImageSource {
WTF_MAKE_NONCOPYABLE(CSSStyleImageValue);
DEFINE_WRAPPERTYPEINFO();
public:
virtual ~CSSStyleImageValue() { }
StyleValueType type() const override { return ImageType; }
double intrinsicWidth(bool& isNull) const;
double intrinsicHeight(bool& isNull) const;
double intrinsicRatio(bool& isNull);
// CanvasImageSource
bool isCSSImageValue() const final { return true; }
int sourceWidth() final;
int sourceHeight() final;
bool wouldTaintOrigin(SecurityOrigin* destinationSecurityOrigin) const final
{
return true;
}
FloatSize elementSize(const FloatSize& defaultObjectSize) const final;
PassRefPtr<Image> getSourceImageForCanvas(SourceImageStatus*, AccelerationHint, SnapshotReason, const FloatSize&) const final
{
return image();
}
bool isAccelerated() const override;
DEFINE_INLINE_VIRTUAL_TRACE()
{
visitor->trace(m_imageValue);
CSSStyleValue::trace(visitor);
CSSResourceValue::trace(visitor);
}
protected:
CSSStyleImageValue(const CSSImageValue* imageValue)
: m_imageValue(imageValue)
{
}
Member<const CSSImageValue> m_imageValue;
virtual LayoutSize imageLayoutSize() const
{
DCHECK(!m_imageValue->isCachePending());
return m_imageValue->cachedImage()->cachedImage()->imageSize(DoNotRespectImageOrientation, 1, ImageResource::IntrinsicSize);
}
virtual bool isCachePending() const { return m_imageValue->isCachePending(); }
Resource::Status status() const override
{
if (isCachePending())
return Resource::Status::NotStarted;
return m_imageValue->cachedImage()->cachedImage()->getStatus();
}
private:
PassRefPtr<Image> image() const;
};
} // namespace blink
#endif // CSSResourceValue_h