// 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 CSSPaintValue_h
#define CSSPaintValue_h

#include "core/css/CSSCustomIdentValue.h"
#include "core/css/CSSImageGeneratorValue.h"
#include "core/css/CSSPaintImageGenerator.h"
#include "platform/heap/Handle.h"

namespace blink {

class CSSPaintValue : public CSSImageGeneratorValue {
public:
    static CSSPaintValue* create(CSSCustomIdentValue* name)
    {
        return new CSSPaintValue(name);
    }
    ~CSSPaintValue();

    String customCSSText() const;

    String name() const;

    PassRefPtr<Image> image(const LayoutObject&, const IntSize&);
    bool isFixedSize() const { return false; }
    IntSize fixedSize(const LayoutObject&) { return IntSize(); }

    bool isPending() const { return false; }
    bool knownToBeOpaque(const LayoutObject&) const { return false; }

    void loadSubimages(Document*) { }

    bool equals(const CSSPaintValue&) const;

    DECLARE_TRACE_AFTER_DISPATCH();

private:
    explicit CSSPaintValue(CSSCustomIdentValue* name);

    class Observer final : public CSSPaintImageGenerator::Observer {
        WTF_MAKE_NONCOPYABLE(Observer);
    public:
        explicit Observer(CSSPaintValue* ownerValue)
            : m_ownerValue(ownerValue)
        {
        }

        ~Observer() override { }
        DEFINE_INLINE_VIRTUAL_TRACE()
        {
            visitor->trace(m_ownerValue);
            CSSPaintImageGenerator::Observer::trace(visitor);
        }

        void paintImageGeneratorReady() final;
    private:
        Member<CSSPaintValue> m_ownerValue;
    };

    void paintImageGeneratorReady();

    Member<CSSCustomIdentValue> m_name;
    Member<CSSPaintImageGenerator> m_generator;
    Member<Observer> m_paintImageGeneratorObserver;
};

DEFINE_CSS_VALUE_TYPE_CASTS(CSSPaintValue, isPaintValue());

} // namespace blink

#endif // CSSPaintValue_h
